Files
doctate/server/vocab
Brummel c5535c0848 Add reasoning_effort to chat request
Introduce a new field `reasoning_effort` to the `ChatRequest` struct.
This field, set to "medium" by default, allows tuning LLM reasoning
depth to balance hallucination risk against latency and token cost. This
setting is specifically for Ionos' GPT-OSS reasoning models and is
ignored by other OpenAI-compatible models.
2026-04-30 23:52:40 +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.

Optional: bypass-aliases for false-positive Hunspell compounds

A line may carry one or more --prefixed alias tokens after the canonical:

Sellink -Seelink -Seelinks

Meaning: when a transcript token (case-insensitive) exactly matches a listed alias, the gazetteer skips the Hunspell dict-veto and rewrites the token to the canonical. Use this only when Hunspell-de mistakenly accepts a known mishearing as a valid German compound and thereby blocks a legitimate correction (e.g. Hunspell parses Seelink as See + link and vetoes Seelink → Sellink).

  • The - is the bypass marker; it is stripped before storage.
  • Aliases are exact match only (no Damerau-Levenshtein tolerance). If a new declension or mishearing surfaces, append it explicitly: Sellink -Seelink -Seelinks.
  • Aliases are scoped to the entry whose canonical wins the DL contest; identical aliases under unrelated entries do not interfere.
  • A secondary token without - is a hard server-start error (io::ErrorKind::InvalidData) — the loader fails loud rather than silently misindex.

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.