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) |