synapse-x / env /models.py
Nithin1026's picture
Initial submission Synapse-X
cb330aa
Raw
History Blame Contribute Delete
2.01 kB
"""
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]