"""Typed client for the SimLab HR OpenEnv environment.""" from __future__ import annotations from openenv.core.client_types import StepResult from openenv.core.env_client import EnvClient from openenv.core.env_server.types import State from simlab_hr.models import HRAction, HRObservation class HREnv(EnvClient[HRAction, HRObservation, State]): """WebSocket client for the SimLab HR environment.""" def _step_payload(self, action: HRAction) -> dict: return { "tool_server": action.tool_server, "tool_name": action.tool_name, "parameters": action.parameters, } def _parse_result(self, payload: dict) -> StepResult[HRObservation]: obs_data = payload.get("observation", {}) obs = HRObservation( result=obs_data.get("result", ""), is_error=obs_data.get("is_error", False), tools_available=obs_data.get("tools_available", {}), task_instruction=obs_data.get("task_instruction", ""), done=payload.get("done", False), reward=payload.get("reward"), ) return StepResult( observation=obs, reward=payload.get("reward"), done=payload.get("done", False), ) def _parse_state(self, payload: dict) -> State: return State( episode_id=payload.get("episode_id"), step_count=payload.get("step_count", 0), )