AMD21/codefixerenv
0
1from pydantic import BaseModel, Field2from typing import Literal, List, Optional3 4 5class Observation(BaseModel):6 input: str = Field(7 ...,8 description="The buggy Python code snippet the agent must fix"9 )10 context: str = Field(11 ...,12 description="Plain-English description of what the correct code should do"13 )14 history: List[dict] = Field(15 default_factory=list,16 description="Ordered list of previous {step, action_type, action_content, reward, feedback} dicts"17 )18 step_number: int = Field(19 default=0,20 description="How many steps have elapsed since reset (0 = initial)"21 )22 max_steps: int = Field(23 default=5,24 description="Maximum steps allowed before the episode auto-terminates"25 )26 27class Action(BaseModel):28 type: Literal["fix", "explain", "give_up"] = Field(29 ...,30 description="Action type: 'fix' submits code, 'explain' requests a hint, 'give_up' ends episode"31 )32 content: str = Field(33 ...,34 description="Corrected code (fix), clarification question (explain), or empty string (give_up)"35 )36 37class Reward(BaseModel):38 value: float = Field(39 ...,40 description="Net scalar reward for this step"41 )42 grader_score: Optional[float] = Field(43 default=None,44 description="Raw grader output 0.0–1.0 (only set on 'fix' actions)"45 )46 improvement: Optional[float] = Field(47 default=None,48 description="Score delta vs. previous best (only set on 'fix' actions)"49 )50 efficiency_bonus: float = Field(51 default=0.0,52 description="+0.2 if solved in ≤ 2 steps, else 0.0"53 )54 penalty: float = Field(55 default=0.0,56 description="Negative component from redundancy, explain cost, or give_up"57 )58 reason: str = Field(59 ...,60 description="Human-readable explanation of how this reward was computed"61 )62 63 64class StepResult(BaseModel):65 observation: Observation66 reward: Reward67 done: bool = Field(..., description="True when the episode has ended")68 info: dict = Field(69 default_factory=dict,70 description="Auxiliary diagnostics: task_id, difficulty, grader detail, outcome"71 )