Spaces:
Running
Running
File size: 2,084 Bytes
e2f762e ce9fb65 e2f762e ce9fb65 b20f230 e2f762e ce9fb65 e2f762e ce9fb65 e2f762e ce9fb65 e2f762e ce9fb65 | 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 | # 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 returns decision environment."""
try:
from openenv.core.env_server.http_server import create_app
except Exception as e: # pragma: no cover
raise ImportError(
"openenv is required for the web interface. Install dependencies with '\n uv sync\n'"
) from e
import os
from ecom.models import EcomAction, EcomObservation
from ecom.server.ecom_environment import EcomEnvironment
def _env_factory() -> EcomEnvironment:
mode = os.getenv("ECOM_MODE", "medium").strip().lower()
if mode not in {"easy", "medium", "hard"}:
mode = "medium"
def _maybe_float(name: str) -> float | None:
raw = os.getenv(name)
if raw is None or raw.strip() == "":
return None
return float(raw)
return EcomEnvironment(
mode=mode,
fraud_probability=_maybe_float("ECOM_FRAUD_PROBABILITY"),
ambiguity_rate=_maybe_float("ECOM_AMBIGUITY_RATE"),
conflict_rate=_maybe_float("ECOM_CONFLICT_RATE"),
)
# Create the app with web interface and README integration
app = create_app(
_env_factory,
EcomAction,
EcomObservation,
env_name="ecom",
max_concurrent_envs=4,
)
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 ecom.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 ecom.server.app:app --workers 4
"""
import uvicorn
uvicorn.run(app, host=host, port=port)
if __name__ == "__main__":
main()
|