M1+M2: RAG-Pipeline mit verbindlichem Grounding
agent/-Paket: Ingest (601 Layer-2-Eintraege -> 3005 Chunks, FTS5-BM25 + Vektoren-Cache), Hybrid-Retrieval (RRF, Stand-Boost, cross_ref-Erweiterung), Ollama-Client (embed/chat, think-Flag-Fallback, kurzes Connect-Budget), Systemprompt mit Zitierpflicht, Post-Validierung (zitierte IDs gemaess Retrieved-Set, 1x Regenerierung, dann Verweigerung), FastAPI (/ask, /health, /reindex), CLI, Goldset (31 Fragen, IDs gegen kb.json verifiziert, inkl. ATZ-Konfliktfall + 4 Verweigerungsfaelle), Eval-Suite, Test-Chat. 41 Offline-Tests gruen. Baseline BM25-only: Hit-Rate 0,871 / Recall@8 0,855 / MRR 0,476. Hybrid-Messung, Antwortmodus-Eval und Modell-Bake-off (M3) auf dem Host ausstaendig (Ollama aus der Zed-Sandbox nicht erreichbar). MEMORY.md und planung.md Umsetzungsstand aktualisiert.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
"""Tests: Textnormalisierung und FTS-Query-Bau."""
|
||||
from agent.normalize import fts_query, normalize_text, tokenize
|
||||
|
||||
|
||||
def test_normalize_folds_german_diacritics():
|
||||
assert normalize_text("Gehälter Ärger Größe Übung Ökonomie") == (
|
||||
"gehalter arger grosse ubung okonomie"
|
||||
)
|
||||
|
||||
|
||||
def test_normalize_keeps_digits_and_section_sign():
|
||||
assert normalize_text("AZG § 19e (Stand 2026-01)") == "azg § 19e (stand 2026-01)"
|
||||
|
||||
|
||||
def test_tokenize_splits_alphanumeric():
|
||||
assert tokenize("Lohnausgleich, AZG §19e") == ["lohnausgleich", "azg", "19e"]
|
||||
|
||||
|
||||
def test_fts_query_drops_stopwords_and_quotes_terms():
|
||||
q = fts_query("Wie hoch ist die SV-Beitragsgrundlage?")
|
||||
assert '"beitragsgrundlage"' in q
|
||||
assert '"sv"' in q
|
||||
assert '"wie"' not in q
|
||||
assert '"ist"' not in q
|
||||
|
||||
|
||||
def test_fts_query_empty_and_stopword_only():
|
||||
assert fts_query("") == ""
|
||||
assert fts_query("Wie ist der die das?") == ""
|
||||
Reference in New Issue
Block a user