Spaces:
Sleeping
Sleeping
import json | |
from datetime import datetime | |
from pathlib import Path | |
import streamlit as st | |
class FeedbackManager: | |
def __init__(self, feedback_dir="./feedback"): | |
self.feedback_dir = Path(feedback_dir) | |
self.feedback_dir.mkdir(exist_ok=True) | |
if "feedback_submitted" not in st.session_state: | |
st.session_state.feedback_submitted = set() | |
def save_feedback(self, feedback_type: str, user_input: str, assistant_response: str, message_id: str): | |
if message_id in st.session_state.feedback_submitted: | |
st.toast("Feedback já enviado para está mensagem.", icon="ℹ️") | |
return False | |
feedback_file = self.feedback_dir / f"feedback_{feedback_type}.json" | |
try: | |
data = [] | |
if feedback_file.exists(): | |
with open(feedback_file, 'r', encoding='utf-8') as f: | |
data = json.load(f) | |
feedback_entry = { | |
"message_id": message_id, | |
"timestamp": datetime.now().isoformat(), | |
"feedback_type": feedback_type, | |
"user_input": user_input, | |
"assistant_response": assistant_response, | |
} | |
data.append(feedback_entry) | |
with open(feedback_file, 'w', encoding='utf-8') as f: | |
json.dump(data, f, ensure_ascii=False, indent=2) | |
st.session_state.feedback_submitted.add(message_id) | |
emoji = "👍" if feedback_type == "positive" else "👎" | |
st.toast(f"Obrigado por seu Feedback! {emoji}", icon="✅") | |
return True | |
except Exception as e: | |
st.error(f"Error ao salvar feedback: {str(e)}") | |
return False | |
def handle_feedback_click(self, feedback_type: str, message_id: str, user_input: str, assistant_response: str): | |
self.save_feedback( | |
feedback_type=feedback_type, | |
user_input=user_input, | |
assistant_response=assistant_response, | |
message_id=message_id | |
) | |
def render_feedback_buttons(self, message_id: str, user_input: str, assistant_response: str): | |
col1, col2 = st.columns(2, gap="small") | |
with col1: | |
st.button( | |
"👍 Gostei", | |
key=f"positive_{message_id}", | |
on_click=self.handle_feedback_click, | |
args=("positive", message_id, user_input, assistant_response) | |
) | |
with col2: | |
st.button( | |
"👎 Não Gostei", | |
key=f"negative_{message_id}", | |
on_click=self.handle_feedback_click, | |
args=("negative", message_id, user_input, assistant_response) | |
) | |