bookworm's Mesa 22.3 has no gfx1151 (Strix Halo) support in RADV, so
the container silently fell back to CPU despite gpu=auto: whisper
logged 'whisper_backend_init_gpu: no GPU found'. trixie ships Mesa
25.0.7, which supports the R9700; whisper.cpp builds unchanged on it.
- whisper-server stack: second container (port 8086) running the
English-trained small.en-tdrz model with -tdrz; image patched
(speaker-turn.patch) to expose speaker_turn_next per segment in
verbose_json like the cli example does
- core/whisper Diarization: merges the tdrz pass's TURN TIMES onto the
quality transcript as alternating 'Sprecher 1/2:' labels, splitting
segments when a turn falls inside them; no turns detected = no
labels (never mislabels); 6 unit tests
- RemoteWhisperEngine gains a diarize flag (sends tinydiarize=true,
parses speaker_turn_next); WhisperEngine.Segment carries the flag
- RecorderService: optional second pass on the diarize server after the
final pass; failures keep the unlabeled transcript
- Settings: Diarize server URL (persisted; empty disables)
- validated infrastructure locally: patched image builds, tdrz model
downloads from akashmjn/tinydiarize-whisper.cpp, speaker_turn_next
present in responses; synthetic espeak audio does not trigger the
model's turn tokens — real two-person speech needed for the
end-to-end check
- server/whisper-server: compose stack built from the pinned whisper.cpp
v1.9.3 release, same as the Android JNI layer
- Vulkan GPU backend (AMD Radeon AI PRO R9700 / RADV) with transparent
CPU fallback and NO_GPU override; GGML models auto-download on first
start (MODEL env, default large-v3)
- API bound to the Tailscale interface only (100.103.83.12:8080) since
whisper-server has no authentication; render-group GID passthrough for
/dev/dri
- validated locally: image builds, entrypoint downloads tiny, POST
/inference returns verbose_json with language + segments; GPU-less
fallback confirmed