| from __future__ import annotations |
|
|
| from typing import Any |
|
|
| from openenv.core import EnvClient |
| from openenv.core.client_types import StepResult |
|
|
| from models import BDOAction, BDOObservation, BDOState |
|
|
|
|
| class BDOEnvClient(EnvClient[BDOAction, BDOObservation, BDOState]): |
| """Typed OpenEnv client for the BDO.ai environment.""" |
|
|
| def _step_payload(self, action: BDOAction) -> dict[str, Any]: |
| return action.model_dump(mode="json", exclude_none=True) |
|
|
| def _parse_result(self, payload: dict[str, Any]) -> StepResult[BDOObservation]: |
| obs_data = dict(payload.get("observation", {})) |
| obs_data["reward"] = payload.get("reward") |
| obs_data["done"] = payload.get("done", False) |
| observation = BDOObservation.model_validate(obs_data) |
| if not observation.metadata and observation.info: |
| observation.metadata = dict(observation.info) |
| return StepResult( |
| observation=observation, |
| reward=payload.get("reward"), |
| done=payload.get("done", False), |
| ) |
|
|
| def _parse_state(self, payload: dict[str, Any]) -> BDOState: |
| return BDOState.model_validate(payload) |
|
|