FredyHoundayi commited on
Commit
16849c3
·
verified ·
1 Parent(s): 93afa65

Update quizz_api.py

Browse files
Files changed (1) hide show
  1. quizz_api.py +19 -10
quizz_api.py CHANGED
@@ -36,13 +36,15 @@ class QuizQuestion(BaseModel):
36
  question: str
37
  options: List[str]
38
  correct_answer: str
39
- explanation: str # ✅ ADDED
 
40
 
41
  class QuizRequest(BaseModel):
42
  topic: str
43
  num_questions: int = 5
44
  difficulty: Optional[str] = "medium"
45
 
 
46
  class QuizResponse(BaseModel):
47
  questions: List[QuizQuestion]
48
  topic: str
@@ -71,8 +73,8 @@ async def root():
71
  async def generate_quiz(request: QuizRequest):
72
  try:
73
  query = (
74
- f"Create a {request.num_questions}-question {request.difficulty} "
75
- f"difficulty quiz about {request.topic}"
76
  )
77
 
78
  response = ""
@@ -93,7 +95,7 @@ async def generate_quiz(request: QuizRequest):
93
 
94
 
95
  # =========================
96
- # PARSER UPDATED
97
  # =========================
98
 
99
  def parse_quiz_response(response: str) -> List[dict]:
@@ -120,13 +122,20 @@ def parse_quiz_response(response: str) -> List[dict]:
120
  option_text = line.split(")", 1)[1].strip()
121
  current_question["options"].append(option_text)
122
 
123
- # Detect Answer
124
  elif line.lower().startswith("answer:"):
125
- correct_letter = line.split(":")[1].strip()
126
- index = ord(correct_letter.upper()) - ord("A")
127
-
128
- if 0 <= index < len(current_question["options"]):
129
- current_question["correct_answer"] = current_question["options"][index]
 
 
 
 
 
 
 
130
 
131
  # Detect Explanation
132
  elif line.lower().startswith("explanation:"):
 
36
  question: str
37
  options: List[str]
38
  correct_answer: str
39
+ explanation: str
40
+
41
 
42
  class QuizRequest(BaseModel):
43
  topic: str
44
  num_questions: int = 5
45
  difficulty: Optional[str] = "medium"
46
 
47
+
48
  class QuizResponse(BaseModel):
49
  questions: List[QuizQuestion]
50
  topic: str
 
73
  async def generate_quiz(request: QuizRequest):
74
  try:
75
  query = (
76
+ f"Create a {request.num_questions}-question "
77
+ f"{request.difficulty} difficulty quiz about {request.topic}"
78
  )
79
 
80
  response = ""
 
95
 
96
 
97
  # =========================
98
+ # ROBUST PARSER
99
  # =========================
100
 
101
  def parse_quiz_response(response: str) -> List[dict]:
 
122
  option_text = line.split(")", 1)[1].strip()
123
  current_question["options"].append(option_text)
124
 
125
+ # Detect Answer (robust extraction)
126
  elif line.lower().startswith("answer:"):
127
+ raw_answer = line.split(":", 1)[1].strip()
128
+
129
+ correct_letter = None
130
+ for char in raw_answer:
131
+ if char.upper() in ["A", "B", "C", "D"]:
132
+ correct_letter = char.upper()
133
+ break
134
+
135
+ if correct_letter:
136
+ index = ord(correct_letter) - ord("A")
137
+ if 0 <= index < len(current_question["options"]):
138
+ current_question["correct_answer"] = current_question["options"][index]
139
 
140
  # Detect Explanation
141
  elif line.lower().startswith("explanation:"):