import os from pathlib import Path import uvicorn from starlette.applications import Starlette from starlette.responses import FileResponse, JSONResponse from starlette.routing import Mount, Route from starlette.staticfiles import StaticFiles ROOT = Path(__file__).resolve().parent INDEX = ROOT / "index.html" async def health(_request): return JSONResponse({"status": "ok", "mode": "static-demo"}) async def serve_app(request): path = request.path_params.get("path", "") requested = (ROOT / path).resolve() if requested.is_file() and ROOT in requested.parents: return FileResponse(requested) return FileResponse(INDEX) app = Starlette( debug=False, routes=[ Route("/health", health), Mount("/assets", StaticFiles(directory=ROOT / "assets"), name="assets"), Route("/{path:path}", serve_app), ], ) if __name__ == "__main__": port = int(os.environ.get("PORT", "7860")) uvicorn.run(app, host="0.0.0.0", port=port)