FastchatUI / app.py
0Learn's picture
updated the UI to have title
922583c verified
import os
import gradio as gr
import requests
BACKEND_URL = "https://0learn-fastchat.hf.space" # Update this with your actual FastAPI backend URL
class ConversationState:
def __init__(self):
self.conversation_id = None
self.title = "New Conversation"
state = ConversationState()
def chat_with_groq(message, history):
messages = [{"role": "user" if i % 2 == 0 else "assistant", "content": msg}
for i, msg in enumerate([item for sublist in history for item in sublist] + [message])]
payload = {"messages": messages}
if state.conversation_id:
payload["conversation_id"] = state.conversation_id
response = requests.post(f"{BACKEND_URL}/chat", json=payload)
response_data = response.json()
state.conversation_id = response_data["conversation_id"]
# Update title if it's a new conversation
if len(history) == 0:
state.title = message[:30] + "..." if len(message) > 30 else message
return response_data["response"]
def load_conversation(conversation_id):
if not conversation_id:
return [], state.title
response = requests.get(f"{BACKEND_URL}/conversations/{conversation_id}")
if response.status_code == 200:
conversation_data = response.json()
state.conversation_id = conversation_id
messages = conversation_data["messages"]
state.title = messages[0]["content"][:30] + "..." if len(messages[0]["content"]) > 30 else messages[0]["content"]
return [(msg["content"], messages[i+1]["content"]) for i, msg in enumerate(messages[::2])], state.title
else:
return [], "Conversation not found"
def start_new_conversation():
state.conversation_id = None
state.title = "New Conversation"
return [], state.title
def continue_conversation():
if state.conversation_id:
return load_conversation(state.conversation_id)
else:
return [], "No previous conversation"
with gr.Blocks() as demo:
gr.Markdown("# Groq Chatbot with Enhanced Conversation Management")
with gr.Row():
new_conv_btn = gr.Button("New Conversation")
continue_conv_btn = gr.Button("Continue Previous Conversation")
title_display = gr.Markdown(f"## Current Conversation: {state.title}")
chatbot = gr.Chatbot()
msg = gr.Textbox(label="Type your message here")
clear = gr.Button("Clear Chat")
def respond(message, chat_history):
bot_message = chat_with_groq(message, chat_history)
chat_history.append((message, bot_message))
return "", chat_history, state.title
msg.submit(respond, [msg, chatbot], [msg, chatbot, title_display])
clear.click(lambda: ([], state.title), None, [chatbot, title_display], queue=False)
new_conv_btn.click(start_new_conversation, None, [chatbot, title_display])
continue_conv_btn.click(continue_conversation, None, [chatbot, title_display])
demo.launch()