Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -14,6 +14,9 @@ st.subheader('π Test Your Knowledge!')
|
|
14 |
standard = st.text_input('π Enter Standard/Grade')
|
15 |
topic = st.text_input('π Enter Topic')
|
16 |
|
|
|
|
|
|
|
17 |
# πΉ Difficulty Level
|
18 |
difficulty = st.radio("π Select Difficulty Level", ["Low", "Medium", "Hard"])
|
19 |
|
@@ -27,30 +30,50 @@ model = ChatGroq(
|
|
27 |
model_name="llama-3.3-70b-versatile"
|
28 |
)
|
29 |
|
30 |
-
def detect_quiz_type(topic):
|
31 |
-
"""AI determines the best quiz type for the topic."""
|
32 |
-
prompt = f"""
|
33 |
-
Given the topic '{topic}', select the most suitable quiz type:
|
34 |
-
- 'MCQ' for subjects like Science, Math, History.
|
35 |
-
- 'True/False' for fact-based topics.
|
36 |
-
- 'Fill in the Blanks' for language-based topics.
|
37 |
-
|
38 |
-
Return only one of these: "MCQ", "True/False", "Fill in the Blanks".
|
39 |
-
"""
|
40 |
-
response = model.predict(prompt).strip()
|
41 |
-
if response in ["MCQ", "True/False", "Fill in the Blanks"]:
|
42 |
-
return response
|
43 |
-
return "MCQ" # Default to MCQ
|
44 |
-
|
45 |
def generate_quiz(standard, topic, quiz_type, difficulty, num_questions):
|
46 |
-
"""Generate quiz using AI
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
prompt = f"""
|
48 |
-
Generate {num_questions} {quiz_type} questions for a {standard} student on {topic}.
|
|
|
|
|
49 |
|
50 |
-
|
51 |
-
{
|
52 |
-
{{"question": "Example?", "options": ["A) Option1", "B) Option2"], "answer": "A) Option1"}}
|
53 |
-
]}}
|
54 |
"""
|
55 |
|
56 |
try:
|
@@ -86,11 +109,10 @@ if 'user_answers' not in st.session_state:
|
|
86 |
# πΉ Generate Quiz Button
|
87 |
if st.button("π Generate Quiz"):
|
88 |
if standard and topic:
|
89 |
-
|
90 |
-
st.session_state.quiz_data = generate_quiz(standard, topic, auto_quiz_type, difficulty, num_questions)
|
91 |
if st.session_state.quiz_data:
|
92 |
st.session_state.user_answers = {}
|
93 |
-
st.success(f"β
{
|
94 |
st.balloons()
|
95 |
else:
|
96 |
st.error("β οΈ Please enter both the standard and topic.")
|
@@ -103,10 +125,12 @@ if st.session_state.quiz_data:
|
|
103 |
for i, q in enumerate(questions):
|
104 |
st.write(f"**Q{i+1}: {q['question']}**")
|
105 |
|
106 |
-
if "
|
107 |
user_answer = st.radio(f"π§ Select your answer for Question {i+1}", options=q["options"], key=f"question_{i+1}")
|
|
|
|
|
108 |
else:
|
109 |
-
user_answer = st.text_input(f"π§
|
110 |
|
111 |
st.session_state.user_answers[f"question_{i+1}"] = user_answer
|
112 |
|
|
|
14 |
standard = st.text_input('π Enter Standard/Grade')
|
15 |
topic = st.text_input('π Enter Topic')
|
16 |
|
17 |
+
# πΉ User Selects Quiz Type
|
18 |
+
quiz_type = st.radio("π Select Quiz Type", ["MCQ", "True/False", "Fill in the Blanks"])
|
19 |
+
|
20 |
# πΉ Difficulty Level
|
21 |
difficulty = st.radio("π Select Difficulty Level", ["Low", "Medium", "Hard"])
|
22 |
|
|
|
30 |
model_name="llama-3.3-70b-versatile"
|
31 |
)
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
def generate_quiz(standard, topic, quiz_type, difficulty, num_questions):
|
34 |
+
"""Generate topic-specific quiz using AI in JSON format."""
|
35 |
+
|
36 |
+
format_example = {
|
37 |
+
"MCQ": '''
|
38 |
+
{
|
39 |
+
"questions": [
|
40 |
+
{
|
41 |
+
"question": "What is the chemical symbol for water?",
|
42 |
+
"options": ["A) O2", "B) CO2", "C) H2O", "D) N2"],
|
43 |
+
"answer": "C) H2O"
|
44 |
+
}
|
45 |
+
]
|
46 |
+
}
|
47 |
+
''',
|
48 |
+
"True/False": '''
|
49 |
+
{
|
50 |
+
"questions": [
|
51 |
+
{
|
52 |
+
"question": "The Sun is a planet.",
|
53 |
+
"answer": "False"
|
54 |
+
}
|
55 |
+
]
|
56 |
+
}
|
57 |
+
''',
|
58 |
+
"Fill in the Blanks": '''
|
59 |
+
{
|
60 |
+
"questions": [
|
61 |
+
{
|
62 |
+
"question": "The process by which plants make food is called ____.",
|
63 |
+
"answer": "Photosynthesis"
|
64 |
+
}
|
65 |
+
]
|
66 |
+
}
|
67 |
+
'''
|
68 |
+
}
|
69 |
+
|
70 |
prompt = f"""
|
71 |
+
Generate {num_questions} {quiz_type} questions for a {standard} grade student on the topic '{topic}' with {difficulty} difficulty.
|
72 |
+
|
73 |
+
Ensure the quiz is strictly about '{topic}'.
|
74 |
|
75 |
+
Return strictly in JSON format like this:
|
76 |
+
{format_example[quiz_type]}
|
|
|
|
|
77 |
"""
|
78 |
|
79 |
try:
|
|
|
109 |
# πΉ Generate Quiz Button
|
110 |
if st.button("π Generate Quiz"):
|
111 |
if standard and topic:
|
112 |
+
st.session_state.quiz_data = generate_quiz(standard, topic, quiz_type, difficulty, num_questions)
|
|
|
113 |
if st.session_state.quiz_data:
|
114 |
st.session_state.user_answers = {}
|
115 |
+
st.success(f"β
{quiz_type} Quiz Generated on '{topic}' with {num_questions} Questions!")
|
116 |
st.balloons()
|
117 |
else:
|
118 |
st.error("β οΈ Please enter both the standard and topic.")
|
|
|
125 |
for i, q in enumerate(questions):
|
126 |
st.write(f"**Q{i+1}: {q['question']}**")
|
127 |
|
128 |
+
if quiz_type == "MCQ":
|
129 |
user_answer = st.radio(f"π§ Select your answer for Question {i+1}", options=q["options"], key=f"question_{i+1}")
|
130 |
+
elif quiz_type == "True/False":
|
131 |
+
user_answer = st.radio(f"π§ Select True or False for Question {i+1}", options=["True", "False"], key=f"question_{i+1}")
|
132 |
else:
|
133 |
+
user_answer = st.text_input(f"π§ Fill in the blank for Question {i+1}", key=f"question_{i+1}")
|
134 |
|
135 |
st.session_state.user_answers[f"question_{i+1}"] = user_answer
|
136 |
|