File size: 1,933 Bytes
1b50e57 | 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 49 50 51 52 | from typing import Dict, Any
from openenv.core import EnvClient
from openenv.core.client_types import StepResult
from openenv.core.env_server.types import State
from models import ModerationDecision, ModerationObservation, ModerationState
class MetaContentModerationClient(EnvClient[ModerationDecision, ModerationObservation, State]):
"""
Client for the Meta Content Moderation Environment.
"""
def _step_payload(self, action: ModerationDecision) -> Dict[str, Any]:
"""Convert ModerationDecision to JSON payload."""
return action.model_dump()
def _parse_result(self, payload: Dict[str, Any]) -> StepResult[ModerationObservation]:
"""
Parse server response into StepResult containing ModerationObservation.
"""
obs_data = payload.get("observation", {})
observation = ModerationObservation(
step=obs_data.get("step", 0),
content_item=obs_data.get("content_item", {}),
policy_excerpt=obs_data.get("policy_excerpt", ""),
thread_history=obs_data.get("thread_history", []),
conflicting_policies=obs_data.get("conflicting_policies", []),
task_name=obs_data.get("task_name", ""),
instructions=obs_data.get("instructions", ""),
done=payload.get("done", False),
reward=payload.get("reward", 0.0),
metadata=obs_data.get("metadata", {}),
)
return StepResult(
observation=observation,
reward=payload.get("reward", 0.0),
done=payload.get("done", False),
info=payload.get("metadata", {})
)
def _parse_state(self, payload: Dict[str, Any]) -> State:
"""
Parse server response into State object.
"""
return State(
episode_id=payload.get("episode_id", ""),
step_count=payload.get("step_count", 0),
)
|