Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import asyncio | |
| from ingest.cia_reading_room import CIAAdapter | |
| from ingest.fbi_vault_live import FBIAdapter | |
| from ingest.dod_reading_room_live import DoDAdapter | |
| from core.async_search import fanout_search | |
| from core.cache import dedupe | |
| from core.cluster import cluster_results | |
| from core.citations import citation_block | |
| from core.redaction import redaction_confidence | |
| from core.journalist import journalist_export | |
| from core.explain import explain | |
| cia, fbi, dod = CIAAdapter(), FBIAdapter(), DoDAdapter() | |
| async def run(q): | |
| res = await fanout_search([cia,fbi,dod], q) | |
| return dedupe(res) | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# FOIA Federated Search — Supreme") | |
| q = gr.Textbox(label="Query") | |
| results_state = gr.State([]) | |
| with gr.Tabs(): | |
| with gr.Tab("Clustered Results"): | |
| clusters = gr.JSON() | |
| with gr.Tab("Citations"): | |
| cites = gr.Markdown() | |
| with gr.Tab("Explainability"): | |
| explain_box = gr.JSON() | |
| preview = gr.JSON(label="Redaction Confidence") | |
| def _run(q): | |
| res = asyncio.run(run(q)) | |
| cl = cluster_results(res) | |
| cites_md = "\n".join(citation_block(r) for r in res[:5]) | |
| explain_data = explain(res) | |
| red = {r.get("url"): redaction_confidence(r) for r in res} | |
| return res, cl, cites_md, explain_data, red | |
| btn = gr.Button("Search") | |
| btn.click(_run, inputs=q, outputs=[results_state, clusters, cites, explain_box, preview]) | |
| exp = gr.Button("Journalist Export") | |
| out = gr.File() | |
| exp.click(lambda r: journalist_export(r, "/tmp/journalist_export.zip"), inputs=results_state, outputs=out) | |
| demo.launch() |