Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import json | |
| from io import BytesIO | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| from wordcloud import WordCloud | |
| import os | |
| def save_feedback_og(feedback): | |
| feedback_file = 'feedback_data.json' | |
| if os.path.exists(feedback_file): | |
| with open(feedback_file, 'r') as f: | |
| feedback_data = json.load(f) | |
| else: | |
| feedback_data = [] | |
| # tpl = { | |
| # 'question' : question, | |
| # 'answer' : answer, | |
| # 'context' : context, | |
| # 'options' : options, | |
| # 'rating' : rating, | |
| # } | |
| # feedback_data[question] = rating | |
| feedback_data.append(feedback) | |
| print(feedback_data) | |
| with open(feedback_file, 'w') as f: | |
| json.dump(feedback_data, f) | |
| st.session_state.feedback_data.append(feedback) | |
| return feedback_file | |
| def collect_feedback(i,question, answer, context, options): | |
| st.write("Please provide feedback for this question:") | |
| edited_question = st.text_input("Enter improved question",value=question,key=f'fdx1{i}') | |
| clarity = st.slider("Clarity", 1, 5, 3, help="1 = Very unclear, 5 = Very clear",key=f'fdx2{i}') | |
| difficulty = st.slider("Difficulty", 1, 5, 3, help="1 = Very easy, 5 = Very difficult",key=f'fdx3{i}') | |
| relevance = st.slider("Relevance", 1, 5, 3, help="1 = Not relevant, 5 = Highly relevant",key=f'fdx4{i}') | |
| option_quality = st.slider("Quality of Options", 1, 5, 3, help="1 = Poor options, 5 = Excellent options",key=f'fdx5{i}') | |
| overall_rating = st.slider("Overall Rating", 1, 5, 3, help="1 = Poor, 5 = Excellent",key=f'fdx6{i}') | |
| comments = st.text_input("Additional Comments", "",key=f'fdx7{i}') | |
| if st.button("Submit Feedback",key=f'fdx8{i}'): | |
| feedback = { | |
| "context": context, | |
| "question": question, | |
| 'edited_question':edited_question, | |
| "answer": answer, | |
| "options": options, | |
| "clarity": clarity, | |
| "difficulty": difficulty, | |
| "relevance": relevance, | |
| "option_quality": option_quality, | |
| "overall_rating": overall_rating, | |
| "comments": comments | |
| } | |
| # save_feedback(feedback) | |
| save_feedback_og(feedback) | |
| st.success("Thank you for your feedback!") | |
| def analyze_feedback(): | |
| if not st.session_state.feedback_data: | |
| st.warning("No feedback data available yet.") | |
| return | |
| df = pd.DataFrame(st.session_state.feedback_data) | |
| st.write("Feedback Analysis") | |
| st.write(f"Total feedback collected: {len(df)}") | |
| metrics = ['clarity', 'difficulty', 'relevance', 'option_quality', 'overall_rating'] | |
| for metric in metrics: | |
| fig, ax = plt.subplots() | |
| df[metric].value_counts().sort_index().plot(kind='bar', ax=ax) | |
| plt.title(f"Distribution of {metric.capitalize()} Ratings") | |
| plt.xlabel("Rating") | |
| plt.ylabel("Count") | |
| st.pyplot(fig) | |
| st.write("Average Ratings:") | |
| st.write(df[metrics].mean()) | |
| # Word cloud of comments | |
| comments = " ".join(df['comments']) | |
| if len(comments) > 1: | |
| wordcloud = WordCloud(width=800, height=400, background_color='white').generate(comments) | |
| fig, ax = plt.subplots() | |
| plt.imshow(wordcloud, interpolation='bilinear') | |
| plt.axis("off") | |
| st.pyplot(fig) | |
| def export_feedback_data(): | |
| if not st.session_state.feedback_data: | |
| st.warning("No feedback data available.") | |
| return None | |
| # Convert feedback data to JSON | |
| json_data = json.dumps(st.session_state.feedback_data, indent=2) | |
| # Create a BytesIO object | |
| buffer = BytesIO() | |
| buffer.write(json_data.encode()) | |
| buffer.seek(0) | |
| return buffer |