Openenv / app /models.py
vishaldhakad's picture
intial push
eda351c
Raw
History Blame Contribute Delete
1.46 kB
"""
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
@field_validator("code")
@classmethod
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
@field_validator("filename")
@classmethod
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