Repository navigation
feat: start the 8b and 30b without a speech model; speech input opt-in - #9
Merged
Merged
Conversation
The WITH_ASR=1 build downloaded the speech model's main branch and then checked that refs/main equalled the pinned commit. The model repository moved on main, so the check failed and the build stopped, for anyone building the image. Download the pinned commit with --revision instead, so the build no longer changes when the model repository does. A download by commit writes no refs/main, and the offline lookup for revision main reads it, so the Dockerfile writes it and checks that the pinned snapshot exists. Assisted-by: Claude Code Signed-off-by: Nigel Jones <jonesn@uk.ibm.com>
…e slim one The 8b and 30b checkpoints enable speech input and the image runs with the Hub offline, so the plain image could not start with them. WITH_ASR now defaults to 1; WITH_ASR=0 builds the slim image. The README, TESTING.md and the preflight message follow. STATUS.md records the default image served from the checkpoint alone: the 8b on one H100 and the 30b on two with tensor parallelism. Assisted-by: Claude Code Signed-off-by: Nigel Jones <jonesn@uk.ibm.com>
…out a speech model
The 8b and 30b checkpoints enable speech input, which makes granite-switch load a speech model
at startup that decisions never use. serve.sh now passes --hf-overrides '{"asr_enabled": false}'
unless SYSTEMONE_SPEECH_INPUT=1, so the checkpoint alone is enough. With it set to 1 the preflight
runs as before. WITH_ASR goes back to 0 (the speech model is no longer baked in by default);
WITH_ASR=1 still bakes it in for the opt-in path. The README, TESTING.md and STATUS.md follow.
Assisted-by: Claude Code
Signed-off-by: Nigel Jones <jonesn@uk.ibm.com>
planetf1
marked this pull request as ready for review
October 22, 2026 20:56
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes for users
The container now starts with the 8b and 30b checkpoints given nothing but the checkpoint. Before, it stopped at startup: those checkpoints enable speech input, which makes granite-switch load a speech model while the engine starts, and the image runs with the Hub offline and did not contain that model. Decisions never use speech, so
serve.shnow switches speech input off by default and no speech model is needed.To keep speech input, set
SYSTEMONE_SPEECH_INPUT=1and make the speech model available. The README lists the ways: build with--build-arg WITH_ASR=1(bakes it in), mount a Hub cache and setHF_HUB_CACHE, or setHF_HUB_OFFLINE=0. With the switch on and the model missing,serve.shstops before vLLM with a message naming the model and these options.The cost of the default is that
/v1/chat/completionson the same server takes no audio input unless the switch is on.docker build --build-arg WITH_ASR=1also works again. It was failing at the step that downloads the speech model, because the model repository'smainhad moved off the commit the Dockerfile pins. The build now fetches the pinned commit, so it does not change when the model repository does.Mechanism
serve.shpasses--hf-overrides '{"asr_enabled": false}'unlessSYSTEMONE_SPEECH_INPUT=1. Any value other than 0 or 1 is refused. The preflight check only runs when the switch is on.WITH_ASRstays 0 by default; the image holds no speech model unless built withWITH_ASR=1.hf downloadofmainand then requiredrefs/mainto equalASR_REVISION. It now runshf download --revision $ASR_REVISION. A download by commit writes norefs/main, and the offline lookup for revisionmain(which granite-switch uses) reads that file, so the step writes it and checks the pinned snapshot directory exists.docs/TESTING.mdanddocs/STATUS.mdfollow.tests/test_serve_sh.pyrunsserve.shagainst a stubvllm.Limitations
docker runitself: itsENTRYPOINT,--gpus allhandling and--ipc=hostwere not exercised.WITH_ASR=1image (model baked in) was served on the 8b earlier, before the switch existed, and the 30b was not run with speech input on.Testing
WITH_ASR=1images build (linux/amd64).serve.sh, only the checkpoint mounted, Hub offline: the 8b on one H100, and the 30b on two H100s with--tensor-parallel-size 2. On each,e2e_check11/11,probe_check6/6 andaccuracy_checkpass. The server log shows the override applied and never names the speech model.SYSTEMONE_SPEECH_INPUT=1with the speech model from a mounted cache: the 8b starts and passes the same checks.SYSTEMONE_SPEECH_INPUT=1with no speech model anywhere:serve.shexits 1 with the preflight message and vLLM never starts.tests/test_serve_sh.pyandtests/test_preflight.pypass; ruff and the pre-commit hooks pass.