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 try: from app.models import AppAction, AppObservation from app.server.app_environment import AppEnvironment except ModuleNotFoundError: from models import AppAction, AppObservation from server.app_environment import AppEnvironment app = create_app( AppEnvironment, AppAction, AppObservation, env_name="app", max_concurrent_envs=1, ) @app.get("/health") def health() -> dict[str, str]: return {"status": "ok"} def _run_server(host: str = "0.0.0.0", port: int = 8000): """Start the FastAPI app with uvicorn.""" import uvicorn uvicorn.run(app, host=host, port=port) def main(): """ 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 app.server.app For production deployments, consider using uvicorn directly with multiple workers: uvicorn app.server.app:app --workers 4 """ import argparse parser = argparse.ArgumentParser() parser.add_argument("--host", default="0.0.0.0") parser.add_argument("--port", type=int, default=8000) args = parser.parse_args() _run_server(host=args.host, port=args.port) if __name__ == "__main__": main()