heatherlead's picture
Disable SSR mode to allow direct FastAPI POST requests
f7b13f0
Raw History Blame Contribute Delete
1.69 kB
import gradio as gr
import spaces
from api.app import app as fastapi_app
import api.app as api_module
from inference.predictor import CommentModerator
# Ensure model is initialized for both API and UI
if api_module.moderator is None:
api_module.moderator = CommentModerator()
moderator = api_module.moderator
# ZeroGPU decorator tells Hugging Face this space uses GPU
@spaces.GPU
def test_moderation(comment: str):
if not comment or not comment.strip():
return "Please enter a comment.", {}
detail = moderator.predict(comment)
status = "🚨 FLAGGED (Harmful)" if detail["flagged"] else "✅ SAFE"
scores = detail["categories"]
return (
f"Status: {status} (Top: {detail['top_category']}, Confidence: {detail['confidence']:.2f})",
scores,
)
# Interactive UI demo
with gr.Blocks(title="Comment Moderation API") as demo:
gr.Markdown("# 🛡️ Comment Moderation System (FastAPI + ONNX)")
gr.Markdown(
"Direct REST API endpoints: `POST /moderate`, `POST /moderate/detail`, and `GET /health`."
)
with gr.Row():
input_text = gr.Textbox(lines=2, placeholder="Type a comment to test...", label="Input Comment")
btn = gr.Button("Moderate Comment", variant="primary")
with gr.Row():
status_output = gr.Textbox(label="Verdict")
scores_output = gr.Label(label="Category Probabilities")
btn.click(fn=test_moderation, inputs=input_text, outputs=[status_output, scores_output])
# Mount all FastAPI routes (/moderate, /moderate/detail, /health) onto Gradio's server
demo.app.include_router(fastapi_app.router)
if __name__ == "__main__":
demo.launch(ssr_mode=False)