| """ |
| FastAPI server for the Data Cleaning environment. |
| |
| Environment Variables: |
| DATA_CLEAN_TASKS_PATH: Path to tasks directory (default: /app/env/tasks) |
| DATA_CLEAN_MAX_STEPS: Maximum tool calls per episode (default: 30) |
| |
| Usage: |
| uvicorn server.app:app --host 0.0.0.0 --port 8000 |
| """ |
|
|
| import os |
|
|
| |
| try: |
| from openenv.core.env_server import create_app |
| except ImportError: |
| from openenv.core.env_server.http_server import create_app |
|
|
| |
| |
| |
| |
| from openenv.core.env_server.mcp_types import CallToolAction, CallToolObservation |
|
|
| from server.environment import DataCleanEnvironment |
|
|
| DEFAULT_TASKS_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "tasks") |
| TASKS_PATH = os.environ.get("DATA_CLEAN_TASKS_PATH", DEFAULT_TASKS_PATH) |
| if not os.path.exists(TASKS_PATH): |
| |
| TASKS_PATH = DEFAULT_TASKS_PATH |
| MAX_STEPS = int(os.environ.get("DATA_CLEAN_MAX_STEPS", "30")) |
|
|
|
|
| def _env_factory(): |
| """Create a new DataCleanEnvironment instance for each session.""" |
| return DataCleanEnvironment( |
| tasks_path=TASKS_PATH, |
| max_steps=MAX_STEPS, |
| ) |
|
|
|
|
| |
| |
| |
| |
| |
| app = create_app( |
| _env_factory, |
| CallToolAction, |
| CallToolObservation, |
| env_name="data_clean_env", |
| ) |
|
|
| |
| @app.get("/health") |
| def health(): |
| return { |
| "status": "ok", |
| "env_name": "data_clean_env", |
| "tasks_path": TASKS_PATH, |
| } |
|
|
|
|
| @app.get("/") |
| def root(): |
| return { |
| "name": "data_clean_env", |
| "status": "running", |
| "health": "/health", |
| } |
|
|
|
|
| def main(): |
| """Entry point for running the server.""" |
| import uvicorn |
| uvicorn.run(app, host="0.0.0.0", port=8000) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|