| | 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: |
| | 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) |
| |
|
| |
|