Rate this Page
โ˜… โ˜… โ˜… โ˜… โ˜…

Environment Anatomy#

Note

Coming Soon This page is under construction.

A deep dive

A deep dive into the structure of OpenEnv environments.

Components

Every OpenEnv environment consists of:

my_env/
โ”œโ”€โ”€ openenv.yaml          # Manifest file
โ”œโ”€โ”€ my_env/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ client.py         # Client classes
โ”‚   โ”œโ”€โ”€ server.py         # Server/Environment
โ”‚   โ””โ”€โ”€ models.py         # Pydantic models
โ”œโ”€โ”€ Dockerfile            # Container definition
โ”œโ”€โ”€ pyproject.toml        # Package metadata
โ””โ”€โ”€ README.md             # Documentation

The Manifest (openenv.yaml)

name: my_env
version: 0.1.0
description: My custom environment

client:
  class_name: MyEnvClient
  module: my_env.client

action:
  class_name: MyAction
  module: my_env.models

observation:
  class_name: MyObservation
  module: my_env.models

default_image: my-env:latest
spec_version: 1

Models (Pydantic)

from pydantic import BaseModel

class MyAction(BaseModel):
    command: str
    args: list[str] = []

class MyObservation(BaseModel):
    output: str
    success: bool

class MyState(BaseModel):
    history: list[str] = []

Environment Class

from openenv.core import Environment

class MyEnvironment(Environment[MyAction, MyObservation, MyState]):
    def reset(self) -> MyObservation:
        ...

    def step(self, action: MyAction) -> tuple[MyObservation, float, bool]:
        ...

    def get_state(self) -> MyState:
        ...

Server (FastAPI)

from fastapi import FastAPI
from openenv.server import create_server

app = create_server(MyEnvironment)

Next Steps