Kind07's picture
Initial clean commit for web deployment
ed65693
Raw
History Blame Contribute Delete
1.99 kB
import gradio as gr
from app.main import app as fastapi_app
from app.retriever import RETRIEVAL_MODES, store
# Ensure indexes are loaded
store.load()
def search_fn(question: str, mode: str, top_k: int):
"""Gradio handler for full hybrid retrieval."""
if not question.strip():
return {"error": "Please enter a valid search query."}
result = store.answer(question, top_k=int(top_k), mode=mode)
return result
# Build Gradio UI
with gr.Blocks(title="Calibrated Hybrid Retrieval API") as demo:
gr.Markdown(
"""
# 🔬 Calibrated Entropy-Weighted Hybrid Retrieval API
A research-oriented hybrid retrieval system combining BM25 sparse search, FAISS dense vector search,
corpus-level CDF score calibration, entropy-weighted adaptive fusion, and cross-encoder reranking.
"""
)
with gr.Row():
with gr.Column(scale=2):
query_input = gr.Textbox(
lines=2,
placeholder="Enter your question (e.g., '0-dimensional biomaterials show inductive properties.')...",
label="Search Question / Claim",
)
mode_dropdown = gr.Dropdown(
choices=list(RETRIEVAL_MODES.keys()),
value="hybrid_calibrated_rerank",
label="Retrieval Mode",
)
top_k_slider = gr.Slider(
minimum=1, maximum=20, value=3, step=1, label="Top K Results"
)
search_btn = gr.Button("⚡ Run Retrieval Pipeline", variant="primary")
with gr.Column(scale=3):
output_json = gr.JSON(label="Retrieval Results & Telemetry Output")
search_btn.click(
fn=search_fn,
inputs=[query_input, mode_dropdown, top_k_slider],
outputs=output_json,
)
# Mount FastAPI app into Gradio so REST API endpoints (/docs, /query, /health) are also live!
app = gr.mount_gradio_app(fastapi_app, demo, path="/ui")
if __name__ == "__main__":
demo.launch()