diff --git a/api/claims.py b/api/claims.py index 2416ca0..749e5d0 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() @@ -17,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() @@ -83,3 +84,15 @@ 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..a728dcb --- /dev/null +++ b/scripts/seed_demo.py @@ -0,0 +1,19 @@ +import json +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"])