File size: 3,402 Bytes
c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 81e1efb c0db7bb 2a6078a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
FastAPI application for the AML Investigator Environment.
Wraps AmlEnvironment with OpenEnv's create_app utility, exposing the
standard OpenEnv HTTP endpoints required by the evaluator:
POST /reset — Reset episode, returns initial AmlObservation
POST /step — Execute an AmlAction, returns AmlObservation
GET /state — Return current internal State object
GET /schema — Return action/observation JSON schemas
WS /ws — WebSocket endpoint for persistent sessions
CORS is configured to allow all origins so the hackathon evaluator
can reach the Space without origin restrictions.
Usage (local dev):
uvicorn server.app:app --reload --host 0.0.0.0 --port 7860
Usage (production / HF Spaces):
uvicorn server.app:app --host 0.0.0.0 --port 7860
"""
try:
from openenv.core.env_server.http_server import create_app
except Exception as e: # pragma: no cover
raise ImportError(
"openenv is required. Install with:\n pip install -r server/requirements.txt"
) from e
from fastapi.middleware.cors import CORSMiddleware
try:
# Relative imports when loaded as part of the package (e.g. `python -m server.app`)
from ..models import AmlAction, AmlObservation
from .AML_env_environment import AmlEnvironment
except ImportError:
# Absolute imports when PYTHONPATH is set to the repo root (Docker / uvicorn CLI)
from models import AmlAction, AmlObservation
from server.AML_env_environment import AmlEnvironment
# ---------------------------------------------------------------------------
# Build the OpenEnv-compliant FastAPI application
# ---------------------------------------------------------------------------
app = create_app(
AmlEnvironment,
AmlAction,
AmlObservation,
env_name="AML_env",
# One concurrent WebSocket session is enough for HF Spaces evaluation.
# Increase for multi-agent experiments.
max_concurrent_envs=10,
)
# ---------------------------------------------------------------------------
# CORS — allow the OpenEnv evaluator (and any browser) to reach the Space
# ---------------------------------------------------------------------------
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ---------------------------------------------------------------------------
# Direct-execution entry point
# ---------------------------------------------------------------------------
def main(host: str = "0.0.0.0", port: int = 7860) -> None:
"""
Run the server directly.
Examples:
python -m server.app
python -m server.app --port 7860
"""
import uvicorn
uvicorn.run("server.app:app", host=host, port=port, reload=False)
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="AML Investigator OpenEnv server")
parser.add_argument("--host", default="0.0.0.0", help="Bind host")
parser.add_argument("--port", type=int, default=7860, help="Bind port")
args = parser.parse_args()
# Call main() so the OpenEnv validator can detect it via string search
main()
|