Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| from openai import OpenAI | |
| from modules.quiz.models import AnswerValidation | |
| from modules.quiz.quiz_helper import Question | |
| client = OpenAI() | |
| def validate_answer( | |
| question: Question, user_answer: str, preferred_language: str = "English" | |
| ) -> AnswerValidation: | |
| """ | |
| Validate a user's answer against a Question object. | |
| Uses LLM reasoning to account for synonyms, variations, and explanation. | |
| """ | |
| print("validating answer ...") | |
| prompt = f""" | |
| You are an answer validator for a scripture-based quiz. | |
| Question: | |
| {question.question} | |
| Choices (if any): | |
| {question.choices} | |
| Expected Answer: | |
| {question.expected_answer} | |
| User's Answer: | |
| {user_answer} | |
| Rules: | |
| - Check strictly against the expected answer and choices. | |
| - Accept semantically equivalent answers (e.g., synonyms, transliterations). | |
| - Respond in {question.preferred_language}. | |
| - Address the user directly, e.g., "You nailed it!" or "Not quite, here's why…". | |
| - Do NOT repeat the user's answer verbatim. | |
| - Give reasoning concisely, and optionally include the expected answer if user was wrong. | |
| - Only validate correctness; do not invent new answers. | |
| """ | |
| response = client.chat.completions.parse( | |
| model="gpt-4o-mini", | |
| messages=[{"role": "user", "content": prompt}], | |
| response_format=AnswerValidation, | |
| ) | |
| return response.choices[0].message.parsed | |