Files
doctate/server/vocab
Brummel 330e84e473 Consolidate analysis prompt and extend domain vocabulary
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
2026-04-27 23:27:05 +02:00
..

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.