Add per-user whisper settings for hotwords and initial prompt

This commit introduces the capability to configure user-specific Whisper
settings, including language, hotwords, and initial prompts. These
settings are stored in `users.toml` and are passed to the Whisper
service for more tailored transcription results.

New unit tests have been added to verify that the `transcribe` function
correctly forwards these optional settings to the Whisper client and
omits them when they are not provided.

Additionally, a new directory `tests/fixtures/dictations` has been
created to store M4A audio files, their expected transcripts, and
associated hotword files. This serves as a regression corpus for the
Whisper pipeline. A README file explains the structure and conventions
for adding new fixtures. Several new fixtures have been added, covering
various medical domains and transcription scenarios.
This commit is contained in:
2026-04-14 11:56:48 +02:00
parent b63a269776
commit f5b99106b1
26 changed files with 134 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
# Dictation fixtures
Persistent, committed test recordings. These are the regression corpus for the
Whisper pipeline — `scripts/regress_whisper.sh` iterates over them and compares
live output against the golden transcripts.
## File layout
Per fixture, three files share a common stem:
| File | Required | Purpose |
|------------------------|----------|-------------------------------------------------------------------|
| `<name>.m4a` | yes | Raw AAC recording as produced by `scripts/dictate.sh` / the watch |
| `<name>.expected.txt` | yes | Golden transcript, hand-reviewed — the regression target |
| `<name>.hotwords.txt` | no | One-line hotwords list if the fixture is meant to test Fachvokabular |
| `<name>.notes.md` | no | Short description: what this case exercises, any gotchas |
## Naming convention
`<domain>_<topic>[_<variant>]` — all lowercase, snake_case, no spaces:
- `cardio_hocm_valsalva`
- `cardio_hocm_valsalva_quiet` (same content, low SNR variant)
- `ortho_knie_meniskus`
- `psych_ptbs_flashbacks`
The prefix encodes the medical domain so we can group by specialty when we
start per-user hotwords tuning.
## Adding a new fixture
1. Record via `./scripts/dictate.sh -n`. Speak a realistic case.
2. Note the case UUID the script prints.
3. Copy `$DATA_PATH/<slug>/open/<case_id>/<timestamp>.m4a`
`tests/fixtures/dictations/<name>.m4a`.
4. Copy `$DATA_PATH/<slug>/open/<case_id>/<timestamp>.transcript.txt`
`tests/fixtures/dictations/<name>.expected.txt`.
5. **Review the transcript** — fix any Whisper errors by hand. This is the
golden reference; accept nothing that is actually wrong.
6. If the fixture tests Fachvokabular, add `<name>.hotwords.txt` with the
domain-specific words, one space-separated line.
7. Commit all three/four files together.
## What not to commit here
- Personal / real patient data — everything here must be synthetic.
- Long recordings (>2 min) — keep fixtures tight, we want fast regression runs.
- Multiple takes of the same content unless they test a specific variant (noise,
speaker, tempo).
@@ -0,0 +1 @@
Beginn mit Bisoprolol 2,5 mg täglich bei erhöhtem Blutdruck und Herzfrequenz. Anpassung nach Diagnostik. Weiteres Vorgehen wie besprochen.
@@ -0,0 +1 @@
Palpitationen Dyspnoe Ruhe-EKG Repolarisationsstörungen Belastungs-EKG Echokardiographie Bisoprolol HOCM Septumhypertrophie LVOT Valsalva Troponin Ejektionsfraktion Mitralklappeninsuffizienz
Binary file not shown.
@@ -0,0 +1 @@
Patient zur kardialen Abklärung vorstellig bei bekannten Palpitationen und diskreter Dyspnoe. Ruhe-EKG zeigt unspezifische Repolarisationsstörungen. Weiterführendes Belastungs-EKG und Echokardiographie geplant. Medikamentöse Einstellung nach Ergebnissen. Wiedervorstellung nach Diagnostik. Bitte beachten Sie, dass dies keine medizinische Beratung darstellt; konsultieren Sie einen Arzt.
@@ -0,0 +1 @@
Palpitationen Dyspnoe Ruhe-EKG Repolarisationsstörungen Belastungs-EKG Echokardiographie Bisoprolol HOCM Septumhypertrophie LVOT Valsalva Troponin Ejektionsfraktion Mitralklappeninsuffizienz
Binary file not shown.
@@ -0,0 +1 @@
Patient präsentiert sich mit systemischer Hypertonie, konsekutivem Linksherzversagen und kritischer kardialer Dekompensation. Echokardiographisch verifizierte reduzierte Ejektionsfraktion bei signifikanter Mitralklappeninsuffizienz. Zusätzlich chronische Niereninsuffizienz Stadium IV mit Azidose und Elektrolytentgleisung. Verdacht auf paraneoplastisches Syndrom bei progredienter Malignomlast. Stationäres Therapiemanagement mittels intravenöser Diuretika, Inotropika und Dialyse. Prognostische Relevanz hochgradig infaust. Weiteres Vorgehen wie besprochen.
@@ -0,0 +1 @@
Palpitationen Dyspnoe Ruhe-EKG Repolarisationsstörungen Belastungs-EKG Echokardiographie Bisoprolol HOCM Septumhypertrophie LVOT Valsalva Troponin Ejektionsfraktion Mitralklappeninsuffizienz
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
Verordnung von Mebeverin 135 mg dreimal täglich präprandial. Weiteres Vorgehen wie besprochen.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
Patient stellt sich vor mit krampfartigen Bauchschmerzen und Blähungen. Symptome bestehen seit einigen Wochen, verstärkt postprandial. Verdacht auf Reizdarmsyndrom. Stuhluntersuchung und großes Blutbild veranlasst. Ernährungsumstellung und probiotische Behandlung empfohlen. Wiedervorstellung nach Befundeingang.
Binary file not shown.
@@ -0,0 +1 @@
Zusätzlich symptomatische Behandlung mit Spasmolytikum bei akuten Beschwerden. Weiteres Vorgehen wie besprochen.
Binary file not shown.
@@ -0,0 +1 @@
Zusätzlich Anmeldung beim nationalen Krebsregister veranlasst. Weiteres Vorgehen wie besprochen.
Binary file not shown.
@@ -0,0 +1 @@
Patient zur Erstvorstellung bei histologisch gesichertem Mammakarzinom. Stadium und biologisches Profil in Abklärung. Interdisziplinäres Therapiekonzept wird erstellt, potenziell Chemotherapie und Operation. Weitere Diagnostik veranlasst. Wiedervorstellung nach Ergebnissen. Bitte beachten Sie, dass dies keine medizinische Beratung darstellt;—
Binary file not shown.
@@ -0,0 +1 @@
Patient zeigt sich uneinsichtig bezüglich der notwendigen Diagnostik und Therapie, äußert Complianceprobleme. Weiteres Vorgehen wie besprochen.
Binary file not shown.
@@ -0,0 +1 @@
Patient mit akuten Knieschmerzen nach Bagatelltrauma vorstellig. Verdacht auf Meniskusläsion. Klinische Diagnostik erfolgt, MRT zur Bestätigung angefordert. Konservative Therapie mittels Physiotherapie und Schmerzmitteln begonnen. Wiedervorstellung nach MRT.
Binary file not shown.