micro-learn / api /agents.py
ldrissi's picture
finish the idea of micro learning part 5
3aabd8c
# Enhanced QuizAgent in ai/agents.py
class QuizAgent(Agent):
def __init__(self, hf_service):
super().__init__("Quiz", "Generates questions")
self.hf = hf_service
def process(self, content, context=None):
# Generate 3-5 questions based on content
questions = []
# Extract key concepts using summarization
summary = self.hf.summarize_content(content)[0]['summary_text']
# Generate questions using question-answering in reverse
# We'll extract potential answers and create questions for them
sentences = summary.split('. ')
for sentence in sentences[:5]: # Limit to 5 questions
# Use the sentence as context and try to generate a question
potential_answer = sentence.strip()
# We'll need to integrate with a better question generation model here
# For now, create a simple question by masking parts of the sentence
words = potential_answer.split()
if len(words) > 5:
# Find a key noun or entity to ask about
# This is simplified - would need NER or POS tagging in production
question_word = words[len(words)//2]
question = potential_answer.replace(question_word, "___")
questions.append({
"question": f"Complete the following: {question}",
"answer": question_word,
"context": potential_answer
})
return questions
# New PersonalizationAgent in ai/agents.py
class PersonalizationAgent(Agent):
def __init__(self, hf_service):
super().__init__("Personalizer", "Adapts content for users")
self.hf = hf_service
def process(self, content, context=None):
# Context should contain user profile/level
if not context or 'level' not in context:
return content
user_level = context['level']
if user_level == 'beginner':
# Simplify content, add more explanations
simplified = self.hf.summarize_content(
content,
max_length=len(content.split()) // 2 # Half the original length
)[0]['summary_text']
return f"{simplified}\n\nLet's break this down further: {content}"
elif user_level == 'advanced':
# Provide more detailed content
return f"{content}\n\nFor advanced learners: [Additional depth would be added here]"
# Default - intermediate
return content