Kiy-K's picture
Use Gradio internal Space port
cfcc9cb verified
Raw
History Blame Contribute Delete
1.88 kB
"""Unified ASGI entrypoint for API and Gradio UI."""
from __future__ import annotations
import os
import gradio as gr
import uvicorn
from arena.api import app as fastapi_app
from arena.api import service
from arena.gradio_app import build_app
demo = build_app(service)
def create_app():
"""Create one FastAPI ASGI app with Gradio mounted at the root."""
return gr.mount_gradio_app(fastapi_app, demo, path="/")
app = create_app()
try:
import spaces
except Exception:
class _SpacesShim:
def GPU(self, fn=None, **kwargs):
del kwargs
def decorator(inner):
return inner
return decorator(fn) if fn else decorator
spaces = _SpacesShim()
@spaces.GPU
def zerogpu_ready_marker() -> str:
return "ready"
def server_config() -> dict[str, int | str]:
host = os.getenv("GRADIO_SERVER_NAME", os.getenv("HOST", "0.0.0.0"))
port = int(os.getenv("GRADIO_SERVER_PORT") or os.getenv("PORT") or "7860")
return {"host": host, "port": port}
def gradio_launch_config() -> dict[str, bool | int | str]:
config = server_config()
port = int(os.getenv("GRADIO_SERVER_PORT", "7861")) if os.getenv("SPACE_ID") else int(config["port"])
return {"server_name": str(config["host"]), "server_port": port, "ssr_mode": False}
def should_launch_gradio_space() -> bool:
return bool(os.getenv("SPACE_ID")) and os.getenv("FORCE_SELF_LAUNCH") != "1"
def should_self_launch() -> bool:
if os.getenv("FORCE_SELF_LAUNCH") == "1":
return True
return not should_launch_gradio_space()
def _space_sdk() -> str:
return os.getenv("SPACE_SDK", os.getenv("HF_SPACE_SDK", "")).strip().lower()
if __name__ == "__main__":
if should_launch_gradio_space():
demo.launch(**gradio_launch_config())
elif should_self_launch():
uvicorn.run(app, **server_config())