Siddiqui Qamar
Create app.py
e6cb8e8 verified
raw
history blame
6.36 kB
import gradio as gr
from openai import OpenAI
import os
ACCESS_TOKEN = os.getenv("HF_TOKEN")
client = OpenAI(
base_url="https://api-inference.huggingface.co/v1/",
api_key=ACCESS_TOKEN,
)
*def* *generate_study_material*(
topic,
difficulty,
question_type,
focus_areas,
anxiety_level,
num_questions
):
# Customize prompt based on anxiety level and learning focus
anxiety_prompts = {
"High": "Create a gradual, confidence-building set of questions. Start with easier concepts and progressively increase difficulty. Include encouraging notes.",
"Medium": "Balance challenge with achievability. Include hints for tougher questions and positive reinforcement.",
"Low": "Focus on comprehensive concept testing while maintaining an encouraging tone."
}
focus_prompt = {
"concept_understanding": "Emphasize questions that test deep understanding rather than memorization.",
"problem_solving": "Include scenario-based questions that require analytical thinking.",
"quick_recall": "Focus on key definitions and fundamental concepts.",
"practical_application": "Create questions based on real-world applications."
}
base_prompt = f"""
Act as an expert educational psychologist and subject matter expert creating an exam preparation guide.
Topic: {topic}
Difficulty: {difficulty}
Question Type: {question_type}
Number of Questions: {num_questions}
Special Considerations:
- Anxiety Level: {anxiety_level}
{anxiety_prompts[anxiety_level]}
- Learning Focus: {focus_areas}
{focus_prompt[focus_areas]}
Generate questions following these guidelines:
1. Start with a brief confidence-building message
2. Include clear, unambiguous questions
3. Provide detailed explanations for each answer
4. Add study tips relevant to the topic
5. Include a "Remember" section with key points
Format:
- For Multiple Choice: Include 4 options with explanations for each
- For Short Answer: Provide structure hints and model answers
- For Descriptive: Break down marking criteria and include outline points
Additional Requirements:
- Include think-aloud strategies for problem-solving
- Add time management suggestions
- Highlight common misconceptions to avoid
- End with a positive reinforcement message
"""
*try*:
messages = [
{"role": "system", "content": "You are an expert educational content generator."},
{"role": "user", "content": base_prompt}
]
response = client.chat.completions.create(
model="Qwen/QwQ-32B-Preview",
messages=messages,
max_tokens=2048,
temperature=0.7,
top_p=0.9
)
*return* response.choices[0].message.content
*except* *Exception* *as* e:
*return* f"An error occurred: {*str*(e)}\nPlease try again with different parameters."
*def* *create_interface*():
*with* gr.Blocks(theme=gr.themes.Soft(primary_hue="blue")) *as* iface:
gr.Markdown("""
# <div align="center"><strong>📚 Exam Preparation Assistant</strong></div>
Welcome to your personalized exam preparation assistant! This tool is designed to help you:
- Build confidence through practiced learning
- Understand concepts deeply
- Reduce exam anxiety through structured practice
Remember: Every practice session brings you closer to mastery! 🌟
""")
*with* gr.Row():
*with* gr.Column():
topic = gr.Textbox(
label="Topic or Subject",
placeholder="Enter the topic you want to study (e.g., 'Python Lists and Tuples', 'Chemical Bonding')",
lines=2
)
difficulty = gr.Radio(
choices=["Beginner", "Intermediate", "Advanced"],
label="Difficulty Level",
value="Intermediate",
info="Choose based on your current understanding"
)
question_type = gr.Radio(
choices=["Multiple Choice", "Short Answer", "Descriptive"],
label="Question Type",
value="Multiple Choice",
info="Select the format that best helps your learning"
)
focus_areas = gr.Radio(
choices=[
"concept_understanding",
"problem_solving",
"quick_recall",
"practical_application"
],
label="Learning Focus",
value="concept_understanding",
info="What aspect do you want to improve?"
)
anxiety_level = gr.Radio(
choices=["High", "Medium", "Low"],
label="Current Anxiety Level",
value="Medium",
info="This helps us adjust the difficulty progression"
)
num_questions = gr.Slider(
minimum=3,
maximum=10,
value=5,
step=1,
label="Number of Questions"
)
submit_btn = gr.Button(
"Generate Study Material",
variant="primary"
)
*with* gr.Column():
output = gr.Textbox(
label="Your Personalized Study Material",
lines=20,
show_copy_button=True
)
submit_btn.click(
*fn*=generate_study_material,
inputs=[
topic,
difficulty,
question_type,
focus_areas,
anxiety_level,
num_questions
],
outputs=output
)
*return* iface
*if* **name** == "__main__":
iface = create_interface()
iface.launch()