lean-migrate / env /models.py
Hrushi's picture
Upload folder using huggingface_hub
8c75600 verified
from __future__ import annotations
from typing import Literal
from openenv.core.env_server.types import Action, Observation
from pydantic import BaseModel, Field, model_validator
class LeanMigrateReward(BaseModel):
score: float
cumulative_score: float
tests_passed: int | None
tests_total: int | None
proof_compiled: bool | None
breakdown: dict[str, float]
feedback: str
lean_error: str | None
class LeanMigrateAction(Action):
type: Literal["inspect", "analyze_deps", "run_tests", "submit"]
function_name: str
candidate_code: str | None = Field(
default=None,
description="Working implementation used by run_tests.",
)
target_code: str | None = Field(
default=None,
description="Final target-language implementation submitted for verification.",
)
lean_proof: str | None = Field(
default=None,
description="Proof text required only for proof tasks such as payment_saga.",
)
@model_validator(mode="after")
def _validate_payload(self) -> "LeanMigrateAction":
if self.type == "run_tests" and not self.candidate_code:
raise ValueError("run_tests actions require candidate_code")
if self.type == "submit" and not (self.target_code or self.lean_proof):
raise ValueError("submit actions require target_code or lean_proof")
return self
class InspectAction(LeanMigrateAction):
type: Literal["inspect"]
class AnalyzeDepsAction(LeanMigrateAction):
type: Literal["analyze_deps"]
class RunTestsAction(LeanMigrateAction):
type: Literal["run_tests"]
candidate_code: str
class SubmitAction(LeanMigrateAction):
type: Literal["submit"]
target_code: str | None = None
lean_proof: str | None = None
class LeanMigrateObservation(Observation):
episode_id: str
task_id: str
episode_step: int
max_steps: int
source_language: str
target_language: str
source_files: list[str]
verified: list[str]
failing: dict[str, str]
remaining: list[str]
progress: float
last_action_type: str | None
last_action_feedback: str | None
last_step_reward: float | None
reward_details: LeanMigrateReward | None = None
__all__ = [
"AnalyzeDepsAction",
"InspectAction",
"LeanMigrateAction",
"LeanMigrateObservation",
"LeanMigrateReward",
"RunTestsAction",
"SubmitAction",
]