File size: 1,492 Bytes
4f129c9
181758b
4f129c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"""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"],
        )