File size: 1,691 Bytes
b89c8aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
40
41
42
43
44
45
46
47
48
"""OpenEnv client wrapper for TriageSieve-OpenEnv.



Implements TriageSieveEnv(EnvClient) per CLAUDE.md §5.3.

Provides the thin client that connects to the TriageSieve environment server.

"""

from __future__ import annotations

from typing import Any, Dict

from openenv.core.env_client import EnvClient, StepResult

from .models import (
    TriageSieveAction,
    TriageSieveObservation,
    TriageSieveState,
)

__all__ = ["TriageSieveEnv"]


class TriageSieveEnv(
    EnvClient[TriageSieveAction, TriageSieveObservation, TriageSieveState]
):
    """Async client for the TriageSieve-OpenEnv environment server."""

    def _step_payload(self, action: TriageSieveAction) -> Dict[str, Any]:
        """Convert a TriageSieveAction to the JSON payload for the server.



        Uses exclude_unset (not exclude_none) to preserve explicitly-set None

        values while omitting fields the caller didn't provide.

        """
        return action.model_dump(exclude_unset=True, mode="json")

    def _parse_result(self, payload: Dict[str, Any]) -> StepResult[TriageSieveObservation]:
        """Parse a server response into a StepResult with TriageSieveObservation."""
        obs_data = payload["observation"]
        observation = TriageSieveObservation(**obs_data)
        return StepResult(
            observation=observation,
            reward=payload.get("reward", observation.reward),
            done=payload.get("done", observation.done),
        )

    def _parse_state(self, payload: Dict[str, Any]) -> TriageSieveState:
        """Parse a server state response into a TriageSieveState."""
        return TriageSieveState(**payload)