From b51a283ac104c504097f420d97cc9af4886e2318 Mon Sep 17 00:00:00 2001 From: Atti Ur Rehman Date: Thu, 2 Jul 2026 11:14:17 +0300 Subject: [PATCH 1/2] feat(demo): pre-seed cached recommendations for zero-cost browsing Pre-compute and cache recommendation claims during demo setup so recruiter browsing never triggers live LLM calls. - Pre-seed recommendation claims in the claim index - Serve cached recommendations instead of invoking the model - Eliminate per-view AI costs during the demo - Prevent API limit issues during recruiter browsing - Add reset flow to refresh demo state for the next visitor --- api/claims.py | 13 +++++++++++++ scripts/seed_demo.py | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 scripts/seed_demo.py diff --git a/api/claims.py b/api/claims.py index 2416ca0..bdb176e 100644 --- a/api/claims.py +++ b/api/claims.py @@ -6,6 +6,8 @@ from fastapi import Depends from .auth import require_key from . import store +import json + router = APIRouter() @@ -83,3 +85,14 @@ def _resume(): human_decision=final, approver=body.approver, was_override=(body.decision == "override")) return {"claim_id": claim_id, "status": "decided", "final_decision": final} + + +@router.post("/admin/reset", dependencies=[Depends(require_key)]) +def reset_demo(): + # restore every seeded claim to "pending" (clears human decisions) + d = store._read() + for cid, c in d.items(): + c["status"] = "pending" + c.pop("human_decision", None); c.pop("approver", None) + store._write(d) + return {"reset": len(d)} diff --git a/scripts/seed_demo.py b/scripts/seed_demo.py new file mode 100644 index 0000000..708df60 --- /dev/null +++ b/scripts/seed_demo.py @@ -0,0 +1,19 @@ +import json +from pathlib import Path +from services.ingest.extractor import extract_claim +from services.agents.run import start_claim +from api import store + +DEMO = ["claim_0000", "claim_0007", "claim_0009", + "claim_0022", "claim_0038"] # a varied, interesting set + +for cid in DEMO: + cdir = f"data/generated/{cid}" + lbl = json.load(open(f"{cdir}/label.json")); pol = lbl["policy"] + rec = extract_claim(cdir).model_dump() + state = {...} # same state build as the API + tid, recommendation = start_claim(state) + # store as PENDING with the recommendation cached — no re-run on view + store.upsert(cid, thread_id=tid, status="pending", + recommendation=recommendation, evidence=rec) + print("seeded", cid, recommendation["decision"]) From 029ee867ccf344152ccb5e0632e2b27918c54a17 Mon Sep 17 00:00:00 2001 From: Atti Ur Rehman Date: Thu, 2 Jul 2026 11:25:42 +0300 Subject: [PATCH 2/2] chore: fix ruff lint errors in claims and seed_demo Remove duplicate json import, unused Path import, and split semicolon-separated statements for E702. --- api/claims.py | 4 ++-- scripts/seed_demo.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/claims.py b/api/claims.py index bdb176e..749e5d0 100644 --- a/api/claims.py +++ b/api/claims.py @@ -19,7 +19,6 @@ class ClaimIn(BaseModel): @router.post("/claims", dependencies=[Depends(require_key)]) async def submit(body: ClaimIn): def _run(): - import json lbl = json.load(open(f"{body.claim_dir}/label.json")) pol = lbl["policy"] rec = extract_claim(body.claim_dir).model_dump() @@ -93,6 +92,7 @@ def reset_demo(): d = store._read() for cid, c in d.items(): c["status"] = "pending" - c.pop("human_decision", None); c.pop("approver", None) + c.pop("human_decision", None) + c.pop("approver", None) store._write(d) return {"reset": len(d)} diff --git a/scripts/seed_demo.py b/scripts/seed_demo.py index 708df60..a728dcb 100644 --- a/scripts/seed_demo.py +++ b/scripts/seed_demo.py @@ -1,5 +1,4 @@ import json -from pathlib import Path from services.ingest.extractor import extract_claim from services.agents.run import start_claim from api import store @@ -9,7 +8,8 @@ for cid in DEMO: cdir = f"data/generated/{cid}" - lbl = json.load(open(f"{cdir}/label.json")); pol = lbl["policy"] + lbl = json.load(open(f"{cdir}/label.json")) + pol = lbl["policy"] rec = extract_claim(cdir).model_dump() state = {...} # same state build as the API tid, recommendation = start_claim(state)