trenches / backend /src /trenches_env /openenv_client.py
Codex
sync main snapshot for HF Space
1794757
from __future__ import annotations
from typing import Any, Dict
try:
from openenv.core.env_client import EnvClient
from openenv.core.client_types import StepResult
except ImportError:
class EnvClient: # type: ignore[no-redef]
def __class_getitem__(cls, _item):
return cls
def __init__(self, *_args, **_kwargs) -> None:
raise RuntimeError("openenv-core is not installed")
from trenches_env.openenv_adapter import (
TrenchesOpenEnvAction,
TrenchesOpenEnvObservation,
TrenchesOpenEnvState,
)
class TrenchesEnvClient(EnvClient[TrenchesOpenEnvAction, TrenchesOpenEnvObservation, TrenchesOpenEnvState]):
"""Typed OpenEnv client for the Trenches simulator."""
def _step_payload(self, action: TrenchesOpenEnvAction) -> Dict[str, Any]:
"""Convert a TrenchesOpenEnvAction to the JSON data expected by the env server."""
return action.model_dump(mode="json")
def _parse_result(self, payload: Dict[str, Any]) -> StepResult[TrenchesOpenEnvObservation]:
"""Convert a JSON response from the env server to StepResult."""
return StepResult(
observation=TrenchesOpenEnvObservation.model_validate(payload["observation"]),
reward=float(payload.get("reward", 0.0)),
done=bool(payload.get("done", False)),
)
def _parse_state(self, payload: Dict[str, Any]) -> TrenchesOpenEnvState:
"""Convert a JSON response from the state endpoint to a State object."""
return TrenchesOpenEnvState.model_validate(payload)