law_poc / app.py
SUMANA SUMANAKUL (ING)
modify code
f946991
import os
# os.environ["OTEL_TRACES_EXPORTER"] = "none"
import gradio as gr
import uuid
from utils.chat import ChatLaborLaw
# 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)
# 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)