feat: motion content enrichment pipeline hardening

- ai_provider_wrapper: retry/fallback with exponential backoff, None sentinel for failed items
- text_pipeline: use wrapper, return 5-tuple (stored, skipped_existing, skipped_no_text, errors, failed_ids)
- similarity/compute: filter trivial 1.0 matches on identical short titles (<12 chars)
- rerun_embeddings: --retry-missing mode, calls ensure_text_embeddings_for_ids on failed ids
- sync_motion_content: per-ext_id retries, HTTPAdapter pool, --max-body-workers CLI flag, audit on failure
- qa_similarity script: samples motions, writes JSON ledger to thoughts/ledgers/
- All tests green: 61 passed, 2 skipped
This commit is contained in:
2026-03-23 21:31:39 +01:00
parent aef7c45074
commit b09e580f65
11 changed files with 1771 additions and 7 deletions
+1 -5
View File
@@ -177,11 +177,7 @@ def ensure_text_embeddings(
)
skipped_existing = int(existing)
# Historically some callers expected a 4-tuple; return the primary
# metrics (stored, skipped_existing, skipped_no_text, errors).
# The list of failed_ids is intentionally not returned here to remain
# backward-compatible with older callers.
return stored, skipped_existing, skipped_no_text, errors
return stored, skipped_existing, skipped_no_text, errors, failed_ids
def ensure_text_embeddings_for_ids(