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)