"""OpenEnv client for the SilentFailureDetector environment.""" from openenv.core.env_client import EnvClient from openenv.core.client_types import StepResult from src.models import SilentFailureAction, SilentFailureObservation, SilentFailureState class SilentFailureEnv( EnvClient[SilentFailureAction, SilentFailureObservation, SilentFailureState] ): """Client for interacting with a deployed SilentFailureDetector environment.""" def _step_payload(self, action: SilentFailureAction) -> dict: return {"action": action.action} def _parse_result(self, payload: dict) -> StepResult: obs_data = payload.get("observation", {}) return StepResult( observation=SilentFailureObservation( done=payload.get("done", False), reward=payload.get("reward"), id=obs_data.get("id", ""), text=obs_data.get("text", ""), domain=obs_data.get("domain", ""), step_idx=obs_data.get("step_idx", 0), confidence_marker_count=obs_data.get("confidence_marker_count", 0), hedging_marker_count=obs_data.get("hedging_marker_count", 0), number_density=obs_data.get("number_density", 0.0), ), reward=payload.get("reward"), done=payload.get("done", False), ) def _parse_state(self, payload: dict) -> SilentFailureState: return SilentFailureState( episode_id=payload.get("episode_id"), step_count=payload.get("step_count", 0), index=payload.get("index", 0), batch_size=payload.get("batch_size", 0), predictions_made=payload.get("predictions_made", 0), episode_reward=payload.get("episode_reward", 0.0), task_name=payload.get("task_name", "easy"), )