|
|
|
|
|
|
|
|
|
|
|
|
| """
|
| FastAPI application for the Sql Sandbox Environment.
|
|
|
| This module creates an HTTP server that exposes the SqlSandboxEnvironment
|
| 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
|
|
|
| try:
|
| from ..models import SqlSandboxAction, SqlSandboxObservation
|
| from .environment import SqlSandboxEnvironment
|
| except (ImportError, ModuleNotFoundError):
|
| from models import SqlSandboxAction, SqlSandboxObservation
|
| from server.environment import SqlSandboxEnvironment
|
|
|
|
|
|
|
| app = create_app(
|
| SqlSandboxEnvironment,
|
| SqlSandboxAction,
|
| SqlSandboxObservation,
|
| env_name="sql_sandbox",
|
| max_concurrent_envs=10,
|
| )
|
|
|
| import os
|
| @app.post("/set_task/{task_id}")
|
| def set_task(task_id: str):
|
| os.environ["TASK_ID"] = task_id
|
| return {"status": "ok", "task_id": task_id}
|
|
|
|
|
| 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
|
| python -m sql_sandbox.server.app
|
| """
|
| import uvicorn
|
|
|
| uvicorn.run(app, host="0.0.0.0", port=7860)
|
|
|
|
|
| if __name__ == "__main__":
|
| main()
|
|
|