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) <noreply@anthropic.com>
This commit is contained in:
2026-04-12 10:58:00 -04:00
parent 8af8af90d0
commit 719ff649a8

View File

@@ -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