Files
Hy-Memory/tests/test_reader_selection.py
T
2026-10-16 16:26:27 +08:00

72 lines
2.7 KiB
Python

import asyncio
from hy_memory.config import MemoryConfig
from hy_memory.pipelines.reader_base import BaseReadPipeline
from hy_memory.pipelines.reader_hybrid import HybridReadPipeline
from hy_memory.pipelines.reader_legacy import LegacyReadPipeline
def test_only_legacy_and_hybrid_are_registered(monkeypatch):
from hy_memory.pipelines._retrieval import config
assert config.ALL_READERS == ("legacy", "hybrid")
assert config.resolve_reader_name("legacy") == "legacy"
assert config.resolve_reader_name("hybrid") == "hybrid"
assert config.resolve_reader_name("hybrid_v2") == "legacy"
monkeypatch.setenv("HY_MEMORY_READER", "mem0")
assert config.resolve_reader_name() == "legacy"
def test_readers_share_the_exact_same_processing_pipeline():
assert issubclass(LegacyReadPipeline, BaseReadPipeline)
assert issubclass(HybridReadPipeline, BaseReadPipeline)
assert LegacyReadPipeline.read is BaseReadPipeline.read
assert HybridReadPipeline.read is BaseReadPipeline.read
assert LegacyReadPipeline._apply_graph_rerank is BaseReadPipeline._apply_graph_rerank
assert HybridReadPipeline._apply_graph_rerank is BaseReadPipeline._apply_graph_rerank
def test_reader_difference_is_keyword_recall_only():
assert LegacyReadPipeline.VERSION == "legacy"
assert HybridReadPipeline.VERSION == "hybrid"
assert LegacyReadPipeline.ENABLE_KEYWORD_RECALL is False
assert HybridReadPipeline.ENABLE_KEYWORD_RECALL is True
runtime_metadata = {
"__module__", "__doc__", "__abstractmethods__", "_abc_impl",
}
assert set(LegacyReadPipeline.__dict__) - runtime_metadata == {
"VERSION", "ENABLE_KEYWORD_RECALL",
}
assert set(HybridReadPipeline.__dict__) - runtime_metadata == {
"VERSION", "ENABLE_KEYWORD_RECALL",
}
class _KeywordStore:
def __init__(self):
self.calls = []
async def keyword_search(self, **kwargs):
self.calls.append(kwargs)
return [{"node_id": "kw"}]
def test_keyword_recall_strategy_switch():
store = _KeywordStore()
legacy = LegacyReadPipeline(MemoryConfig())
hybrid = HybridReadPipeline(MemoryConfig())
assert asyncio.run(legacy._keyword_search(store, query="q")) == []
assert store.calls == []
assert asyncio.run(hybrid._keyword_search(store, query="q")) == [{"node_id": "kw"}]
assert store.calls == [{"query": "q"}]
def test_local_rerank_defaults_off_and_is_shared():
config = MemoryConfig()
assert config.recall.local_rerank_enabled is False
assert config.recall.local_rerank_model == "nreimers/mmarco-mMiniLMv2-L6-H384-v1"
assert LegacyReadPipeline._read_once is BaseReadPipeline._read_once
assert HybridReadPipeline._read_once is BaseReadPipeline._read_once