feat: 回忆录证据血缘与内部评测可追溯,顺带对齐本地评测台与 CI
数据库与模型:新增多版迁移(章节证据快照、对话血缘、记忆事实/时间线 lineage 等),把「成稿 ↔ 对话/记忆」的溯源信息落到表结构里。 业务链路:会话与 WS、回忆录/故事流水线、记忆写入与 enrichment 等跟着接上线索与快照;新增章节证据快照与评测侧 EvalTraceService 等模块,方便组评审用的证据包。 内部评测:自动化 run 与手工 memoir 评审共用可追溯证据;rubric/ judge 相关脚本与文档有配套调整。 app-eval-web:Memoir/实验详情里能展开看证据摘要与 evidence_trace(含对话轮次 id);Vite 代理与 development.sh 注入的 API 端口与当前默认内部评测端口一致,避免改端口后页面连错服务。 工程杂项:GitHub Actions / 仓库说明有更新;各适配器与支付/配额/plan 等多处为小改动或跟随主改动的收尾;新增/扩充了?
This commit is contained in:
63
api/tests/test_dialogue_lineage_memory_ingest.py
Normal file
63
api/tests/test_dialogue_lineage_memory_ingest.py
Normal file
@@ -0,0 +1,63 @@
|
||||
"""ingest_transcript_sync 将 lineage_json 传入 create_source。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from types import SimpleNamespace
|
||||
|
||||
from app.features.memory.service import ingest_transcript_sync
|
||||
|
||||
|
||||
def test_ingest_transcript_sync_passes_lineage(monkeypatch) -> None:
|
||||
captured: dict = {}
|
||||
|
||||
class FakeSession:
|
||||
commit_calls = 0
|
||||
|
||||
def commit(self) -> None:
|
||||
self.commit_calls += 1
|
||||
|
||||
def flush(self) -> None:
|
||||
pass
|
||||
|
||||
def begin_nested(self):
|
||||
from contextlib import nullcontext
|
||||
|
||||
return nullcontext()
|
||||
|
||||
def fake_create_source(session, **kwargs):
|
||||
captured.update(kwargs)
|
||||
return SimpleNamespace(id="src-1")
|
||||
|
||||
monkeypatch.setattr(
|
||||
"app.core.dependencies.get_embedding_provider", lambda: None
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.features.memory.repo.create_source_sync",
|
||||
fake_create_source,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.features.memory.repo.create_chunk_sync",
|
||||
lambda *a, **k: SimpleNamespace(id=f"ch-{k.get('chunk_index')}"),
|
||||
)
|
||||
monkeypatch.setattr("app.core.config.settings.memory_enrichment_enabled", False)
|
||||
|
||||
lineage = {
|
||||
"schema_version": 1,
|
||||
"conversation_id": "c9",
|
||||
"turns": [
|
||||
{"user_message_id": "um-1", "assistant_message_id": "as-1"},
|
||||
],
|
||||
"primary_user_message_id": "um-1",
|
||||
}
|
||||
|
||||
fake_session = FakeSession()
|
||||
sid = ingest_transcript_sync(
|
||||
fake_session,
|
||||
"u1",
|
||||
"c9",
|
||||
"hello there",
|
||||
lineage_json=lineage,
|
||||
)
|
||||
assert sid == "src-1"
|
||||
assert captured.get("lineage_json") == lineage
|
||||
assert captured.get("primary_user_message_id") == "um-1"
|
||||
Reference in New Issue
Block a user