aniketqxp's picture
fix: launch API through Gradio server
7ce1abd
Raw
History Blame Contribute Delete
2.22 kB
import os
import gradio as gr
from fastapi.middleware.cors import CORSMiddleware
from gradio.routes import App
from sqlalchemy import func
from app.database import SessionLocal
from app.main import lifespan
from app.models import Call, Job
from app.routers import artifacts, calls, sentiment
from app.storage import is_configured
def runtime_snapshot():
snapshot = {
"service": "call-qa-processing",
"database_configured": bool(os.environ.get("DATABASE_URL")),
"storage_configured": is_configured(),
"acoustic_enabled": os.environ.get("ENABLE_ACOUSTIC", "0") == "1",
}
db = SessionLocal()
try:
snapshot["calls"] = db.query(func.count(Call.call_id)).scalar() or 0
snapshot["jobs"] = {
status: db.query(func.count(Job.job_id)).filter(Job.status == status).scalar() or 0
for status in ("queued", "processing", "succeeded", "failed")
}
except Exception as exc:
snapshot["database_error"] = str(exc)[:240]
finally:
db.close()
return snapshot
def build_space_app(gpu_snapshot):
with gr.Blocks(title="Call QA Processing") as demo:
gr.Markdown("# Call QA Processing")
state = gr.JSON(label="Runtime status")
refresh = gr.Button("Refresh", variant="primary")
refresh.click(runtime_snapshot, outputs=state, api_name="runtime_status")
demo.load(runtime_snapshot, outputs=state)
gpu_state = gr.JSON(label="ZeroGPU status")
gpu_check = gr.Button("Check ZeroGPU")
gpu_check.click(gpu_snapshot, outputs=gpu_state, api_name="gpu_status")
api = App()
origins = os.environ.get("FRONTEND_ORIGIN", "*")
wildcard = origins.strip() == "*"
api.add_middleware(
CORSMiddleware,
allow_origins=["*"] if wildcard else [item.strip() for item in origins.split(",")],
allow_credentials=not wildcard,
allow_methods=["*"],
allow_headers=["*"],
)
api.include_router(calls.router)
api.include_router(sentiment.router)
api.include_router(artifacts.router)
@api.get("/health")
def health_check():
return {"status": "ok", "service": "capstone_api"}
return demo, api