""" Gradio Interface for EduTutor AI """ import gradio as gr def create_gradio_interface(ai_tutor, features): """Create the main Gradio interface""" def chat_interface(message, subject, difficulty, history): if not message.strip(): return history, history, "" response = ai_tutor.generate_response(message, subject, difficulty) history.append([message, response]) return history, history, "" def create_quiz_interface(topic, subject, num_questions): if not topic.strip(): return "Please enter a topic for the quiz.", "" quiz_content, session_id = features.create_quiz(topic, subject, int(num_questions)) return quiz_content, session_id def submit_quiz_interface(session_id, q1, q2, q3, q4, q5, student_name): if not session_id: return "No active quiz session." answers = {"q1": q1, "q2": q2, "q3": q3, "q4": q4, "q5": q5} answers = {k: v for k, v in answers.items() if v} return features.submit_quiz(session_id, answers, student_name) def homework_analyzer_interface(homework_text, subject): if not homework_text.strip(): return "Please enter your homework." return features.homework_analyzer.analyze_homework_comprehensive(homework_text, subject) def study_plan_interface(topic, subject, duration): if not topic.strip(): return "Please enter a topic." return features.create_study_plan(topic, subject, duration) def track_progress_interface(student_name, subject, topic, score, activity): if not all([student_name.strip(), subject, topic.strip(), activity.strip()]): return "Please fill in all fields." try: score_float = float(score) if not 0 <= score_float <= 100: return "Score must be between 0 and 100." return features.track_progress(student_name, subject, topic, score_float, activity) except ValueError: return "Please enter a valid score." def view_progress_interface(student_name): if not student_name.strip(): return "Please enter a student name." return features.view_progress(student_name) with gr.Blocks(title="🎓 EduTutor AI", theme=gr.themes.Soft()) as app: gr.Markdown("# 🎓 EduTutor AI - Your Complete Learning Companion") with gr.Tabs(): with gr.TabItem("🤖 AI Chat Tutor"): with gr.Row(): chat_subject = gr.Dropdown( choices=["Mathematics", "Physics", "Chemistry", "Biology", "General"], value="Mathematics", label="📚 Subject" ) chat_difficulty = gr.Dropdown( choices=["Beginner", "Intermediate", "Advanced"], value="Intermediate", label="🎯 Difficulty" ) chatbot = gr.Chatbot(label="💬 AI Tutor", height=400) chat_input = gr.Textbox(placeholder="Ask any question...", label="✍️ Your Question", lines=2) with gr.Row(): chat_submit = gr.Button("🚀 Ask AI Tutor", variant="primary") chat_clear = gr.Button("🗑️ Clear Chat") chat_history = gr.State([]) chat_submit.click(chat_interface, [chat_input, chat_subject, chat_difficulty, chat_history], [chatbot, chat_history, chat_input]) chat_input.submit(chat_interface, [chat_input, chat_subject, chat_difficulty, chat_history], [chatbot, chat_history, chat_input]) chat_clear.click(lambda: ([], []), outputs=[chatbot, chat_history]) with gr.TabItem("📊 Homework Analyzer"): homework_subject = gr.Dropdown( choices=["Mathematics", "Physics", "Chemistry", "Biology"], value="Mathematics", label="📚 Subject" ) homework_input = gr.Textbox(placeholder="Paste your homework here...", label="📝 Homework", lines=8) homework_submit = gr.Button("🔍 Analyze Homework", variant="primary") homework_output = gr.Markdown(label="📊 Analysis", value="Upload homework above for analysis.") homework_submit.click(homework_analyzer_interface, [homework_input, homework_subject], homework_output) with gr.TabItem("📝 Interactive Quiz"): with gr.Row(): quiz_topic = gr.Textbox(placeholder="e.g., Algebra, Photosynthesis", label="📚 Topic") quiz_subject = gr.Dropdown(choices=["Mathematics", "Physics", "Chemistry", "Biology"], value="Mathematics", label="🎯 Subject") quiz_num_questions = gr.Dropdown(choices=["3", "5"], value="5", label="❓ Questions") create_quiz_btn = gr.Button("📝 Create Quiz", variant="primary") quiz_display = gr.Markdown(label="📝 Quiz", value="Click 'Create Quiz' to generate questions.") quiz_session_id = gr.Textbox(visible=False) with gr.Row(): with gr.Column(): q1_answer = gr.Radio(choices=["A", "B", "C", "D"], label="Question 1") q2_answer = gr.Radio(choices=["A", "B", "C", "D"], label="Question 2") q3_answer = gr.Radio(choices=["A", "B", "C", "D"], label="Question 3") with gr.Column(): q4_answer = gr.Radio(choices=["A", "B", "C", "D"], label="Question 4") q5_answer = gr.Radio(choices=["A", "B", "C", "D"], label="Question 5") quiz_student_name = gr.Textbox(placeholder="Your name (optional)", label="👤 Name") submit_quiz_btn = gr.Button("📊 Submit Quiz", variant="secondary") quiz_results = gr.Markdown(label="📊 Results", value="Complete quiz and submit to see results.") create_quiz_btn.click(create_quiz_interface, [quiz_topic, quiz_subject, quiz_num_questions], [quiz_display, quiz_session_id]) submit_quiz_btn.click(submit_quiz_interface, [quiz_session_id, q1_answer, q2_answer, q3_answer, q4_answer, q5_answer, quiz_student_name], quiz_results) with gr.TabItem("📋 Study Plans"): with gr.Row(): plan_topic = gr.Textbox(placeholder="e.g., Linear Equations", label="📚 Topic") plan_subject = gr.Dropdown(choices=["Mathematics", "Physics", "Chemistry", "Biology"], value="Mathematics", label="🎯 Subject") plan_duration = gr.Dropdown(choices=["1 week", "2 weeks", "1 month"], value="2 weeks", label="⏰ Duration") create_plan_btn = gr.Button("📋 Generate Study Plan", variant="primary") study_plan_output = gr.Markdown(label="📋 Study Plan", value="Enter topic to create personalized study plan.") create_plan_btn.click(study_plan_interface, [plan_topic, plan_subject, plan_duration], study_plan_output) with gr.TabItem("📈 Progress Tracking"): with gr.Tabs(): with gr.TabItem("➕ Add Progress"): with gr.Row(): progress_student = gr.Textbox(placeholder="Student name", label="👤 Name") progress_subject = gr.Dropdown(choices=["Mathematics", "Physics", "Chemistry", "Biology"], value="Mathematics", label="📚 Subject") progress_topic = gr.Textbox(placeholder="e.g., Algebra", label="📖 Topic") progress_score = gr.Number(value=85, minimum=0, maximum=100, label="📊 Score (%)") progress_activity = gr.Textbox(placeholder="e.g., Quiz completed", label="📝 Activity") add_progress_btn = gr.Button("➕ Add Progress", variant="primary") progress_add_output = gr.Markdown(label="✅ Update", value="Fill details above to record progress.") add_progress_btn.click(track_progress_interface, [progress_student, progress_subject, progress_topic, progress_score, progress_activity], progress_add_output) with gr.TabItem("📊 View Progress"): view_progress_student = gr.Textbox(placeholder="Student name", label="👤 Name") view_progress_btn = gr.Button("📊 Generate Report", variant="primary") progress_report_output = gr.Markdown(label="📈 Report", value="Enter student name to view progress.") view_progress_btn.click(view_progress_interface, view_progress_student, progress_report_output) gr.Markdown("---\n## 🎓 About EduTutor AI\nAdvanced AI-powered educational platform for personalized learning.") return app