Spaces:
Running
Running
File size: 1,829 Bytes
72bc633 012ffc6 58f6308 012ffc6 72bc633 012ffc6 72bc633 272bd90 6e01f2b 272bd90 6e01f2b 272bd90 72bc633 | 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 | """
PatchHawk OpenEnv server entry point.
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
# Ensure the project root is on sys.path when run directly
_PROJECT_ROOT = str(Path(__file__).resolve().parent.parent)
if _PROJECT_ROOT not in sys.path:
sys.path.insert(0, _PROJECT_ROOT)
from openenv.core import create_app
from patchhawk.agent.environment import PatchHawkEnv
from patchhawk.env_models import PatchHawkAction, PatchHawkObservation
def _env_factory() -> PatchHawkEnv:
"""Factory callable for create_app — returns a fresh PatchHawkEnv instance."""
scenarios_path = os.getenv("PATCHHAWK_SCENARIOS", "patchhawk/data/scenarios.json")
return PatchHawkEnv(scenarios_path=scenarios_path, use_docker=False)
def create_openenv_app():
"""Create the OpenEnv FastAPI application."""
return create_app(
_env_factory,
PatchHawkAction,
PatchHawkObservation,
env_name="PatchHawk",
)
app = create_openenv_app()
@app.get("/", include_in_schema=False)
def root():
"""Redirect root access to documentation."""
from fastapi.responses import RedirectResponse
return RedirectResponse(url="/docs")
@app.get("/health")
def health():
"""Health check endpoint for the API."""
return {"status": "ok", "app": "PatchHawk"}
def main(port: int | None = None) -> None:
"""Start the PatchHawk OpenEnv server."""
import uvicorn
if port is None:
args = sys.argv[1:]
if "--port" in args:
idx = args.index("--port")
if idx + 1 < len(args):
port = int(args[idx + 1])
if port is None:
port = int(os.getenv("PORT", "7860"))
host = os.getenv("HOST", "0.0.0.0")
uvicorn.run(app, host=host, port=port)
if __name__ == "__main__":
main()
|