SonicMaster / app.py
ambujm22's picture
Update app.py
02a313e verified
raw
history blame
1.99 kB
# ---------- MUST BE FIRST ----------
import os
os.environ.setdefault("GRADIO_USE_CDN", "true")
import spaces
import gradio as gr
from fastapi import FastAPI
from starlette.responses import PlainTextResponse
try:
from starlette.exceptions import ClientDisconnect # Starlette β‰₯0.27
except Exception:
from starlette.requests import ClientDisconnect # fallback
# Log versions to container logs for sanity
try:
print("== Sanity ==")
print("spaces.__version__:", getattr(spaces, "__version__", "unknown"))
import gradio
print("gradio.__version__:", getattr(gradio, "__version__", "unknown"))
import sys
print("python:", sys.version)
print("SPACE_RUNTIME:", os.getenv("SPACE_RUNTIME"))
print("HF_SPACE_ENTRYPOINT default: app.py")
except Exception as _e:
print("version log error:", _e)
# ---------- ZeroGPU probes (PUBLIC NAMES) ----------
@spaces.GPU(duration=10)
def gpu_probe(a: int = 1, b: int = 1) -> int:
# Not called; existence is enough for ZeroGPU startup check
return a + b
@spaces.GPU(duration=10)
def gpu_echo(x: str = "ok") -> str:
return x
# ---------- Tiny Gradio UI ----------
with gr.Blocks(title="ZeroGPU Probe") as demo:
gr.Markdown("### βœ… Minimal app is running.\n"
"If you see this UI, import succeeded and GPU probes are registered.")
t = gr.Textbox(label="Echo input", value="hello")
o = gr.Textbox(label="Echo output")
t.submit(lambda s: f"echo: {s}", t, o)
demo = demo.queue(max_size=8)
# ---------- ASGI app with fast health ----------
app = FastAPI()
@app.get("/health")
def _health():
return {"ok": True}
@app.exception_handler(ClientDisconnect)
async def client_disconnect_handler(request, exc):
return PlainTextResponse("Client disconnected", status_code=499)
# Mount at root (Spaces health-check expects this)
app = gr.mount_gradio_app(app, demo, path="/")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)