|
|
|
|
|
|
|
|
|
|
|
|
| """
|
| FastAPI application for the My Env Environment.
|
|
|
| This module creates an HTTP server that exposes the MyEnvironment
|
| over HTTP and WebSocket endpoints, compatible with EnvClient.
|
|
|
| Endpoints:
|
| - POST /reset: Reset the environment
|
| - POST /step: Execute an action
|
| - GET /state: Get current environment state
|
| - GET /schema: Get action/observation schemas
|
| - WS /ws: WebSocket endpoint for persistent sessions
|
|
|
| Usage:
|
| # Development (with auto-reload):
|
| uvicorn server.app:app --reload --host 0.0.0.0 --port 8000
|
|
|
| # Production:
|
| uvicorn server.app:app --host 0.0.0.0 --port 8000 --workers 4
|
|
|
| # Or run directly:
|
| python -m server.app
|
| """
|
|
|
| try:
|
| from openenv.core.env_server.http_server import create_app
|
| except Exception as e:
|
| raise ImportError(
|
| "openenv is required for the web interface. Install dependencies with '\n uv sync\n'"
|
| ) from e
|
|
|
|
|
| from models import MyAction, MyObservation
|
| from .my_env_environment import MyEnvironment
|
|
|
|
|
|
|
| app = create_app(
|
| MyEnvironment,
|
| MyAction,
|
| MyObservation,
|
| env_name="my_env",
|
| max_concurrent_envs=1,
|
| )
|
|
|
|
|
| def main(host: str = "0.0.0.0", port: int = 8000):
|
| """
|
| Entry point for direct execution via uv run or python -m.
|
|
|
| This function enables running the server without Docker:
|
| uv run --project . server
|
| uv run --project . server --port 8001
|
| python -m my_env.server.app
|
|
|
| Args:
|
| host: Host address to bind to (default: "0.0.0.0")
|
| port: Port number to listen on (default: 8000)
|
|
|
| For production deployments, consider using uvicorn directly with
|
| multiple workers:
|
| uvicorn my_env.server.app:app --workers 4
|
| """
|
| import uvicorn
|
|
|
| uvicorn.run(app, host=host, port=port)
|
|
|
|
|
| if __name__ == "__main__":
|
| import argparse
|
|
|
| parser = argparse.ArgumentParser()
|
| parser.add_argument("--port", type=int, default=8000)
|
| args = parser.parse_args()
|
| main(port=args.port)
|
|
|