ebm-mentor / tests /test_retrieval.py
bsenst's picture
Initial production-ready EBM Mentor
5887b57
Raw
History Blame Contribute Delete
2.19 kB
from __future__ import annotations
import numpy as np
from src.chunking import EbmDocument
from src.vector_store import EbmVectorStore
from src.retriever import EbmRetriever
class DummyEmbeddingModel:
model_name = "dummy"
def encode(self, texts):
vectors = []
for text in texts:
lower = text.lower()
vectors.append(
np.array(
[
1.0 if "01100" in lower else 0.0,
1.0 if "inanspruchnahme" in lower else 0.0,
1.0 if "vorsorge" in lower else 0.0,
],
dtype=np.float32,
)
)
arr = np.vstack(vectors)
norm = np.linalg.norm(arr, axis=1, keepdims=True)
norm[norm == 0] = 1.0
return arr / norm
def test_retrieval_ranks_relevant_code() -> None:
docs = [
EbmDocument(
code="01100",
title="Unvorhergesehene Inanspruchnahme I",
short_text="Unvorhergesehene Inanspruchnahme I",
receipt_text=None,
long_text="Notfallversorgung",
chapter_code=None,
chapter_name="Kapitel A",
bereich=None,
kapitel=None,
abschnitt=None,
notes=[],
points=196,
fachgruppen=[],
exclusions=[],
gkv_account_types=[],
),
EbmDocument(
code="01732",
title="Vorsorge",
short_text="Vorsorge",
receipt_text=None,
long_text="Vorsorgeleistung",
chapter_code=None,
chapter_name="Kapitel B",
bereich=None,
kapitel=None,
abschnitt=None,
notes=[],
points=100,
fachgruppen=[],
exclusions=[],
gkv_account_types=[],
),
]
store, _ = EbmVectorStore.build(docs, embedding_model=DummyEmbeddingModel())
retriever = EbmRetriever(store, embedding_model=DummyEmbeddingModel())
results = retriever.retrieve("Was bedeutet 01100?", top_k=1)
assert results[0]["code"] == "01100"