Repository navigation
feat(cli): models list shows which speech models transcribe can use - #5323
Merged
Merged
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
kindrickjudith-crypto
approved these changes
Oct 9, 2026
|
How about my games |
kindrickjudith-crypto
approved these changes
Oct 9, 2026
Contributor
Edit accuracy: accurate 2059 (base branch 2059), smooth 1616 of thoseThe gate passes. Quarantined, measured but not gated (0) |
miguel-heygen
marked this pull request as ready for review
October 9, 2026 04:57
somanshreddy
approved these changes
Oct 9, 2026
somanshreddy
left a comment
Contributor
There was a problem hiding this comment.
Approving at 4586c42f; I found no blockers.
- Runner choice is unchanged.
parakeetRunnergives the same answertranscribeused to inline: sherpa when it's supported and installed, thenparakeet-mlx, otherwise null. The fallback after a Parakeet failure,skipSherpa: true, matches the old() => false.listandtranscribenow share this one function. - Whisper listing matches what
transcribeuses.listWhisperModelsuses the same check asensureModel(existsSync(MODELS_DIR/ggml-<model>.bin)), so it lists exactly the modelstranscribewould use without downloading..partfiles and dangling links are skipped. - Tests:
models,manager.list,transcribeandparakeetall pass, 62/62. I tried 4 mutants and the tests caught every one: dropping the dangling-linkexistsSync, droppingskipSherpa, settingunsupportedon an mlx-installed row, and removing thelistroute.
— Somu
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 a user
hyperframes models listnow shows the speech modelstranscribecan use, and--jsonprints them as one result. Before,modelsonly knewinstall parakeet, somodels listandmodels list --jsonstopped at the argument parser withMissing required positional argument: NAME. Agents ask for this command on their own when they want to know whether transcription will run locally.How it decides
installedexactly whentranscribewould run it: the CLI's own sherpa-onnx runtime with the pinned model, or elseparakeet-mlx. Both commands now ask one function for that (whisper/parakeetRunner.ts;transcribe'spickRunneruses it too), and the row says which inrunner. When the system cannot run it, the row carries the reason inunsupported. It is always listed, so a caller learns it exists and how to get it.ggml-<model>.binalready downloaded into the whisper models folder, by the name--modeltakes. The newlistWhisperModelshelper sits besideensureModelinwhisper/manager.ts, which owns that folder. Partial or sidecar files (.part,.verified) and dangling links (whichensureModelwould download again) are not listed.{ ok, ... }shape ofmodels install --json.models installwith no name, or an unknown action, still fails with exit 1 and now names both commands.Tests
commands/models.test.tsrunslist --jsonthrough citty's own parser (runCommand), where the old failure happened, and checks the unsupported-system row and the parakeet-mlx row. Exit 0, 10 passed, three runs in a row.transcribe.test.ts(34) andparakeet.test.ts(15) still pass on the shared runner check.whisper/manager.list.test.ts: no folder lists nothing; onlyggml-*.binfiles are listed; a dangling link is skipped (skipped on Windows like the repo's other symlink tests, since creating a link there can need extra rights). Exit 0, 3 passed, three runs in a row.models.tsfrom main fails all three list tests withMissing required positional argument: NAME; an unanchored file pattern fails the listing test; dropping the unsupported guard fails the unsupported-system test; dropping the parakeet-mlx branch fails the list test and two transcribe tests; dropping the link check fails the dangling-link test; showingunsupportedon an installed row fails the parakeet-mlx test.tsc --noEmitfor the CLI, oxlint and oxfmt are clean.models list --jsonexits 0;models install(no name) andmodels bogus --jsonexit 1.Known edges
models listfails with the filesystem error instead of a JSON result.models list extraignores the extra word, as citty does for other commands.path: that is wheremodels install parakeetputs it.