PRANAV05092003/autonomous-code-refactoring-env
0
1from __future__ import annotations2 3from typing import Any, Dict, List, Optional, Sequence4 5from pydantic import BaseModel, Field6 7 8class ObservationModel(BaseModel):9 code_length: float10 complexity_score: float11 runtime_s: float12 error_flag: bool13 14 @classmethod15 def from_vector(cls, values: Sequence[float]) -> "ObservationModel":16 vector = list(values)17 if len(vector) != 4:18 raise ValueError(f"observation vector must have length 4, got {len(vector)}")19 return cls(20 code_length=float(vector[0]),21 complexity_score=float(vector[1]),22 runtime_s=float(vector[2]),23 error_flag=bool(vector[3]),24 )25 26 def to_vector(self) -> List[float]:27 return [28 float(self.code_length),29 float(self.complexity_score),30 float(self.runtime_s),31 float(int(self.error_flag)),32 ]33 34 35class ActionModel(BaseModel):36 action: int = Field(ge=0, le=4)37 action_name: Optional[str] = None38 39 40class RewardModel(BaseModel):41 raw: float42 normalized: float = Field(ge=0.0, le=1.0)43 components: Dict[str, float]44 45 46class HealthResponse(BaseModel):47 status: str48 env: str49 version: str50 51 52class CompatibilityHealthResponse(BaseModel):53 status: str54 service: str55 56 57class ResetRequest(BaseModel):58 task_id: Optional[str] = None59 seed: Optional[int] = None60 code: Optional[str] = None61 62 63class StepRequest(BaseModel):64 action: int = Field(ge=0, le=4)65 66 67class GradeRequest(BaseModel):68 code: str69 70 71class TaskInfo(BaseModel):72 id: str73 name: str74 description: str75 difficulty: str76 initial_code: str77 78 79class TasksResponse(BaseModel):80 tasks: List[TaskInfo]81 82 83class GradeResponse(BaseModel):84 task_id: str85 score: float86 passed: bool87 88 89class StateResponse(BaseModel):90 current_code: str91 episode_steps: int92 max_steps: int93 complexity: float94 last_runtime: float95 last_error: bool96 sample_id: Optional[str]97 language: Optional[str]98 task_id: Optional[str]99 observation: ObservationModel100 observation_vector: List[float]101 action_meanings: Dict[int, str]102 103 104class ResetResponse(BaseModel):105 observation: ObservationModel106 observation_vector: List[float]107 info: Dict[str, Any]108 task_id: Optional[str]109 state: StateResponse110 111 112class StepResponse(BaseModel):113 action: ActionModel114 observation: ObservationModel115 observation_vector: List[float]116 reward: RewardModel117 done: bool118 terminated: bool119 truncated: bool120 info: Dict[str, Any]121 state: StateResponse122 123 124class OptimizeRequest(BaseModel):125 code: str126 task_id: Optional[str] = None127 max_steps: int = Field(default=5, ge=1, le=5)128 use_rl: bool = True129 use_llm: bool = False130 fallback_to_llm: bool = True131 rl_model_path: Optional[str] = None132 api_base_url: Optional[str] = None133 model_name: Optional[str] = None134 api_token: Optional[str] = None135 136 137class OptimizationStep(BaseModel):138 step: int139 action: int140 action_name: str141 reason: str142 source: str143 reward: float144 normalized_reward: float145 changed: bool146 complexity: float147 148 149class OptimizeResponse(BaseModel):150 original_code: str151 optimized_code: str152 diff: str153 steps: List[OptimizationStep]154 cumulative_reward: float155 task_id: Optional[str]156 task_score: Optional[float]157 