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"