"""将 memory 检索 bundle 压成可入库的轻量 trace(仅稳定 id,限长)。""" from __future__ import annotations from typing import Any def _capped_ids(items: list[Any] | None, *, cap: int = 100) -> list[str]: out: list[str] = [] for x in items or []: if len(out) >= cap: break if isinstance(x, dict) and x.get("id"): out.append(str(x["id"])) return out def chat_memory_retrieval_trace_from_bundle( bundle: dict, *, top_k: int, query_len: int, ) -> dict: """供 conversation_messages.memory_retrieval_trace_json 使用。""" return { "schema_version": 1, "source": "chat_memory_retrieval", "top_k": top_k, "query_len": query_len, "chunk_ids": _capped_ids(bundle.get("relevant_chunks")), "fact_ids": _capped_ids(bundle.get("relevant_facts")), "summary_ids": _capped_ids(bundle.get("relevant_summaries")), "story_ids": _capped_ids(bundle.get("relevant_stories")), }