flaskbot / app.py
markobinario's picture
Create app.py
f8ea354 verified
raw
history blame
8.16 kB
import gradio as gr
from chatbot import Chatbot
import json
# Initialize chatbot
chatbot = Chatbot()
def chat_interface(message, history):
"""Handle chat interface with Gradio"""
if not message.strip():
return "Please enter a message."
# Get response from chatbot
response = chatbot.get_response(message)
# Format the response for display (removed confidence)
if response['status'] == 'success':
formatted_response = response['answer']
else:
formatted_response = response['answer']
return formatted_response
def get_system_info():
"""Get system information"""
faq_count = chatbot.get_qa_count()
return f"System Status: βœ… Active\nFAQ Pairs Loaded: {faq_count}\nCourse Recommender: βœ… Ready"
def get_course_recommendations(stanine, gwa, strand, hobbies):
"""Get course recommendations"""
return chatbot.get_course_recommendations(stanine, gwa, strand, hobbies)
# Create Gradio interface
with gr.Blocks(
title="AI Chatbot",
theme=gr.themes.Soft(),
css="""
.gradio-container {
max-width: 800px !important;
margin: auto !important;
}
.chat-message {
padding: 10px;
margin: 5px 0;
border-radius: 10px;
}
"""
) as demo:
gr.Markdown(
"""
# πŸ€– AI Student Assistant
Get answers to your questions and personalized course recommendations!
**Features:**
- FAQ Chat: Get instant answers from our knowledge base
- Course Recommendations: Get personalized course suggestions based on your profile
"""
)
with gr.Tabs():
with gr.TabItem("πŸ’¬ FAQ Chat"):
with gr.Row():
with gr.Column(scale=3):
chatbot_interface = gr.Chatbot(
label="FAQ Chat",
height=400,
show_label=True,
container=True,
bubble_full_width=False
)
with gr.Row():
msg = gr.Textbox(
placeholder="Type your question here...",
show_label=False,
scale=4,
container=False
)
submit_btn = gr.Button("Send", variant="primary", scale=1)
with gr.Column(scale=1):
gr.Markdown("### System Info")
system_info = gr.Textbox(
value=get_system_info(),
label="Status",
interactive=False,
lines=4
)
refresh_btn = gr.Button("Refresh Status", variant="secondary")
gr.Markdown("### FAQ Instructions")
gr.Markdown(
"""
**How to use:**
1. Type your question in the text box
2. Click Send or press Enter
3. Get AI-powered answers from FAQ database
**Tips:**
- Ask specific questions for better results
- Try rephrasing if you don't get a good match
"""
)
with gr.TabItem("🎯 Course Recommendations"):
with gr.Row():
with gr.Column(scale=2):
gr.Markdown("### πŸ“ Student Profile")
stanine_input = gr.Slider(
minimum=1,
maximum=9,
step=1,
value=5,
label="Stanine Score (1-9)",
info="Your stanine score from standardized tests"
)
gwa_input = gr.Slider(
minimum=75,
maximum=100,
step=0.1,
value=85,
label="GWA (75-100)",
info="Your General Weighted Average"
)
strand_input = gr.Dropdown(
choices=["STEM", "ABM", "HUMSS"],
label="Senior High School Strand",
info="Select your SHS strand"
)
hobbies_input = gr.Textbox(
label="Hobbies & Interests",
placeholder="e.g., programming, gaming, business, teaching...",
lines=3,
info="Describe your interests and hobbies"
)
recommend_btn = gr.Button("Get Recommendations", variant="primary", size="lg")
with gr.Column(scale=3):
gr.Markdown("### 🎯 Your Course Recommendations")
recommendations_output = gr.Markdown(
value="Enter your profile details and click 'Get Recommendations' to see personalized course suggestions.",
label="Recommendations"
)
gr.Markdown("### πŸ“š Available Courses")
gr.Markdown(
"""
**STEM Courses:**
- BSCS: Bachelor of Science in Computer Science
- BSIT: Bachelor of Science in Information Technology
- BSArch: Bachelor of Science in Architecture
- BSIE: Bachelor of Science in Industrial Engineering
- BSN: Bachelor of Science in Nursing
**ABM Courses:**
- BSBA: Bachelor of Science in Business Administration
- BSA: Bachelor of Science in Accountancy
**HUMSS Courses:**
- BSED: Bachelor of Science in Education
- BSPsych: Bachelor of Science in Psychology
**Other Courses:**
- BSHM: Bachelor of Science in Hospitality Management
- BSAgri: Bachelor of Science in Agriculture
"""
)
# Event handlers
def user(user_message, history):
return "", history + [[user_message, None]]
def bot(history):
user_message = history[-1][0]
bot_message = chat_interface(user_message, history)
history[-1][1] = bot_message
return history
def refresh_system_info():
return get_system_info()
# Connect FAQ Chat events
submit_btn.click(
fn=user,
inputs=[msg, chatbot_interface],
outputs=[msg, chatbot_interface],
queue=False
).then(
fn=bot,
inputs=chatbot_interface,
outputs=chatbot_interface,
queue=True
)
msg.submit(
fn=user,
inputs=[msg, chatbot_interface],
outputs=[msg, chatbot_interface],
queue=False
).then(
fn=bot,
inputs=chatbot_interface,
outputs=chatbot_interface,
queue=True
)
# Connect Course Recommendation events
recommend_btn.click(
fn=get_course_recommendations,
inputs=[stanine_input, gwa_input, strand_input, hobbies_input],
outputs=recommendations_output
)
refresh_btn.click(
fn=refresh_system_info,
outputs=system_info
)
if __name__ == "__main__":
demo.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
show_error=True,
quiet=False
)