law_poc / app.py
SUMANA SUMANAKUL (ING)
modify gradio
f93f4c9
raw
history blame
7.64 kB
import os
os.environ["OTEL_TRACES_EXPORTER"] = "none"
import gradio as gr
import uuid
from utils.chat import ChatLaborLaw
def initialize_session():
"""
สร้าง session ID ใหม่ และสร้าง instance ใหม่ของ ChatLaborLaw
"""
session_id = str(uuid.uuid4())[:8]
chatbot_instance = ChatLaborLaw()
return "", session_id, chatbot_instance, []
async def chat_function(prompt: str, history_ui: list, chatbot_instance: ChatLaborLaw):
"""
จัดการการสนทนา
"""
if chatbot_instance is None or not prompt.strip():
return history_ui, chatbot_instance, ""
response = await chatbot_instance.chat(prompt)
history_ui.append((prompt, response))
return history_ui, chatbot_instance, ""
def save_feedback(feedback: str, history_ui: list, session_id: str):
"""
บันทึก Feedback
"""
if not feedback.strip():
return ""
os.makedirs("feedback", exist_ok=True)
filename = f"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\n")
f.write("Chat History:\n")
for user_msg, assistant_msg in history_ui:
f.write(f"User: {user_msg}\n")
f.write(f"Assistant: {assistant_msg}\n")
f.write("-" * 20 + "\n")
f.write("\n==========================\n\n")
gr.Info("ขอบคุณสำหรับข้อเสนอแนะ!")
return ""
# --------------------------------------------------------------------------
# สร้าง Gradio Interface
# --------------------------------------------------------------------------
with gr.Blocks(theme=gr.themes.Soft(primary_hue="amber")) as demo:
gr.Markdown("# สอบถามเรื่องกฎหมายแรงงาน")
session_id_state = gr.State()
chatbot_instance_state = gr.State()
chatbot_interface = gr.Chatbot(
label="ประวัติการสนทนา",
height=550,
# bubble_styling=False,
show_copy_button=True
)
user_input = gr.Textbox(placeholder="พิมพ์คำถามของคุณที่นี่...", label="คำถาม", lines=2)
with gr.Row():
submit_button = gr.Button("ส่ง", variant="primary", scale=4)
clear_button = gr.Button("เริ่มการสนทนาใหม่", scale=1)
submit_event = submit_button.click(
fn=chat_function,
inputs=[user_input, chatbot_interface, chatbot_instance_state],
outputs=[chatbot_interface, chatbot_instance_state, user_input]
)
user_input.submit(
fn=chat_function,
inputs=[user_input, chatbot_interface, chatbot_instance_state],
outputs=[chatbot_interface, chatbot_instance_state, user_input]
)
clear_button.click(
fn=initialize_session,
inputs=[],
outputs=[user_input, session_id_state, chatbot_instance_state, chatbot_interface],
queue=False
)
with gr.Accordion("ส่งข้อเสนอแนะ (Feedback)", open=False):
feedback_input = gr.Textbox(placeholder="ความคิดเห็นของคุณมีความสำคัญต่อการพัฒนาของเรา...", label="Feedback", lines=2, scale=4)
send_feedback_button = gr.Button("ส่ง Feedback")
send_feedback_button.click(
fn=save_feedback,
inputs=[feedback_input, chatbot_interface, session_id_state],
outputs=[feedback_input],
queue=False
)
demo.load(
fn=initialize_session,
inputs=[],
outputs=[user_input, session_id_state, chatbot_instance_state, chatbot_interface]
)
demo.queue().launch()
# # Function to initialize a new session and create chatbot instance for that session
# async def initialize_session():
# session_id = str(uuid.uuid4())[:8]
# chatbot = ChatLaborLaw()
# # chatbot = Chat("gemini-2.0-flash")
# history = []
# return "", session_id, chatbot, history
# # Function to handle user input and chatbot response
# async def chat_function(prompt, history, session_id, chatbot):
# if chatbot is None:
# return history, "", session_id, chatbot # Skip if chatbot not ready
# # Append the user's input to the message history
# history.append({"role": "user", "content": prompt})
# # Get the response from the chatbot
# response = await chatbot.chat(prompt) # ใช้ await ได้แล้ว
# # Append the assistant's response to the message history
# history.append({"role": "assistant", "content": response})
# return history, "", session_id, chatbot
# # Function to save feedback with chat history
# async def send_feedback(feedback, history, session_id, chatbot):
# 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="amber")) as demo:
# gr.Markdown("# สอบถามเรื่องกฎหมายแรงงาน")
# # 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]
# )
# # # Clear history
# # clear_button.click(lambda: [], outputs=chatbot_interface)
# clear_button.click(
# fn=initialize_session,
# inputs=[],
# outputs=[user_input, session_state, chatbot_instance, chatbot_history]
# ).then(
# fn=lambda: gr.update(value=[]),
# inputs=[],
# outputs=chatbot_interface
# )
# # Feedback section
# 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]
# )
# # Initialize session on load
# demo.load(
# fn=initialize_session,
# inputs=[],
# outputs=[user_input, session_state, chatbot_instance, chatbot_history]
# )
# # Launch
# demo.launch(share=True)