chatbot-carometro-staging / feedback_manager.py
leandroaraujodev's picture
teste fix: Ajustes
0da7a7f
raw
history blame
2.72 kB
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)
)