FOIA_Doc_Search / app.py
GodsDevProject's picture
Upload 98 files
bb0b469 verified
raw
history blame
1.67 kB
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()