File size: 3,587 Bytes
30adccc
5778218
30adccc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import os
import gradio as gr
import uuid
from app_p.gemini_agent import RabbitLifeAgent  # import agent class จากไฟล์ gemini_agent.py

# สร้าง instance agent global
# agent = RabbitLifeAgent()

def initialize_session_sync():
    session_id = str(uuid.uuid4())[:8]
    agent_instance = RabbitLifeAgent()
    history = []
    # agent_instance.session_id = session_id
    return "", session_id, agent_instance, history

def chat_function(prompt, history, session_id, agent_instance):
    if agent_instance is None:
        return history, "", session_id, agent_instance
    
    # Append the user's input to the message history
    history.append({"role": "user", "content": prompt})
    response = agent_instance.start_chat_session(prompt)

    # Append the assistant's response to the message history
    history.append({"role": "assistant", "content": response})
    
    return history, "", session_id, agent_instance


# Function to save feedback with chat history
async def send_feedback(feedback, history, session_id, agent_instance):
    os.makedirs("app/feedback", exist_ok=True)
    filename = f"app/feedback/feedback_{session_id}.txt"
    with open(filename, "a", encoding="utf-8") as f:
        f.write("=== Feedback Received ===\n")
        f.write(f"Session ID: {session_id}\n")
        f.write(f"Feedback: {feedback}\n")
        f.write("Chat History:\n")
        for msg in history:
            f.write(f"{msg['role']}: {msg['content']}\n")
        f.write("\n--------------------------\n\n")
    return "" # Clear feedback input


# Create the Gradio interface
with gr.Blocks(theme=gr.themes.Soft(primary_hue="orange")) as demo:
# with gr.Blocks(theme="Nymbo/gradio_theme_builder") as demo:
# with gr.Blocks(theme=gr.themes.Citrus(primary_hue="orange")) as demo:
    gr.Markdown("# แรบบิท ไลฟ์ ประกันชีวิต | RABBIT LIFE")

    # Initialize State
    session_state = gr.State()
    chatbot_instance = gr.State()
    chatbot_history = gr.State([])

    # Chat UI
    chatbot_interface = gr.Chatbot(type="messages", label="Chat History")
    user_input = gr.Textbox(placeholder="Type your message here...", elem_id="user_input", lines=1)

    submit_button = gr.Button("Send")
    clear_button = gr.Button("Delete Chat History")

    # Submit actions
    submit_button.click(
        fn=chat_function,
        inputs=[user_input, chatbot_history, session_state, chatbot_instance],
        outputs=[chatbot_interface, user_input, session_state, chatbot_instance]
    )

    user_input.submit(
        fn=chat_function,
        inputs=[user_input, chatbot_history, session_state, chatbot_instance],
        outputs=[chatbot_interface, user_input, session_state, chatbot_instance]
    )


    with gr.Row():
        feedback_input = gr.Textbox(placeholder="Send us feedback...", label="Feedback")
        send_feedback_button = gr.Button("Send Feedback")

    send_feedback_button.click(
        fn=send_feedback,
        inputs=[feedback_input, chatbot_history, session_state, chatbot_instance],
        outputs=[feedback_input]
    )

    demo.load(
        fn=initialize_session_sync,
        inputs=[],
        outputs=[user_input, session_state, chatbot_instance, chatbot_history]
    )

    clear_button.click(
        fn=initialize_session_sync,
        inputs=[],
        outputs=[user_input, session_state, chatbot_instance, chatbot_history]
    ).then(
        fn=lambda: gr.update(value=[]),
        inputs=[],
        outputs=chatbot_interface
    )


# Launch
# demo.launch()
demo.launch(share=True)