| """ |
| models.py — Step 1: Define Types |
| |
| Action, Observation dataclasses for the Cross-Session Continuity environment. |
| These extend openenv.core types so the framework can serialize/deserialize them. |
| """ |
|
|
| from openenv.core.env_server.types import Action, Observation |
| from pydantic import Field |
|
|
|
|
| class ContinuityAction(Action): |
| """ |
| Action for the Cross-Session Continuity environment. |
| |
| The agent specifies which tool to call and its arguments. |
| """ |
| tool: str = Field(..., description="Tool name: read_file | write_file | run_tests | write_handoff | parse_handoff | submit") |
| path: str = Field(default="", description="File path (for read_file / write_file)") |
| content: str = Field(default="", description="File content (for write_file) or handoff note (for write_handoff)") |
|
|
|
|
| class ContinuityObservation(Observation): |
| """ |
| Observation returned after each action. |
| |
| Provides the agent with rich feedback about the current episode state, |
| session, test results, and any errors or warnings. |
| """ |
| output: str = Field( |
| default="", |
| description="Primary text output of the tool call", |
| ) |
| session: int = Field( |
| default=1, |
| description="Current session number (1 or 2)", |
| ) |
| passed: int = Field( |
| default=0, |
| description="Number of tests passed (run_tests only)", |
| ) |
| total: int = Field( |
| default=0, |
| description="Total number of tests (run_tests only)", |
| ) |
| auxiliary_reward: float = Field( |
| default=0.0, |
| description="Shaped reward for this step (training signal only)", |
| ) |
| error: str = Field( |
| default="", |
| description="Error message if action was invalid or rejected", |
| ) |
| warning: str = Field( |
| default="", |
| description="Warning message (e.g. approaching step limit)", |
| ) |
| message: str = Field( |
| default="", |
| description="Informational message (e.g. session transition)", |
| ) |
| retries_left: int = Field( |
| default=3, |
| description="Remaining retry budget for invalid actions", |
| ) |
| done: bool = Field( |
| default=False, |
| description="Whether the episode has ended", |
| ) |
| reward: float = Field( |
| default=0.0, |
| description="Final reward (only set when done=True)", |
| ) |
|
|