Poojashetty357/Python_Tutorbot_Additionalfeatures
0
1 2import os3import gradio as gr4from openai import OpenAI5from dotenv import load_dotenv6import re7 8# ๐ Load API key9load_dotenv()10api_key = os.getenv("OPENAI_API_KEY")11client = OpenAI(api_key=api_key)12 13# โจ Global variable to store last topic and correct answer14last_user_question = ""15last_correct_answer = ""16quiz_question_text = ""17quiz_options = []18 19# ๐ Python Tutor Function20def python_tutor(user_input):21 global last_user_question22 last_user_question = user_input # store latest question for quiz23 response = client.chat.completions.create(24 model="gpt-4.1-mini",25 messages=[26 {27 "role": "system",28 "content": """You are a Python tutor. Help users understand Python with short examples. Be kind, clear, and only answer Python-related questions."""29 },30 {"role": "user", "content": user_input}31 ],32 temperature=0.1,33 max_tokens=50034 )35 return response.choices[0].message.content36 37# ๐ Dynamic Quiz Generator Based on User Topic38def generate_quiz():39 global last_user_question, last_correct_answer, quiz_question_text, quiz_options40 41 if not last_user_question:42 return "Please ask a Python question first in the tutor tab.", gr.update(choices=[])43 44 quiz_prompt = f"""Generate one simple multiple-choice quiz question based on this Python topic/question: "{last_user_question}". 45Format: 46Question: ...47Options:48A. ...49B. ...50C. ...51D. ...52Answer: ..."""53 54 response = client.chat.completions.create(55 model="gpt-4.1-mini",56 messages=[57 {"role": "system", "content": "You are a quiz generator for Python topics."},58 {"role": "user", "content": quiz_prompt}59 ],60 temperature=0.3,61 max_tokens=30062 )63 64 content = response.choices[0].message.content.strip()65 66 # Parse question, options, answer67 question_match = re.search(r"Question:\s*(.*)", content)68 options_match = re.findall(r"[A-D]\.\s*(.*)", content)69 answer_match = re.search(r"Answer:\s*([A-D])", content)70 71 if not (question_match and options_match and answer_match):72 return "โ Error parsing quiz content.", gr.update(choices=[])73 74 quiz_question_text = question_match.group(1)75 quiz_options = options_match76 last_correct_answer = answer_match.group(1).strip().upper()77 78 return quiz_question_text, gr.update(choices=quiz_options, value=None)79 80# โ
Evaluate Answer81def evaluate_user_answer(user_choice):82 if not user_choice:83 return "Please select an answer."84 85 correct_index = ord(last_correct_answer) - ord("A")86 correct_option = quiz_options[correct_index]87 88 if user_choice.strip() == correct_option.strip():89 return "โ
Correct! Well done!"90 else:91 return f"โ Incorrect. The correct answer is: {last_correct_answer}. {correct_option}"92 93# ๐จ Gradio UI with Two Pages94with gr.Blocks() as app:95 with gr.Tab("๐ Python Tutor"):96 gr.Markdown("### Ask your Python question:")97 question_input = gr.Textbox(lines=2, label="Your Question")98 answer_output = gr.Textbox(label="Tutor's Answer")99 gr.Button("Ask").click(python_tutor, inputs=question_input, outputs=answer_output)100 101 with gr.Tab("๐งช Mini Quiz"):102 gr.Markdown("### Quiz Based on Your Tutor Question")103 quiz_question = gr.Textbox(label="Generated Quiz Question", interactive=False)104 options_dropdown = gr.Dropdown(label="Choose Your Answer", choices=[])105 result_output = gr.Textbox(label="Result")106 generate_btn = gr.Button("๐ Generate Quiz")107 submit_btn = gr.Button("โ
Submit Answer")108 109 generate_btn.click(fn=generate_quiz, outputs=[quiz_question, options_dropdown])110 submit_btn.click(fn=evaluate_user_answer, inputs=options_dropdown, outputs=result_output)111 112app.launch()113 