python_env / client.py
uvpatel7271's picture
Upload folder using huggingface_hub
c8e832f verified
"""Client for the Python code review environment."""
from __future__ import annotations
from typing import Dict
from compat import install_openenv_fastmcp_compat
install_openenv_fastmcp_compat()
from openenv.core import EnvClient
from openenv.core.client_types import StepResult
from models import (
HistoryEntry,
PythonCodeReviewAction,
PythonCodeReviewObservation,
PythonCodeReviewState,
RewardDetails,
)
class PythonEnv(
EnvClient[PythonCodeReviewAction, PythonCodeReviewObservation, PythonCodeReviewState]
):
"""OpenEnv HTTP client for the Python code review benchmark."""
def _step_payload(self, action: PythonCodeReviewAction) -> Dict:
return action.model_dump(exclude_none=True)
def _parse_result(self, payload: Dict) -> StepResult[PythonCodeReviewObservation]:
obs = payload.get("observation", {})
observation = PythonCodeReviewObservation(
task_id=obs["task_id"],
title=obs["title"],
difficulty=obs["difficulty"],
task_kind=obs["task_kind"],
task_description=obs["task_description"],
current_code=obs.get("current_code", ""),
errors=obs.get("errors", ""),
test_results=obs.get("test_results", ""),
history=[HistoryEntry(**entry) for entry in obs.get("history", [])],
attempts_remaining=obs.get("attempts_remaining", 0),
last_action_status=obs.get("last_action_status", ""),
score=obs.get("score", 0.0),
reward_details=RewardDetails(**obs.get("reward_details", {})),
done=payload.get("done", obs.get("done", False)),
reward=payload.get("reward", obs.get("reward")),
metadata=obs.get("metadata", {}),
)
return StepResult(
observation=observation,
reward=payload.get("reward", obs.get("reward")),
done=payload.get("done", obs.get("done", False)),
)
def _parse_state(self, payload: Dict) -> PythonCodeReviewState:
return PythonCodeReviewState(
episode_id=payload.get("episode_id"),
step_count=payload.get("step_count", 0),
task_id=payload.get("task_id"),
difficulty=payload.get("difficulty"),
task_kind=payload.get("task_kind"),
attempts_remaining=payload.get("attempts_remaining", 0),
current_code=payload.get("current_code", ""),
errors=payload.get("errors", ""),
test_results=payload.get("test_results", ""),
history=[HistoryEntry(**entry) for entry in payload.get("history", [])],
score=payload.get("score", 0.0),
done=payload.get("done", False),
)
CodeReviewEnv = PythonEnv
MyEnv = PythonEnv