"""HTTP client for interacting with a deployed SupportDesk environment.""" from __future__ import annotations from models import SupportDeskAction, SupportDeskObservation, SupportDeskState from openenv_compat import EnvClient, StepResult def _validate(model_cls, payload): if hasattr(model_cls, "model_validate"): return model_cls.model_validate(payload) return model_cls(**payload) # pragma: no cover - pydantic v1 fallback class SupportDeskEnv(EnvClient[SupportDeskAction, SupportDeskObservation, SupportDeskState]): """Typed client for a locally running or deployed OpenEnv server.""" def _step_payload(self, action: SupportDeskAction) -> dict: """Convert a typed action into the JSON payload expected by the server.""" if hasattr(action, "model_dump"): return action.model_dump() return action.dict() def _parse_state(self, payload) -> SupportDeskState: return _validate(SupportDeskState, payload) def _parse_reset(self, payload) -> SupportDeskObservation: return _validate(SupportDeskObservation, payload) def _parse_result(self, payload) -> StepResult[SupportDeskObservation]: observation = _validate(SupportDeskObservation, payload["observation"]) # OpenEnv StepResult only accepts observation/reward/done in this runtime. return StepResult( observation=observation, reward=payload["reward"], done=payload["done"], )