330e84e473
Sandbox-validated against case c414cf52 (3 runs each, fair pre+post-LLM gazetteer pipeline): the new prompt eliminates two hallucination classes the prior version produced — unmarked "Hypotonie" when the dictation said "Hypertonie" (0/3 vs 2/3) and inventing units like "35 ng/l" for values without unit (0/3 vs 2/3) — while keeping Latin terms (Punctum Maximum etc.) intact in 3/3 runs vs 2/3. Block layout reorganized so each rule appears exactly once: AUFGABE / QUELLE / KORREKTUR-POLITIK / TREUE / CHRONOLOGIE / DOSIERUNGSSCHEMA / MARKIERUNGEN. The removed "AKTIVE KORREKTUR (nicht durchreichen)" hammer block is no longer load-bearing because the gazetteer's pre-LLM pass now catches the typical drug-name typos before the LLM sees them. Vocabulary additions (single-token, alphabetical, ≥5 chars): - vocabulary.txt: Enoxaparin (was missing — Inoxaparin→Enoxaparin is a recurrent ASR error and the prior pipeline relied on the LLM alone) - medical_terms.txt (new file, picked up by the dir-glob loader): Holosystolikum, Klappenvitien, Koronarbaum, Pumpfunktion
Gazetteer vocabulary
Plain list of domain-specific words the analysis LLM might not know —
medication brand names, proper nouns, colleagues, technical terms. Loaded
once at server start. Used to annotate close edit-distance neighbours in
Whisper transcripts as Token [?Canonical] for LLM-side review.
Format
- One entry per line, UTF-8.
- Blank lines and lines starting with
#are skipped. - Matching is case-insensitive; original casing is preserved for display.
- Entries must be ≥5 characters (shorter tokens collide too often with everyday German words).
- Duplicates (case-insensitive, across files) are collapsed automatically.
Adding entries
Edit vocabulary.txt (or drop additional *.txt files into this
directory — the loader picks up every *.txt non-recursively). Restart
the server afterwards; there is no hot-reload. Keep entries phonetically
distinctive: Tavor is a good entry, Haus would match innocent words.