From 9853339fd3bd0e15e60821699414257323b53309 Mon Sep 17 00:00:00 2001 From: Rolando Santamaria Maso Date: Wed, 22 Jul 2026 21:02:11 +0200 Subject: [PATCH] chore(docker): default to multilingual whisper small for STT The bundled whisper.cpp model was ggml-tiny.bin - technically multilingual but effectively English-grade, so German/Spanish voice notes transcribed poorly. The image now ships ggml-small.bin (466 MB), the multilingual small variant, which gives usable DE/EN/ES quality with no code changes (WHISPER_MODEL build arg default bumped, both compose configs and docs updated to match). Verified: whisper stage builds, model downloads, whisper-cli runs. --- docker/Dockerfile | 8 +++++--- docker/README.md | 12 +++++++----- docker/config.godmode.json | 4 ++-- docker/config.restricted.json | 4 ++-- docs/TELEGRAM.md | 2 +- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 8fd24afd..4a184e2d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -18,16 +18,18 @@ COPY . . RUN CGO_ENABLED=0 go build -ldflags "-s -w" -o /out/odek ./cmd/odek # ---- whisper stage ---- -# Build whisper.cpp's CLI and fetch the `tiny` model so the `transcribe` tool +# Build whisper.cpp's CLI and fetch the `small` model so the `transcribe` tool # (and Telegram voice auto-transcription) work out of the box — no host -# install, no first-run model download. Same Debian base as the runtime stage +# install, no first-run model download. `small` (not `small.en`) is the +# multilingual variant: usable German/English/Spanish quality, unlike `tiny` +# which is effectively English-grade. Same Debian base as the runtime stage # so the glibc ABI matches; OpenMP is disabled to keep the runtime dependency # surface down to just libstdc++6. To ship a different model, override the build # arg: `--build-arg WHISPER_MODEL=base` (tiny | base | small | medium) — size # and RAM grow accordingly. WHISPER_VERSION pins the whisper.cpp release so the # build is reproducible — bump it deliberately rather than tracking master. FROM debian:bookworm-slim AS whisper -ARG WHISPER_MODEL=tiny +ARG WHISPER_MODEL=small ARG WHISPER_VERSION=v1.8.6 RUN apt-get update && apt-get install -y --no-install-recommends \ git cmake make g++ curl ca-certificates \ diff --git a/docker/README.md b/docker/README.md index 2552b2a5..f591b601 100644 --- a/docker/README.md +++ b/docker/README.md @@ -155,19 +155,21 @@ just defers silently. ## Voice transcription (out of the box) -The image **bundles whisper.cpp's CLI and the `tiny` ggml model**, plus `ffmpeg` +The image **bundles whisper.cpp's CLI and the `small` ggml model**, plus `ffmpeg` for OGG/Opus → WAV conversion — so the `transcribe` tool and Telegram voice auto-transcription work with zero setup. No host install, no first-run download. +`small` is the multilingual variant: usable German/English/Spanish quality out +of the box (`tiny`, the previous default, was effectively English-grade). -- The model ships at `/usr/local/share/whisper/models/ggml-tiny.bin`, and both +- The model ships at `/usr/local/share/whisper/models/ggml-small.bin`, and both `config.restricted.json` and `config.godmode.json` point `transcription.models_dir` there. (It lives outside `~/.odek` on purpose — the Telegram profiles bind-mount `./.odek`, which would otherwise shadow it.) - Send the bot a voice note → it's transcribed locally and handed to the agent as text. `auto_transcribe` is on by default in the bundled configs. -- Want a more accurate (larger) model? Rebuild with - `--build-arg WHISPER_MODEL=base` (or `small` / `medium`) and bump the - `model` field in the config to match. +- Want a different model? Rebuild with + `--build-arg WHISPER_MODEL=tiny` (fastest, weaker multilingual) or `medium` + (best accuracy, much larger) and bump the `model` field in the config to match. ## Image & video understanding (out of the box) diff --git a/docker/config.godmode.json b/docker/config.godmode.json index 3362bc22..b362d16c 100644 --- a/docker/config.godmode.json +++ b/docker/config.godmode.json @@ -8,7 +8,7 @@ "verbose": false }, "transcription": { - "model": "tiny", + "model": "small", "auto_transcribe": true, "models_dir": "/usr/local/share/whisper/models" }, @@ -76,4 +76,4 @@ "action": "allow" } } -} \ No newline at end of file +} diff --git a/docker/config.restricted.json b/docker/config.restricted.json index 2f540074..c93a59f9 100644 --- a/docker/config.restricted.json +++ b/docker/config.restricted.json @@ -8,7 +8,7 @@ "verbose": false }, "transcription": { - "model": "tiny", + "model": "small", "auto_transcribe": true, "models_dir": "/usr/local/share/whisper/models" }, @@ -92,4 +92,4 @@ } } } -} \ No newline at end of file +} diff --git a/docs/TELEGRAM.md b/docs/TELEGRAM.md index 0ffbd191..52c9269e 100644 --- a/docs/TELEGRAM.md +++ b/docs/TELEGRAM.md @@ -394,7 +394,7 @@ Voice message received → DownloadVoice (OGG Opus to disk) **Fallback:** If auto-transcribe fails (ffmpeg unavailable, corrupt audio, whisper error), the agent receives the file path with a suggestion to use the `transcribe()` tool manually. -**Docker:** the official image bundles the whisper.cpp CLI, the `tiny` model, and ffmpeg, with `auto_transcribe` enabled in the shipped configs — so voice transcription works out of the box with no host install. See [../docker/README.md](../docker/README.md#voice-transcription-out-of-the-box). +**Docker:** the official image bundles the whisper.cpp CLI, the `small` (multilingual) model, and ffmpeg, with `auto_transcribe` enabled in the shipped configs — so voice transcription works out of the box with no host install, at usable German/English/Spanish quality. See [../docker/README.md](../docker/README.md#voice-transcription-out-of-the-box). ### Tool Progress (Narrator)