""" Memory enrichment Celery task — runs asynchronously after ingest to generate summaries, facts, and timeline events without blocking the memoir hot path. """ from celery import shared_task from sqlalchemy.orm import Session from app.core.config import settings from app.core.db import get_sync_db from app.core.logging import get_logger logger = get_logger(__name__) @shared_task(bind=True, max_retries=2, default_retry_delay=30) def enrich_memory_source(self, user_id: str, source_id: str): """ Post-ingest enrichment: session summary, rolling summary, facts, timeline. Runs outside the memoir Phase1 hot path so narrative generation isn't blocked. """ if not settings.memory_enrichment_enabled: return {"status": "disabled"} try: with get_sync_db() as db: from app.features.memory.enrichment import enrich_memory_after_ingest_sync enrich_memory_after_ingest_sync(db, user_id, source_id, llm=None) db.commit() logger.info( "event=memory_enrichment_done user_id={} source_id={}", user_id, source_id, ) return {"status": "success", "source_id": source_id} except Exception as e: logger.warning( "event=memory_enrichment_failed user_id={} source_id={} exc={} exc_type={}", user_id, source_id, e, type(e).__name__, ) raise self.retry(exc=e) from e