feat(api)!: memory single chain — async MemoryService, strict eval closure
Route all memory ingest/retrieve/enrichment/compaction through async MemoryService. Remove legacy sync memory implementations (ingest/retrieve/compaction); Celery and memoir Phase2 call asyncio.run into MemoryService-backed helpers. Memoir Phase1 batch ingest uses MemoryService.ingest_transcripts_batch; drop chapters. evidence_bundle_json mirror (Alembic 0015). Evaluation uses snapshot/link-only bundles; raise EvidenceClosureMissing instead of partial/fallback lineage tiers. Split memoir state into NarrativeCoverageState and InterviewControlState; delete the _interview_meta_store adapter layer. Remove rolling-query and recent-fact fallback settings from config and evidence assembly. Update judges, docs, tests, and PlaygroundPage alignment. Made-with: Cursor
This commit is contained in:
@@ -6,18 +6,30 @@ Tasks are routed to ``settings.celery_memory_enrichment_queue`` (default ``memor
|
||||
run workers with ``-Q celery,memory_idle`` or a dedicated low-priority worker for that queue.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import time
|
||||
|
||||
from celery import shared_task
|
||||
|
||||
from app.core.config import settings
|
||||
from app.core.db import get_sync_db
|
||||
from app.core.db import AsyncSessionLocal
|
||||
from app.core.logging import get_logger
|
||||
from app.core.memoir_pipeline_progress import merge_fanout_item
|
||||
from app.features.memory.service import MemoryService
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
async def _enrich_memory_source_async(
|
||||
user_id: str,
|
||||
source_id: str,
|
||||
) -> None:
|
||||
async with AsyncSessionLocal() as db:
|
||||
service = MemoryService(db)
|
||||
await service.enrich_source(user_id, source_id, llm=None)
|
||||
await db.commit()
|
||||
|
||||
|
||||
def schedule_memory_enrichment(
|
||||
user_id: str,
|
||||
source_id: str,
|
||||
@@ -100,28 +112,24 @@ def enrich_memory_source(
|
||||
status="running",
|
||||
)
|
||||
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()
|
||||
ms = (time.perf_counter() - t0) * 1000
|
||||
logger.info(
|
||||
"event=memory_enrichment_done user_id={} source_id={} duration_ms={:.1f} "
|
||||
"msg=记忆富化完成",
|
||||
user_id,
|
||||
source_id,
|
||||
ms,
|
||||
)
|
||||
merge_fanout_item(
|
||||
memoir_correlation_id,
|
||||
list_name="memory_enrichment",
|
||||
id_field="source_id",
|
||||
item_id=source_id,
|
||||
task_id=tid,
|
||||
status="success",
|
||||
)
|
||||
return {"status": "success", "source_id": source_id}
|
||||
asyncio.run(_enrich_memory_source_async(user_id, source_id))
|
||||
ms = (time.perf_counter() - t0) * 1000
|
||||
logger.info(
|
||||
"event=memory_enrichment_done user_id={} source_id={} duration_ms={:.1f} "
|
||||
"msg=记忆富化完成",
|
||||
user_id,
|
||||
source_id,
|
||||
ms,
|
||||
)
|
||||
merge_fanout_item(
|
||||
memoir_correlation_id,
|
||||
list_name="memory_enrichment",
|
||||
id_field="source_id",
|
||||
item_id=source_id,
|
||||
task_id=tid,
|
||||
status="success",
|
||||
)
|
||||
return {"status": "success", "source_id": source_id}
|
||||
except Exception as e:
|
||||
ms = (time.perf_counter() - t0) * 1000
|
||||
logger.warning(
|
||||
|
||||
Reference in New Issue
Block a user