From 719ff649a875b514d7a52a9cda5b36708c2dec3d Mon Sep 17 00:00:00 2001 From: Anto01 Date: Sun, 12 Apr 2026 10:58:00 -0400 Subject: [PATCH] fix: fetch full interaction body per-id (list endpoint omits response) GET /interactions returns response_chars but not the response body to keep the listing lightweight. The batch extractor now lists ids first, then fetches each interaction individually via GET /interactions/{id} to get the full response for LLM extraction. Co-Authored-By: Claude Opus 4.6 (1M context) --- scripts/batch_llm_extract_live.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/scripts/batch_llm_extract_live.py b/scripts/batch_llm_extract_live.py index 1f54c95..5e90a01 100644 --- a/scripts/batch_llm_extract_live.py +++ b/scripts/batch_llm_extract_live.py @@ -209,16 +209,29 @@ def main(): params = [f"limit={args.limit}"] if since: params.append(f"since={urllib.parse.quote(since)}") - raw_interactions = api_get(args.base_url, f"/interactions?{'&'.join(params)}") - interactions = raw_interactions.get("interactions", []) - print(f"fetched {len(interactions)} interactions") + listing = api_get(args.base_url, f"/interactions?{'&'.join(params)}") + interaction_summaries = listing.get("interactions", []) + print(f"listed {len(interaction_summaries)} interactions") processed = 0 total_candidates = 0 total_persisted = 0 errors = 0 - for raw in interactions: + for summary in interaction_summaries: + resp_chars = summary.get("response_chars", 0) or 0 + if resp_chars < 50: + continue + iid = summary["id"] + try: + raw = api_get( + args.base_url, + f"/interactions/{urllib.parse.quote(iid, safe='')}", + ) + except Exception as exc: + print(f" ! {iid[:8]}: fetch failed: {exc}", file=sys.stderr) + errors += 1 + continue response_text = raw.get("response", "") or "" if not response_text.strip() or len(response_text) < 50: continue