talentry-ai / scripts /serve.py
williyam's picture
deploy: sync from talentry-ai @ 162ccd5
2d01d7b verified
Raw
History Blame Contribute Delete
1.19 kB
"""Production entry-point used by the HuggingFace Space.
Mounts the Vite-built SPA on / and the FastAPI JSON API on /api.
The SPA directory is searched in two locations so the same script works
both for local development (``ui/talentry-space/dist``) and the Docker
image (``./ui_dist`` next to the script).
"""
from __future__ import annotations
import os
from pathlib import Path
import uvicorn
from fastapi.staticfiles import StaticFiles
from talentry.api.server import app
_HERE = Path(__file__).resolve().parent
_CANDIDATES = (
_HERE / "ui_dist",
_HERE.parent / "ui_dist",
_HERE.parent / "ui" / "talentry-space" / "dist",
)
SPA = next((p for p in _CANDIDATES if p.exists() and (p / "index.html").exists()), None)
if SPA is not None:
# html=True falls back to index.html for SPA client routes.
app.mount("/", StaticFiles(directory=str(SPA), html=True), name="ui")
print(f"[serve] mounted SPA from {SPA}")
else:
print("[serve] no SPA build found; API-only mode")
if __name__ == "__main__":
host = os.getenv("TALENTRY_HOST", "0.0.0.0")
port = int(os.getenv("TALENTRY_PORT", "7860"))
uvicorn.run(app, host=host, port=port, log_level="info")