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 )