""" Core models and shared type aliases for SYNAPSE-X. """ from typing import Any, Literal from pydantic import BaseModel, Field, PrivateAttr ActionType = Literal["execute", "delay", "reallocate"] ActionPayload = dict[str, Any] class Task(BaseModel): id: int name: str dependencies: list[int] = Field(default_factory=list, description="IDs of tasks that must complete first") release_time: int = Field(0, ge=0, description="Step when the task becomes actionable") released: bool = True priority: float = Field(..., ge=0.0, le=1.0, description="Task priority 0-1") risk: float = Field(..., ge=0.0, le=1.0, description="Execution risk 0-1") uncertainty: float = Field(..., ge=0.0, le=1.0, description="PRISM uncertainty 0-1") deadline: float = Field(..., description="Steps remaining until deadline") completed: bool = False failed: bool = False future_risk: float = Field(0.0, ge=0.0, description="ECHO predicted future risk") deadline_pressure: float = Field(0.0, ge=0.0, le=1.0, description="ECHO deadline pressure") resources_required: float = Field(0.1, ge=0.0, le=1.0, description="Resource cost to execute") delay_count: int = 0 _history_risk: float = PrivateAttr(default=0.0) @property def is_terminal(self) -> bool: return self.completed or self.failed @property def is_active(self) -> bool: return self.released and not self.is_terminal class Observation(BaseModel): tasks: list[Task] time: int resources: float = Field(..., ge=0.0, le=1.0, description="Available resources 0-1") episode_done: bool = False class Action(BaseModel): action_type: ActionType task_id: int class StepResult(BaseModel): observation: Observation reward: float done: bool info: dict[str, Any] class GradeResult(BaseModel): score: float = Field(..., ge=0.0, le=1.0) completion_rate: float efficiency: float reward_score: float details: dict[str, Any]