Skip to content

Studio whisper: pair slim bundles on the ggml commit, not the full llama tag#7381

Merged
danielhanchen merged 1 commit into
mainfrom
fix/whisper-ggml-pairing
Jul 24, 2026
Merged

Studio whisper: pair slim bundles on the ggml commit, not the full llama tag#7381
danielhanchen merged 1 commit into
mainfrom
fix/whisper-ggml-pairing

Conversation

@danielhanchen

Copy link
Copy Markdown
Member

Summary

Fixes curated whisper.cpp dictation going unavailable whenever the llama.cpp prebuilt advances to a newer build that keeps the same ggml commit.

The slim whisper bundle is ggml-less: whisper-server links the ggml runtime (libggml.so.0, libggml-base.so.0, backend modules) out of the installed llama.cpp prebuilt, so each whisper release pins a paired llama release. The installer required that pin to match the installed llama tag exactly (slim_pairing_for_artifact, _slim_release_incompatibility, resolve_selection).

llama fork tags are b<upstream_build>-mix-<ggml_commit>. The build number tracks upstream llama and fork PRs that live in llama-server, outside ggml; the -mix-<ggml_commit> suffix is what fixes the ggml ABI the slim bundle links against. The llama installer always installs the newest llama, so as soon as llama republishes a newer build with the same ggml (a frequent event), the installed tag advances past the whisper pin and the exact-match gate rejects an ABI-identical pairing:

whisper.cpp    no compatible prebuilt (installed llama.cpp b10079-mix-fb3d4ca;
               whisper requires b10069-mix-fb3d4ca)

Both tags carry the same ggml commit fb3d4ca; only the build number differs, so the runtime .so.0 files are byte-for-byte ABI-identical.

Fix

Key the pairing gate on the ggml commit after -mix- instead of the full tag, via a small llama_runtime_pairs helper used in all three comparison sites. requires_ggml_sonames remains the real per-file ABI gate, so a runtime that is actually missing a library still fails closed, and a genuine ggml skew (different -mix-<commit>) still reports incompatible. Tags without a -mix- marker fall back to exact matching, so nothing regresses for non-fork tags. This is first-party-to-first-party pairing (our llama.cpp and whisper.cpp forks), so there is no security or authenticity implication.

Tests

  • test_llama_runtime_pairs_keys_on_ggml_commit: exact tag, newer-build-same-ggml, same-build-different-ggml, missing requirement, and non--mix- tags.
  • test_slim_pairs_across_llama_build_bump_with_same_ggml: the live failure case (installed b10079-mix-fb3d4ca, pinned b10069-mix-fb3d4ca) now selects the slim bundle instead of degrading to CPU.
  • test_slim_build_bump_same_ggml_is_not_a_compatibility_error: a same-ggml build bump does not surface as a release incompatibility.
  • Existing skew tests still hold: b10068-mix-old and b99999-mix-0000000 are genuine ggml skews and still reject.
  • tests/studio/install/ full suite: 1307 passed, 2 skipped.

…ama tag

The slim whisper bundle is ggml-less and links the ggml runtime out of the
installed llama.cpp prebuilt, so each whisper release pins a paired llama tag.
The gate required an exact tag match, but llama fork tags are
b<upstream_build>-mix-<ggml_commit> and the build number tracks upstream llama
and fork PRs that live outside ggml. When llama republishes a newer build with
the same ggml commit (a frequent event), the installed llama advances past the
whisper pin and curated dictation goes unavailable until whisper is republished,
even though the ggml runtime is ABI-identical.

Key the pairing gate on the ggml commit after -mix- instead of the full tag, in
all three comparison sites (slim_pairing_for_artifact,
_slim_release_incompatibility, resolve_selection). requires_ggml_sonames stays
the real per-file ABI gate, and a genuine ggml skew still fails closed. Tags
without a -mix- marker fall back to exact matching.
@danielhanchen

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: 67f9b16b5d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@danielhanchen
danielhanchen merged commit 6f60bf4 into main Jul 24, 2026
34 of 39 checks passed
@danielhanchen
danielhanchen deleted the fix/whisper-ggml-pairing branch July 24, 2026 03:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant