Spaces:
Sleeping
Sleeping
File size: 1,502 Bytes
569c142 | 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 | """Client class: EnvClient subclass wired for DiskPanic."""
from typing import Dict
from openenv.core import EnvClient, State
from openenv.core.client_types import StepResult
from disk_panic.models import DiskPanicAction, DiskPanicObservation
class DiskPanicEnv(EnvClient[DiskPanicAction, DiskPanicObservation, State]):
"""HTTP / WebSocket client for the DiskPanic environment server."""
def _step_payload(self, action: DiskPanicAction) -> Dict:
return {"command": action.command}
def _parse_result(self, payload: Dict) -> StepResult[DiskPanicObservation]:
obs_data = payload.get("observation", {}) or {}
observation = DiskPanicObservation(
stdout=obs_data.get("stdout", ""),
df_output=obs_data.get("df_output", ""),
service_status=obs_data.get("service_status", "unknown"),
task_id=obs_data.get("task_id", "easy"),
step=obs_data.get("step", 0),
last_error=obs_data.get("last_error"),
done=payload.get("done", False),
reward=payload.get("reward"),
metadata=obs_data.get("metadata", {}) or {},
)
return StepResult(
observation=observation,
reward=payload.get("reward"),
done=payload.get("done", False),
)
def _parse_state(self, payload: Dict) -> State:
return State(
episode_id=payload.get("episode_id"),
step_count=payload.get("step_count", 0),
)
|