Repository navigation
Conversation
The default ASR model was loaded by name with no revision, so the Hub repo's 2026-10-21 multilingual release silently changed every transcript (now capitalized and punctuated) and broke the GPU tests (#155). The default also lived only in the library, so a checkpoint's config did not show which ASR it ran. Compose with --enable-audio now always writes asr_model_id and a new asr_model_revision; the default model is pinned to its English-only revision 947f59a, and --asr-revision sets it for a custom model (left unpinned with a warning otherwise). Serving has no fallback: an audio checkpoint without asr_model_id fails at startup with the config fix. This is breaking for checkpoints composed before 0.2.0, hence the version bump. For airgapped customers (#158), --bundle-asr copies the ASR into the checkpoint's asr/ folder, sets asr_bundled_path, and checks at compose time that it loads with no network. Serving loads a bundled ASR from disk, or fetches only asr/ when served by Hub repo id. --asr-model may be a local directory so the bundle can be built offline. test_asr_ctc_default_gpu.py no longer asserts transcript text, which is model quality and not ours to own; it now loads the pinned revision. Fixes #155 Fixes #158 Signed-off-by: aviv ron <rona@il.ibm.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Collaborator
Author
|
/gpu-test-multi |
✅ GPU tests passed —
|
Two stubs in test_audio_processor.py still had get_transcriber's old signature, so the processor's new revision= argument made them raise TypeError: 13 tests failed on the vllm30 GPU leg (14 on vLLM < 0.29, where test_uncached_path_reports_updates_not_applied also runs). The stubs ignore their arguments, so they now take **kwargs and do not break on the next signature change either. Signed-off-by: aviv ron <rona@il.ibm.com>
✅ GPU tests passed —
|
Collaborator
Author
|
/gpu-test-multi |
aviv1ron1
marked this pull request as ready for review
November 4, 2026 08:11
aviv1ron1
requested review from
antonpibm,
freunda and
yairallouche
as code owners
November 4, 2026 08:11
bundle_asr_model wrote into an existing <output>/asr/ with dirs_exist_ok and never removed what was there. Re-composing into the same --output with a different ASR model left the first model's shards, tokenizer and feature-extractor files beside the new ones; the offline validation could still pass, and serving then loaded a mix of two models. The destination is now removed first, and a local --asr-model that is the destination itself is refused rather than deleted. Signed-off-by: aviv ron <rona@il.ibm.com>
The copytree ignore for a local --asr-model only filtered files, so every subdirectory was copied whole: a git-lfs clone brought its .git/ object store (about another 1 GB), and onnx/ or nested .bin weights landed in the bundle although the patterns exist to keep them out. The Hub path filters nested files through allow_patterns, so the two sources gave different bundles. Local files are now matched by their relative path with huggingface_hub's own filter_repo_objects, and hidden directories are not walked. Signed-off-by: aviv ron <rona@il.ibm.com>
The ASR bundle was downloaded and validated only after save_pretrained had written a config.json with asr_bundled_path set. A failed download, or a model with no safetensors weights, raised with the weights and that config already on disk: the output looked complete and failed only at serve time. The bundle now runs first, so a failure stops the compose before the config exists. It is also built in a staging directory and swapped in only once it validates, so a failed re-compose leaves a previous good bundle in place instead of an empty or partial asr/. Signed-off-by: aviv ron <rona@il.ibm.com>
resolve_asr_source fetched a Hub checkpoint's bundle with the path stripped of slashes but joined it to the root unstripped, so "/asr" downloaded asr/* and then looked in the filesystem's /asr. Nothing stopped a value such as "../../x", from a config that may come off the Hub, pointing the ASR at any local directory. The path is now normalized once, used for both the fetch pattern and the load path, and refused when absolute, "." or reaching outside with "..". Signed-off-by: aviv ron <rona@il.ibm.com>
A local directory as --asr-model was accepted with plain --enable-audio and written verbatim into asr_model_id, so the checkpoint pointed at a path that exists on the build machine only: it passed startup and then failed on the first audio request once moved or uploaded. With --bundle-asr the same full path, e.g. a home directory, went into the published config and model card. A local directory is now refused unless --bundle-asr is set, and is then recorded by its directory name only; the bundle itself is built from --asr-model. The ASR model is resolved before the model is built, so a refused value fails the compose in seconds. Signed-off-by: aviv ron <rona@il.ibm.com>
Collaborator
Author
|
/gpu-test |
✅ GPU tests passed —
|
✅ GPU tests passed —
|
Collaborator
Author
|
@antonpibm gpu tests passed. PR is ready for review and merging |
This branch has not been deployed
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.
Fixes #155
Fixes #158
Summary
test_asr_ctc_default_gpu.py. The default also existed only inside the library, so a checkpoint's config didn't show which ASR it ran.--bundle-asrbuilds the ASR weights into the checkpoint.ASR pinned and named in the config (#155)
--enable-audio, compose always writesasr_model_idand a newasr_model_revision. The default modelibm-granite/granite-speech-5.0-470m-turboctcis pinned to its English-only revision947f59a.--asr-revisionflag. A custom--asr-modelwithout it composes with a warning and loads unpinned. Arevisioninasr_pipeline_kwargsstill overrides it.asr_model_idfails at server startup, with the twoconfig.jsonlines that fix it.DEFAULT_ASR_MODEL_IDmoved togranite_switch.config.ASRTranscriberandget_transcribernow requiremodel_idand accept arevision.--bundle-asr(#158)--enable-audio. It copies the ASR into<output>/asr/(config, safetensors weights, tokenizer, feature extractor, README and license) and setsasr_bundled_path.--asr-modelcan be a local directory, so the bundle can be built inside the airgapped network.local_files_only=True.asr/is fetched, which also works offline from the HF cache.asr/*.safetensorsas LLM weights.Release
Version bumped to 0.2.0.
CHANGELOG.mdhas a Breaking section.docs/AUDIO.mdcovers:Tests
test_asr_ctc_default_gpu.pyno longer asserts transcript text, which is model quality (# pinned revision and still runs on every PR.tests/composer/test_asr_bundle.pycovers the composer flags and bundling, offline, usingbuilt locally (tests/shared/tiny_asr.py).test_multi_audio_compose_e2e.pynow checks that the composed config names the pinned ASR.