cloudenv / client.py
Vishvam10
initial space commit
b404de3
Raw History Blame Contribute Delete
4.38 kB
from __future__ import annotations
import traceback
from typing import Any, Dict
from openenv.core.client_types import StepResult
from openenv.core.env_client import EnvClient
from cloudenv.models import CloudEnvAction, CloudEnvObservation, CloudEnvState
class ClientEnvironment(
EnvClient[CloudEnvAction, CloudEnvObservation, CloudEnvState]
):
# ---------------------------
# INIT ACTION
# ---------------------------
def initialize_environment(
self, *, task_id: str, episode_id: str
) -> StepResult[CloudEnvObservation]:
try:
action = CloudEnvAction(
task_id=task_id,
episode_id=episode_id,
service="internal", # safer than enum
operation="InitializeEnvironment",
payload={},
)
return self.step(action)
except Exception:
print("[CLIENT ERROR] initialize_environment failed", flush=True)
traceback.print_exc()
return StepResult(
observation=CloudEnvObservation(
episode_id=episode_id,
task_id=task_id,
step_count=0,
operation_result={"error": "init failed"},
reward=0.0,
done=True,
metadata={},
current_pipeline_state={},
),
reward=0.0,
done=True,
)
# ---------------------------
# SERIALIZATION
# ---------------------------
def _step_payload(self, action: CloudEnvAction) -> Dict[str, Any]:
try:
return action.model_dump(mode="json", exclude_none=True)
except Exception:
print(
"[CLIENT ERROR] step payload serialization failed", flush=True
)
traceback.print_exc()
return {}
# ---------------------------
# PARSE RESULT
# ---------------------------
def _parse_result(
self, payload: Dict[str, Any]
) -> StepResult[CloudEnvObservation]:
try:
payload = payload or {}
reward = payload.get("reward", 0.0)
observation = CloudEnvObservation(
episode_id=payload.get("episode_id", ""),
task_id=payload.get("task_id", ""),
step_count=payload.get("step_count", 0),
operation_result=payload.get("operation_result", {}),
reward=float(reward) if reward is not None else 0.0,
done=bool(payload.get("done", False)),
metadata=payload.get("metadata", {}),
current_pipeline_state=payload.get(
"current_pipeline_state", {}
),
)
return StepResult(
observation=observation,
reward=observation.reward,
done=observation.done,
)
except Exception:
print("[CLIENT ERROR] parse_result failed", flush=True)
traceback.print_exc()
return StepResult(
observation=CloudEnvObservation(
episode_id="",
task_id="",
step_count=0,
operation_result={"error": "parse failure"},
reward=0.0,
done=True,
metadata={},
current_pipeline_state={},
),
reward=0.0,
done=True,
)
# ---------------------------
# PARSE STATE
# ---------------------------
def _parse_state(self, payload: Dict[str, Any]) -> CloudEnvState:
try:
payload = payload or {}
return CloudEnvState(
task_id=payload.get("task_id"),
episode_id=payload.get("episode_id"),
step_count=payload.get("step_count", 0),
reward_history=payload.get("reward_history", []),
)
except Exception:
print("[CLIENT ERROR] parse_state failed", flush=True)
traceback.print_exc()
return CloudEnvState(
task_id=None,
episode_id=None,
step_count=0,
reward_history=[],
)