MyPharmaAI / agents /quiz_agent.py
Ajey95
Initial clean commit of MyPharma AI
c1bc991
raw
history blame
4.28 kB
# agents/quiz_agent.py
"""
Quiz Generation Agent - Creates quizzes and flashcards using Generative AI.
"""
import re
class QuizAgent:
def __init__(self, gemini_model=None):
"""
Initializes the agent with the Gemini model.
Args:
gemini_model: An instance of the Gemini model client.
"""
self.model = gemini_model
def _extract_topic(self, query: str) -> str:
"""A simple helper to extract the core topic from the user's query."""
# Remove common phrases used to request a quiz
patterns = [
r"make a quiz on",
r"create a quiz on",
r"give me a quiz on",
r"quiz on",
r"quiz about",
r"test me on"
]
topic = query.lower()
for p in patterns:
topic = re.sub(p, "", topic)
# Clean up any extra whitespace
return topic.strip()
def process_query(self, query: str, file_context: str = ""):
"""
Processes a query to generate a quiz. The agent prioritizes file_context if provided.
Args:
query (str): The user's full query (e.g., "Make a quiz on analgesics").
file_context (str): Optional text content from an uploaded file.
Returns:
dict: A dictionary containing the quiz and agent metadata.
"""
if not self.model:
return {
'message': "❓ **Quiz Master**\n\nThe question bank is locked! The Gemini API key is missing, so I can't generate quizzes. Please configure the API key to enable this feature.",
'agent_type': 'quiz_generation',
'status': 'error_no_api_key'
}
topic = self._extract_topic(query)
task_description = f"Generate a short quiz (3-5 questions) for a B.Pharmacy student on the topic: **{topic.title()}**."
if file_context:
task_description += f"\n\nIf relevant, use the following text from the student's uploaded notes for additional context:\n---\n{file_context}\n---"
else:
return {
'message': "Please tell me what to quiz you on! Either upload a file or ask for a quiz on a specific topic, like 'quiz on antibiotics'.",
'agent_type': 'quiz_generation',
'status': 'error_no_topic'
}
# Construct a specialized prompt for the Gemini model
prompt = f"""
You are "Quiz Master," an AI that creates engaging and effective study quizzes for B.Pharmacy students in India.
**Your Task:**
{task_description}
**Instructions:**
1. **Question Variety:** Create a mix of question types:
* Multiple Choice Questions (MCQs) with 4 options.
* True/False questions.
* Fill-in-the-Blank questions.
2. **Clarity:** Ensure questions are clear, concise, and relevant.
3. **Answer Key:** THIS IS ESSENTIAL. After all the questions, provide a clearly separated "πŸ”‘ Answer Key" section with the correct answers. For MCQs, also provide a brief (one-sentence) explanation for why the answer is correct.
4. **Formatting:** Use markdown for headings, bolding, and lists. Use emojis to make it fun and engaging.
Good luck! 🌟
**Example Output Structure:**
πŸ“ **Quiz Time: [Topic Name]**
**Q1. [MCQ Question]**
A) Option 1
B) Option 2
...
**Q2. [True/False Question]**
**Q3. [Fill-in-the-Blank Question]**
---
πŸ”‘ **Answer Key**
1. **Answer:** B) Correct Option. *Explanation: [Brief reason why B is correct].*
2. **Answer:** True.
3. **Answer:** [Correct word(s)].
Let's test your knowledge! Good luck! 🌟
"""
try:
# Generate content using the AI model
ai_response = self.model.generate_content(prompt)
return {
'message': ai_response.text,
'agent_used': 'quiz_generation',
'status': 'success'
}
except Exception as e:
print(f"Quiz Agent Error: {e}")
return {
'message': f"I'm sorry, my question book seems to be stuck. I ran into an error: {str(e)}",
'agent_type': 'quiz_generation',
'status': 'error_api_call'
}