from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Generic, Optional, TypeVar from pydantic import BaseModel OPENENV_AVAILABLE = False try: from openenv.core.client_types import StepResult as OpenEnvStepResult from openenv.core.env_client import EnvClient as OpenEnvEnvClient from openenv.core.env_server import create_app as openenv_create_app from openenv.core.env_server.interfaces import Environment as OpenEnvEnvironment from openenv.core.env_server.types import Action as OpenEnvAction from openenv.core.env_server.types import Observation as OpenEnvObservation from openenv.core.env_server.types import State as OpenEnvState Action = OpenEnvAction Observation = OpenEnvObservation State = OpenEnvState Environment = OpenEnvEnvironment EnvClient = OpenEnvEnvClient create_app = openenv_create_app OPENENV_AVAILABLE = True except Exception: create_app = None class Action(BaseModel): pass class Observation(BaseModel): pass class State(BaseModel): episode_id: str step_count: int = 0 class Environment: def reset(self): raise NotImplementedError def step(self, action): raise NotImplementedError @property def state(self): raise NotImplementedError TObservation = TypeVar("TObservation") class EnvClient(Generic[TObservation]): def __init__(self, base_url: str | None = None, **_: Any): self.base_url = base_url def close(self) -> None: return None def __enter__(self): return self def __exit__(self, exc_type, exc, tb) -> None: self.close() TObservation = TypeVar("TObservation") @dataclass class StepResult(Generic[TObservation]): observation: TObservation reward: Optional[float] = None done: bool = False info: dict[str, Any] = field(default_factory=dict) __all__ = [ "Action", "Observation", "State", "Environment", "EnvClient", "StepResult", "OPENENV_AVAILABLE", "create_app", ]