Spaces:
Sleeping
Sleeping
| """ | |
| app/models.py — All typed request/response models for OpenEnv API contract. | |
| Pydantic V2 with strict validators. Never deviate from this contract. | |
| """ | |
| from pydantic import BaseModel, field_validator | |
| from typing import Optional, Dict, Any, List | |
| class StepAction(BaseModel): | |
| code: str | |
| filename: str | |
| task_id: str | |
| session_id: str | |
| def code_not_empty(cls, v: str) -> str: | |
| if not v.strip(): | |
| raise ValueError("code cannot be empty") | |
| if len(v) > 50_000: | |
| raise ValueError("code exceeds 50KB limit — split into smaller modules") | |
| return v | |
| def filename_valid(cls, v: str) -> str: | |
| if not v.strip(): | |
| raise ValueError("filename cannot be empty") | |
| return v | |
| class StepObservation(BaseModel): | |
| scores: Dict[str, float] | |
| total_reward: float | |
| feedback: Dict[str, str] | |
| codegraph: Dict[str, Any] | |
| done: bool | |
| step_count: int | |
| class ResetObservation(BaseModel): | |
| session_id: str | |
| task_id: str | |
| problem_statement: str | |
| difficulty: str | |
| cwe_targets: List[str] | |
| codegraph: Dict[str, Any] | |
| starter_code: str | |
| naive_baseline: Dict[str, Any] | |
| class StateResponse(BaseModel): | |
| task_id: str | |
| step: int | |
| done: bool | |
| codegraph: Dict[str, Any] | |
| difficulty: Optional[str] = None | |
| cwe_targets: Optional[List[str]] = None | |