Spaces:
Sleeping
Sleeping
| """Typed Pydantic models for the CodeOrganismVM Hostile Environment. | |
| Matches the complete spec (Section 4.1, 4.2, 4.5, 6): | |
| - CodeOrganismActionType: 8 actions with spec-defined vitality costs | |
| - Observation: vitality_score, file_tree, test_results, watchdog_flags, etc. | |
| - Action: polymorphic payloads per action_type | |
| - RewardBreakdown: R1βR5 + watchdog penalties | |
| - StepResult / EnvState | |
| """ | |
| from __future__ import annotations | |
| from enum import Enum | |
| from typing import Optional, Dict, List, Any | |
| from pydantic import BaseModel, ConfigDict, Field | |
| # ββ Enums ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class CodeOrganismActionType(str, Enum): | |
| """Actions available to the agent (spec Β§4.2).""" | |
| PATCH_FILE = "patch_file" # β2 vitality | |
| RUN_TESTS = "run_tests" # β3 vitality | |
| SPAWN_SUBAGENT = "spawn_subagent" # β5 vitality | |
| QUARANTINE = "quarantine" # β1 vitality | |
| ROLLBACK = "rollback" # β4 vitality | |
| REQUEST_EXPERT = "request_expert" # β6 vitality (Snorkel AI) | |
| EMIT_SIGNAL = "emit_signal" # 0 vitality | |
| DO_NOTHING = "do_nothing" # 0 vitality (metabolism only) | |
| # ββ Observation Components βββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class FileEntry(BaseModel): | |
| """Spec Β§4.1: FileNode β {path, modified_at, checksum, is_quarantined}.""" | |
| path: str | |
| content: str = "" | |
| modified_at: int = 0 # step when last modified | |
| checksum: str = "" # SHA-256 of content | |
| is_quarantined: bool = False | |
| size: int = 0 | |
| class TestResult(BaseModel): | |
| """Spec Β§4.1: TestRecord β {name, status, delta, message}.""" | |
| name: str | |
| status: str = "PASS" # "PASS", "FAIL", "ERROR" | |
| delta: int = 0 # +1 recovered, β1 degraded, 0 unchanged | |
| message: str = "" | |
| duration_ms: float = 0.0 | |
| TestResult.__test__ = False | |
| class Checkpoint(BaseModel): | |
| """A snapshot available for rollback.""" | |
| checkpoint_id: str | |
| step_created: int = 0 | |
| vitality_at_save: float = 100.0 | |
| summary: str = "" | |
| class SubagentResult(BaseModel): | |
| """Structured result from a spawned subagent (spec Β§9.6).""" | |
| task: str = "" | |
| success: bool = False | |
| actions_taken: int = 0 | |
| tests_fixed: int = 0 | |
| vitality_delta: float = 0.0 | |
| detail: str = "" | |
| class ExpertResponse(BaseModel): | |
| """Snorkel AI simulated expert response (spec Β§4.2, Β§6).""" | |
| quality_score: float = 0.0 # 0β1, blind evaluation | |
| patch_valid: bool = False | |
| feedback: str = "" | |
| issues_found: List[str] = Field(default_factory=list) | |
| # ββ Observation ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class Observation(BaseModel): | |
| """What the agent sees each step (spec Β§4.1). | |
| The agent CANNOT see injected faults directly β it must infer | |
| from test_results, stack_trace, and file checksums. | |
| """ | |
| timestep: int | |
| step_count: int = 0 # alias for timestep (spec compat) | |
| max_steps: int = 50 | |
| vitality_score: float = 100.0 # 0β100 | |
| # Environment state | |
| stack_trace: Optional[str] = None | |
| stdout: str = "" | |
| stderr: str = "" | |
| file_tree: List[FileEntry] = Field(default_factory=list) | |
| env_vars: Dict[str, str] = Field(default_factory=dict) | |
| test_results: List[TestResult] = Field(default_factory=list) | |
| # History & resources | |
| active_checkpoints: List[str] = Field(default_factory=list) | |
| checkpoints: List[Checkpoint] = Field(default_factory=list) | |
| energy_budget: float = 1.0 # vitality / 100 | |
| # Subagent & signals | |
| subagent_results: List[SubagentResult] = Field(default_factory=list) | |
| recent_signals: List[Dict[str, Any]] = Field(default_factory=list) | |
| # Security / policy | |
| watchdog_flags: List[str] = Field(default_factory=list) | |
| # World Model (Dependency Graph) | |
| dependency_graph: Dict[str, List[str]] = Field(default_factory=dict) | |
| # Alerts (non-fault system hints) | |
| alerts: List[str] = Field(default_factory=list) | |
| slo_metrics: Dict[str, float] = Field(default_factory=dict) | |
| incident_summary: str = "" | |
| # ββ Action βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class Action(BaseModel): | |
| """What the agent submits each step (spec Β§4.2).""" | |
| model_config = ConfigDict(extra="ignore") | |
| action_type: CodeOrganismActionType | |
| # Payloads (used depending on action_type) | |
| path: Optional[str] = None # patch_file | |
| diff: Optional[str] = None # patch_file | |
| test_suite: Optional[str] = None # run_tests (default 'all') | |
| task: Optional[str] = None # spawn_subagent | |
| context: Optional[Dict[str, Any]] = None # spawn_subagent | |
| module: Optional[str] = None # quarantine | |
| checkpoint_id: Optional[str] = None # rollback | |
| query: Optional[str] = None # request_expert | |
| signal_type: Optional[str] = None # emit_signal | |
| signal_data: Optional[Dict[str, Any]] = None # emit_signal | |
| justification: str = "" # free-text reasoning | |
| # ββ Reward βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class RewardBreakdown(BaseModel): | |
| """R1βR5 + watchdog (spec Β§6).""" | |
| vitality_delta: float = 0.0 # R1 (w=0.35): Ξvitality this step | |
| test_recovery: float = 0.0 # R2 (w=0.30): +1 FAILβPASS, β0.5 PASSβFAIL | |
| efficiency_bonus: float = 0.0 # R3 (w=0.15): 1/sqrt(actions_taken) | |
| coordination_bonus: float = 0.0 # R4 (w=0.10): subagent quality | |
| novelty_bonus: float = 0.0 # R5 (w=0.10): held-out seed bonus | |
| watchdog_penalty: float = 0.0 # hard penalty, subtracted from total | |
| total: float = 0.0 | |
| class StepResult(BaseModel): | |
| """Returned by step() (spec Β§4.5).""" | |
| observation: Optional[Observation] = None | |
| reward: float = 0.0 | |
| reward_breakdown: RewardBreakdown = Field(default_factory=RewardBreakdown) | |
| done: bool = False | |
| info: Dict[str, Any] = Field(default_factory=dict) | |
| # ββ State ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class EnvState(BaseModel): | |
| """Returned by GET /state.""" | |
| task_id: str = "" | |
| vitality: float = 100.0 | |
| current_step: int = 0 | |
| max_steps: int = 50 | |
| done: bool = True | |
| cumulative_reward: float = 0.0 | |
| faults_injected: int = 0 | |
| tests_passing: int = 0 | |
| tests_total: int = 0 | |
| active_quarantines: List[str] = Field(default_factory=list) | |
| reward_history: List[float] = Field(default_factory=list) | |
| episode_id: int = 0 | |
| watchdog_violations: int = 0 | |