Your First Environment#
Note
This page is a condensed preview. For the end-to-end walk-through — including Docker packaging, openenv.yaml, and Hugging Face Space deployment — see the full environment builder guide.
Overview#
Building an OpenEnv environment involves:
Define your models -
Action,Observation, andStatetypesImplement the environment - Core logic in a Python class
Create the server - FastAPI wrapper for HTTP access
Package for deployment - Docker container and manifest
Quick Example#
Here’s a minimal environment that echoes back messages. Reward and done are fields on the Observation — step returns an observation, not a tuple.
from openenv.core.env_server.interfaces import Environment
from openenv.core.env_server.types import Action, Observation, State
class EchoAction(Action):
message: str
class EchoObservation(Observation):
echo: str
class EchoState(State):
last_message: str = ""
class EchoEnvironment(Environment[EchoAction, EchoObservation, EchoState]):
def reset(self, seed=None, episode_id=None, **kwargs) -> EchoObservation:
self._state = EchoState()
return EchoObservation(echo="Ready!")
def step(self, action: EchoAction, timeout_s=None, **kwargs) -> EchoObservation:
self._state.last_message = action.message
return EchoObservation(echo=action.message, reward=0.0, done=False)
@property
def state(self) -> EchoState:
return self._state
Next Steps#
Environment Anatomy - Deep dive into structure
Deployment - Deploy to Docker and HF Spaces
Full Guide - Complete documentation