lov2 / app /schemas /learning_path.py
work-sejal
Add knowledge graph and adaptive learning path features to HF Space
c045254
Raw
History Blame Contribute Delete
3.34 kB
"""Pydantic schemas for adaptive learning path endpoints."""
from pydantic import BaseModel, ConfigDict, Field
class LearningPathStep(BaseModel):
"""A single step in a learning path."""
step_number: int = Field(..., ge=1, description="Step order in the path")
lo_id: str = Field(..., description="Learning outcome ID")
title: str = Field(..., description="Learning outcome title")
grade: int = Field(..., ge=6, le=8, description="Grade level")
subject: str = Field(..., description="Subject name")
chapter: str = Field(..., description="Chapter name")
difficulty: str = Field(..., description="Difficulty level")
bloom_level: str = Field(..., description="Bloom taxonomy level")
# Student-specific context
current_mastery: float = Field(..., ge=0.0, le=1.0, description="Student's current mastery score")
mastery_label: str = Field(..., description="Student's mastery label")
is_prerequisite: bool = Field(..., description="Whether this is a prerequisite for the target")
estimated_study_time: int = Field(..., ge=0, description="Estimated study time in minutes")
# Reasoning
reason: str = Field(..., description="Why this step is recommended")
class LearningPathRequest(BaseModel):
"""Request for adaptive learning path generation."""
model_config = ConfigDict(extra="forbid")
student_id: str = Field(..., description="Student ID")
target_lo_id: str = Field(..., description="Target learning outcome ID")
max_steps: int = Field(default=10, ge=1, le=20, description="Maximum number of steps in path")
include_mastered: bool = Field(default=False, description="Include already mastered LOs for review")
difficulty_preference: str = Field(default="adaptive", description="Difficulty preference: easy, medium, hard, adaptive")
class LearningPathResponse(BaseModel):
"""Response for adaptive learning path generation."""
model_config = ConfigDict(extra="forbid")
student_id: str = Field(..., description="Student ID")
target_lo_id: str = Field(..., description="Target learning outcome ID")
model_version: str = Field(default="adaptive_path_v2_baseline_001", description="Service version")
source: str = Field(default="knowledge_graph_traversal", description="Path generation method")
timestamp: str = Field(..., description="Response timestamp")
# Path details
learning_path: list[LearningPathStep] = Field(..., description="Ordered learning steps")
total_steps: int = Field(..., ge=0, description="Total number of steps")
estimated_total_time: int = Field(..., ge=0, description="Total estimated study time in minutes")
# Student context
current_overall_mastery: float = Field(..., ge=0.0, le=1.0, description="Student's overall mastery")
weak_prerequisites: list[str] = Field(default_factory=list, description="Weak prerequisite LO IDs")
# Path metadata
path_difficulty: str = Field(..., description="Overall path difficulty")
completion_probability: float = Field(..., ge=0.0, le=1.0, description="Estimated completion probability")
# Recommendations
next_action: str = Field(..., description="Immediate next action for student")
teacher_notes: str = Field(..., description="Notes for teacher intervention")