Spaces:
Sleeping
Sleeping
Update quizz_api.py
Browse files- 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
|
|
|
|
| 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
|
| 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 |
-
#
|
| 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 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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:"):
|