| from openenv_core import HTTPEnvClient, StepResult | |
| from .models import JobObservation, JSSPAction, JSSPObservation, MachineObservation | |
| class JSSPEnvClient(HTTPEnvClient[JSSPAction, JSSPObservation]): | |
| def _step_payload(self, action: JSSPAction) -> dict: | |
| return {"job_ids": action.job_ids} | |
| def _parse_result(self, payload: dict) -> StepResult[JSSPObservation]: | |
| obs_data = payload["observation"] | |
| return StepResult[JSSPObservation]( | |
| observation=JSSPObservation( | |
| machines=[MachineObservation(**machine) for machine in obs_data.pop("machines")], | |
| jobs=[JobObservation(**job) for job in obs_data.pop("jobs")], | |
| **obs_data, | |
| ), | |
| reward=payload.get("reward"), | |
| done=payload.get("done", False), | |
| ) | |
| def _parse_state(self, payload: dict) -> dict: | |
| return payload | |