Spaces:
Running
Running
Commit ·
c3de2b1
1
Parent(s): 826a3c8
Add Gradio API endpoint via hidden component — works on HF Spaces
Browse filesCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
app.py
CHANGED
|
@@ -456,6 +456,17 @@ def build_app() -> gr.Blocks:
|
|
| 456 |
],
|
| 457 |
)
|
| 458 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 459 |
return demo
|
| 460 |
|
| 461 |
|
|
@@ -519,33 +530,8 @@ def ask_question(question: str) -> dict:
|
|
| 519 |
|
| 520 |
|
| 521 |
WORKSPACE_DIR = load_workspace()
|
| 522 |
-
demo = build_app()
|
| 523 |
-
|
| 524 |
-
# Add API routes to Gradio's underlying FastAPI app
|
| 525 |
-
import fastapi as _fastapi
|
| 526 |
-
from fastapi.middleware.cors import CORSMiddleware
|
| 527 |
-
|
| 528 |
-
demo.app.add_middleware(
|
| 529 |
-
CORSMiddleware,
|
| 530 |
-
allow_origins=["*"],
|
| 531 |
-
allow_methods=["*"],
|
| 532 |
-
allow_headers=["*"],
|
| 533 |
-
)
|
| 534 |
-
|
| 535 |
-
|
| 536 |
-
@demo.app.post("/api/ask")
|
| 537 |
-
async def api_ask(request: _fastapi.Request):
|
| 538 |
-
body = await request.json()
|
| 539 |
-
question = body.get("question", "")
|
| 540 |
-
if not question:
|
| 541 |
-
return {"error": "No question provided"}
|
| 542 |
-
return ask_question(question)
|
| 543 |
-
|
| 544 |
-
|
| 545 |
-
@demo.app.get("/api/remaining")
|
| 546 |
-
async def api_remaining():
|
| 547 |
-
return {"remaining": _remaining(), "limit": DAILY_LIMIT}
|
| 548 |
|
| 549 |
|
| 550 |
if __name__ == "__main__":
|
|
|
|
| 551 |
demo.launch(ssr_mode=False)
|
|
|
|
| 456 |
],
|
| 457 |
)
|
| 458 |
|
| 459 |
+
# Hidden API endpoint for custom chat UI
|
| 460 |
+
api_input = gr.Textbox(visible=False)
|
| 461 |
+
api_output = gr.Textbox(visible=False)
|
| 462 |
+
|
| 463 |
+
def api_ask(question):
|
| 464 |
+
result = ask_question(question)
|
| 465 |
+
return json.dumps(result)
|
| 466 |
+
|
| 467 |
+
api_btn = gr.Button(visible=False)
|
| 468 |
+
api_btn.click(api_ask, inputs=api_input, outputs=api_output, api_name="ask")
|
| 469 |
+
|
| 470 |
return demo
|
| 471 |
|
| 472 |
|
|
|
|
| 530 |
|
| 531 |
|
| 532 |
WORKSPACE_DIR = load_workspace()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 533 |
|
| 534 |
|
| 535 |
if __name__ == "__main__":
|
| 536 |
+
demo = build_app()
|
| 537 |
demo.launch(ssr_mode=False)
|