bps-eligibility / app.py
Hara
Disable Gradio example caching
468fc1c
Raw
History Blame Contribute Delete
4.68 kB
"""
Gradio Web Interface for Boston School Chatbot
This script creates a web interface for your chatbot using Gradio.
You only need to implement the chat function.
Key Features:
- Creates a web UI for your chatbot
- Handles conversation history
- Provides example questions
- Can be deployed to Hugging Face Spaces
Example Usage:
# Run locally:
python app.py
# Access in browser:
# http://localhost:7860
"""
import gradio as gr
from src.chat import SchoolChatbot
import json
def create_chatbot():
"""
Creates and configures the chatbot interface.
"""
chatbot = SchoolChatbot()
def chat(message, history, conversation_state):
"""
Generate a response for the current message, using conversation history and state.
This function is called by Gradio's ChatInterface every time a user sends a message.
It maintains conversation state between messages.
Args:
message (str): The current message from the user
history (list): List of previous message pairs, where each pair is
[user_message, assistant_message]
conversation_state (str): JSON string of current conversation state
Returns:
tuple: (response, updated_conversation_state)
"""
try:
# Load the conversation state if it exists
if conversation_state:
try:
state_dict = json.loads(conversation_state)
chatbot.conversation_state = state_dict
except:
# If there's an error parsing, just use a fresh state
chatbot.reset_state()
# Get response from chatbot, passing in the conversation history
response = chatbot.get_response(message, history)
# Save the updated conversation state
updated_state = json.dumps(chatbot.conversation_state)
return response, updated_state
except Exception as e:
return f"I apologize, but I encountered an error. Please try again. Error: {str(e)}", conversation_state
# Create blocks for more flexible interface
with gr.Blocks(title="Boston Public School Selection Assistant") as demo:
gr.Markdown("# Boston Public School Selection Assistant")
gr.Markdown("Ask me anything about Boston public schools! I can help you find eligible schools based on your address, child's grade, and language preference.")
# State to preserve conversation context
conversation_state = gr.State({})
# Standard chat interface
chatbot_interface = gr.ChatInterface(
fn=chat,
additional_inputs=[conversation_state],
additional_outputs=[conversation_state],
examples=[
["I live in Jamaica Plain and want to send my child to kindergarten. What schools are available?"],
["How old does my child need to be for K1?"],
["How do I register my child for BPS?"],
["What documents do I need to apply?"],
["I'm looking for schools for my child who will be in 3rd grade. We live near 123 Commonwealth Ave, Boston, MA 02115."],
["What phone number or email can I contact to obtain more information?"]
],
title="",
cache_examples=False
)
# Reset button
with gr.Row():
reset_btn = gr.Button("Reset Conversation")
def reset_conversation():
chatbot.reset_state()
return json.dumps(chatbot.conversation_state)
reset_btn.click(reset_conversation, outputs=[conversation_state])
# Footer with additional information
gr.Markdown("""
## How to use this assistant:
This chatbot can help you with:
- Finding eligible schools based on your address, child's grade, and language preference
- Understanding the school registration process
- Getting information about required documents
- Learning about Welcome Centers and contact information
If you want to find schools, I'll ask for:
1. Your Boston address or zip code
2. Your child's grade level
3. Your language preference
You can also start a new search at any time by clicking the Reset button or typing "start over".
""")
return demo
if __name__ == "__main__":
demo = create_chatbot()
demo.launch()