Spaces:
Running
Running
| """ | |
| OpenEnv adapter for Optigami. | |
| Thin wrapper around env.environment.OrigamiEnvironment that adapts it to the | |
| OpenEnv protocol (Action/Observation types). | |
| """ | |
| from env.environment import OrigamiEnvironment as _Env | |
| from .models import OrigamiAction, OrigamiObservation | |
| class OpenEnvOrigamiEnvironment: | |
| """ | |
| OpenEnv-compatible wrapper for env.environment.OrigamiEnvironment. | |
| Converts between env's dict-based API and OpenEnv's Action/Observation types. | |
| """ | |
| def __init__(self, mode: str = "step", max_steps: int = 8, targets_dir=None): | |
| self._env = _Env(mode=mode, max_steps=max_steps, targets_dir=targets_dir) | |
| def reset(self, target_name=None, **kwargs): | |
| obs_dict = self._env.reset(target_name=target_name) | |
| return self._obs_dict_to_model(obs_dict, reward=None, done=False) | |
| def step(self, action: OrigamiAction, **kwargs): | |
| action_dict = { | |
| "from": action.from_point, | |
| "to": action.to_point, | |
| "assignment": action.assignment, | |
| } | |
| obs_dict, reward, done, info = self._env.step(action_dict) | |
| reward_val = reward.get("total", 0.0) if isinstance(reward, dict) else reward | |
| return self._obs_dict_to_model(obs_dict, reward=reward_val, done=done) | |
| def _obs_dict_to_model(self, obs_dict: dict, reward=None, done=False) -> OrigamiObservation: | |
| return OrigamiObservation( | |
| prompt=obs_dict.get("prompt", ""), | |
| target_name=obs_dict.get("target_name", ""), | |
| step=obs_dict.get("step", 0), | |
| paper_fold_json=obs_dict.get("paper_fold_json", {}), | |
| reward=reward, | |
| done=done, | |
| ) | |
| def state(self): | |
| return self._env.state() | |
| def close(self): | |
| self._env.close() | |
| __all__ = ["OpenEnvOrigamiEnvironment"] | |