LLMates / app.py
Sanchit Verma
Rename app variable to demo in app.py for clarity and consistency in Gradio usage
55ee68d
import gradio as gr
from config import DEFAULT_PERSONA
from prompts import PERSONAS
from utils import generate_response
def handle_message(persona, user_input, history):
"""Process a chat message and return updated history.
Args:
persona: Selected chat persona
user_input: User's message
history: Previous chat messages
Returns:
Updated chat history with new messages
"""
# Validate inputs
if not persona or persona not in PERSONAS:
return history + [
{"role": "assistant", "content": "Please select a valid persona"}
]
if not user_input.strip():
return history + [{"role": "assistant", "content": "Please enter a message"}]
try:
# Get response from model
return generate_response(PERSONAS[persona], user_input, history)
except Exception as e:
# Return error message in proper format
return history + [{"role": "assistant", "content": f"Error: {str(e)}"}]
with gr.Blocks() as demo:
gr.Markdown("## 🤖 LLMates: Persona-based Chat Assistant")
persona = gr.Dropdown(
choices=list(PERSONAS.keys()), value=DEFAULT_PERSONA, label="Choose Persona"
)
chatbox = gr.Chatbot(label="LLMates", type="messages")
msg = gr.Textbox(label="Type your message...")
chat_history = gr.State([])
def user_submit(user_input, history, persona):
if not user_input.strip():
return (
[],
history,
"",
) # Return empty chatbox update but keep history and clear input
if not persona or persona not in PERSONAS:
return (
[],
history
+ [{"role": "assistant", "content": "Please select a valid persona"}],
"",
)
try:
# Get response from model
new_history = generate_response(PERSONAS[persona], user_input, history)
return (
new_history,
new_history,
"",
) # Clear input after successful submission
except Exception as e:
return (
[],
history + [{"role": "assistant", "content": f"Error: {str(e)}"}],
"",
)
def clear_history():
"""Clear the chat history and reset message input when persona changes"""
return ([], [], "") # Clear chatbox, history state, and message input
# Clear chat history and reset message input when persona changes
persona.change(clear_history, outputs=[chatbox, chat_history, msg])
# Handle message submission
msg.submit(user_submit, [msg, chat_history, persona], [chatbox, chat_history, msg])
# main function
if __name__ == "__main__":
demo.launch()