Cornelius
Deploy MentorFlow with GPU support
a52f96d
"""Shared data structures and interfaces for Teacher Agent system."""
from dataclasses import dataclass
from typing import List, Dict
from abc import ABC, abstractmethod
@dataclass
class Task:
"""A reading comprehension task."""
passage: str
question: str
choices: List[str] # 4 choices
answer: int # Index 0-3
topic: str # e.g., 'history', 'science'
difficulty: str # 'easy', 'medium', 'hard'
task_id: str
@dataclass
class StudentState:
"""Student's current learning state."""
topic_accuracies: Dict[str, float] # topic -> accuracy
topic_attempts: Dict[str, int]
time_since_practice: Dict[str, float]
total_timesteps: int
current_time: float
@dataclass
class TeacherAction:
"""Teacher's decision."""
topic: str
difficulty: str
is_review: bool
class TaskGeneratorInterface(ABC):
"""Interface for task generators."""
@abstractmethod
def generate_task(self, topic: str, difficulty: str) -> Task:
"""Generate a task for the given topic and difficulty."""
pass
@abstractmethod
def get_available_topics(self) -> List[str]:
"""Return list of available topics."""
pass
@abstractmethod
def get_available_difficulties(self) -> List[str]:
"""Return list of available difficulties."""
pass
class StudentAgentInterface(ABC):
"""Interface for student agents."""
@abstractmethod
def answer(self, task: Task) -> int:
"""Answer a task. Returns index of chosen answer (0-3)."""
pass
@abstractmethod
def learn(self, task: Task) -> bool:
"""Learn from a task. Returns whether answer was correct."""
pass
@abstractmethod
def evaluate(self, eval_tasks: List[Task]) -> float:
"""Evaluate student on a list of tasks. Returns accuracy (0-1)."""
pass
@abstractmethod
def get_state(self) -> StudentState:
"""Get current student state."""
pass
@abstractmethod
def advance_time(self, delta: float = 1.0):
"""Advance time for forgetting simulation."""
pass
class TeacherAgentInterface(ABC):
"""Interface for teacher agents."""
@abstractmethod
def select_action(self, student_state: StudentState) -> TeacherAction:
"""Select next action based on student state."""
pass
@abstractmethod
def update(self, action: TeacherAction, reward: float):
"""Update teacher policy based on reward."""
pass
@abstractmethod
def get_statistics(self) -> Dict:
"""Get teacher statistics for visualization."""
pass