File size: 2,718 Bytes
0da7a7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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)
            )