Coverage for astrocyte/recall/merge_result.py: 87%
15 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-04 05:24 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-04 05:24 +0000
1"""Merge federated / external MemoryHit rows into a RecallResult (engine & tiered paths)."""
3from __future__ import annotations
5from astrocyte.types import MemoryHit, RecallResult
8def merge_external_into_recall_result(
9 result: RecallResult,
10 external: list[MemoryHit],
11 max_results: int,
12) -> RecallResult:
13 """Combine external hits with ``result.hits`` by score, dedupe by text, trim to ``max_results``."""
14 combined = list(external) + list(result.hits)
15 combined.sort(key=lambda h: h.score, reverse=True)
16 seen: set[str] = set()
17 deduped: list[MemoryHit] = []
18 for h in combined:
19 if h.text in seen:
20 continue
21 seen.add(h.text)
22 deduped.append(h)
23 if len(deduped) >= max_results:
24 break
25 return RecallResult(
26 hits=deduped,
27 total_available=result.total_available + len(external),
28 truncated=result.truncated,
29 trace=result.trace,
30 )