poc_hey / app.py
Ing's picture
fix
4f0e03e
import gradio as gr
import os
import uuid
from chat_3 import Chat
# Function to initialize a new session and create chatbot instance for that session
def initialize_session():
session_id = str(uuid.uuid4())[:8] # Generate unique session ID
chatbot = Chat() # Create a new Chat instance for this session
# chatbot = Chat("gemini-2.0-flash")
history = [] # Initialize history for this session
return "", session_id, chatbot, history # "" for clearing input
# Function to handle user input and chatbot response
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 = chatbot.chat(prompt)
# Append the assistant's response to the message history
history.append({"role": "assistant", "content": response})
return history, "", session_id, chatbot # Clear input
# Function to save feedback with chat history
def send_feedback(feedback, history, session_id, chatbot):
os.makedirs("app/feedback", exist_ok=True) # Create folder if not exists
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="pink")) as demo:
gr.Markdown("# Hey Beauty Chatbot 🧖🏻‍♀️✨🌿")
gr.Markdown("สวัสดีค่ะ Hey Beauty ยินดีให้บริการค่ะ")
# 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]
)
if __name__ == "__main__":
# Launch
demo.launch(share=True)
# demo.launch()
# import gradio as gr
# from huggingface_hub import InferenceClient
# """
# For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
# """
# client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# def respond(
# message,
# history: list[tuple[str, str]],
# system_message,
# max_tokens,
# temperature,
# top_p,
# ):
# messages = [{"role": "system", "content": system_message}]
# for val in history:
# if val[0]:
# messages.append({"role": "user", "content": val[0]})
# if val[1]:
# messages.append({"role": "assistant", "content": val[1]})
# messages.append({"role": "user", "content": message})
# response = ""
# for message in client.chat_completion(
# messages,
# max_tokens=max_tokens,
# stream=True,
# temperature=temperature,
# top_p=top_p,
# ):
# token = message.choices[0].delta.content
# response += token
# yield response
# """
# For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
# """
# demo = gr.ChatInterface(
# respond,
# additional_inputs=[
# gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
# gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
# gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
# gr.Slider(
# minimum=0.1,
# maximum=1.0,
# value=0.95,
# step=0.05,
# label="Top-p (nucleus sampling)",
# ),
# ],
# )
# if __name__ == "__main__":
# demo.launch()