You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Plan-More-Models.md Phase 4 already sketches a tiered catalog expansion. This issue records fresh research (August 2026) into what has shipped in the ecosystem since that plan was written, what the bundled runtimes can already load today, and a concrete, ordered candidate list for both platforms. Nothing here changes architecture: every model is a runtime download against pinned SHA-256s, so APK/IPA size is unaffected.
Kotlin config classes exist (com/k2fsa/sherpa/onnx/OfflineRecognizer.kt:37–86), JNI symbols confirmed in libsherpa-onnx-jni.so
structs exist in vendored c-api.h:937–1079
cohereTranscribe
no
config class exists (OfflineRecognizer.kt:105)
absent from v1.13.6 c-api.h → needs a runtime bump
Cost per new family remains as the plan says (~20 lines of C + ~8 lines Kotlin + one enum case each side), with the greedy_search default rule (exit(-1) hazard) applying to every non-transducer family.
Tier A — new models in already-wired families (catalog rows only)
These need no engine code on either platform, only pins (+ descriptor + language claims):
NeMo FastConformer CTC multilingual (~133 MB, 10 languages) — be/de/en/es/fr/hr/it/pl/ru/uk; plus per-language FastConformer CTC builds (de/es/pt, ~132 MB each). Lands in the wired nemoCtc family. Fills Slavic/Balkan coverage the catalog has zero entries for today.
Moonshine multilingual tiny/base quantized — useful-sensors shipped JA/KO/ZH/ES/AR/UK/VI builds (tiny ≈ 73 MB ja/ko, base ≈ 142 MB). If they load through the wired moonshine family (verify per export), this gives the catalog its first sub-100 MB Japanese/Korean options.
GigaAM v3 Russian — successor to the shipped giga-am-ctc-ru; ONNX exports available (istupakov/gigaam-v3-onnx, k2-fsa mirrors). Same NeMo families.
SenseVoice Nano int8 (~265 MB) — same zh/en/ja/ko/yue set as SenseVoice with better reported accuracy. Verify whether it loads via the wired sense_voice family or needs funASR-nano config before pinning.
Android whisper.cpp: enumerate missing GGML builds at the pinned revision (e.g. large-v1, missing quantizations) — mechanical, as planned (Plan-More-Models.md §8 Tier 1).
iOS WhisperKit: enumerate remaining compressed variants at the pinned revision — note upstream argmaxinc/whisperkit-coreml HEAD is still the revision we already pin (97a5bf9…), so there are no new upstream variants; growth is purely within-repo enumeration.
Tier B — one new family each (bridge code + catalog rows)
Omnilingual ASR CTC 300M int8 — highest strategic value. Meta's model covers 1,600+ languages (many with no other on-device option); official k2-fsa export csukuangfj/sherpa-onnx-omnilingual-asr-1600-languages-300M-ctc-int8-2025-11-12 is 348 MB, greedy-search CTC, auto-detecting, Apache-2.0. An improved v2 export exists (Feb 2026). Family struct present in both bundled runtimes. Coverage exceeds the picker's table → intersect and note surplus, exactly as Plan-More-Models.md §8 Tier 2 anticipates.
Qwen3-ASR 0.6B int8 (~940 MB) — multilingual LLM-decoder recognizer; supported since sherpa-onnx 1.13.4, so both bundled runtimes can run it. Official export csukuangfj2/sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25. This updates Plan-More-Models.md §8 Tier 3: the plan expected to decline qwen3ASR on size grounds, but a 0.6B int8 now exists — it should move to "evaluate on flagship RAM floor" (likely ≥ 8 GB floor given CPU decode speed).
FireRedASR2 CTC v2 (zh/en, Feb 2026) — sherpa-onnx-fire-red-asr2-ctc-zh_en-int8-2026-02-25; stronger Mandarin than paraformer-zh-small. fireRedAsrCtc case exists in both runtimes.
Zipformer transducers for thinly-covered languages — Vietnamese 30M int8 (35 MB!), Korean, Thai, Cantonese, bilingual zh-en, plus newly exported X-ASR non-streaming zipformer transducer models. Needs the single zipformerTransducer enum case (model_type left empty — see comment at LocalModelCatalog.kt:19). Best size-to-value ratio in the entire list.
Zipformer CTC per-language models — unlocks another large per-language family; zipformerCtc case exists in both runtimes.
WenetCtc — additional Mandarin coverage (already in plan).
Tier C — evaluate, likely decline for now
Canary-1B-v2 (25 EU languages + X↔English AST, ~978M params) — would extend translation well beyond the 180M-flash four-way matrix, but the only sherpa-onnx int8 export is a community conversion (Sarphix/canary-1b-v2-sherpa-onnx-int8, Jul 2026) requiring non-obvious export fixes; k2-fsa has no official package (Canary 1b k2-fsa/sherpa-onnx#1767). Given our supply-chain posture (pinned SHA-256s, privacy docs' review requirement), decline until an official export lands. Revisit: it also needs a RAM floor around 6 GB.
Cohere Transcribe 14-lang int8 (~2 GB, Apache-2.0) — SOTA-class accuracy but phone-hostile size; and the iOS bundled runtime lacks the family struct entirely. Decline now; revisit after any sherpa-onnx bump.
Qwen3-ASR 1.7B int8 (~1.8 GB) — superseded by the 0.6B for phones.
Voxtral Mini 4B — no sherpa-onnx export; WebGPU-class size (~2.3 GB at q4). Out of scope for these engines.
Suggested order
Land tools/pin-model.py (Phase 0 gate).
Tier A rows (no code) — start with FastConformer multilingual + whisper.cpp/WhisperKit enumeration.
zipformerTransducer case + Zipformer vi/korean/thai/cantonese (smallest, biggest coverage win per byte).
Qwen3-ASR 0.6B on flagship floor; FireRedASR2 CTC; wenetCtc last.
Canary-1B-v2 / Cohere deferred pending official exports / runtime bump.
Every addition still requires: pinned revision + per-file SHA-256, honest languageCodes/detectsLanguage, RAM floors, a physical-device transcription pass, closed-vocabulary telemetry tests staying green, and fdroid flavor remaining whisper-only by construction (sherpaAvailable).
Summary
Plan-More-Models.mdPhase 4 already sketches a tiered catalog expansion. This issue records fresh research (August 2026) into what has shipped in the ecosystem since that plan was written, what the bundled runtimes can already load today, and a concrete, ordered candidate list for both platforms. Nothing here changes architecture: every model is a runtime download against pinned SHA-256s, so APK/IPA size is unaffected.Current state: Android 44 models (32 whisper.cpp GGML + 12 sherpa-onnx), iOS 35 models (23 WhisperKit Core ML + 12 sherpa-onnx). Catalog sources:
android/app/src/main/java/com/vocahq/vocaphone/local/LocalModelCatalog.ktandSherpaModelCatalog.ktios/VocaPhoneShared/LocalModelCatalog.swift+ios/VocaPhoneApp/Models/local_model_pins.json/sherpa_model_pins.jsonPrerequisite stays Phase 0: pins are hand-assembled;
tools/pin-model.pymust exist before any bulk expansion.What the bundled runtimes already support (verified in-tree)
Both platforms bundle sherpa-onnx v1.13.6, which is much more capable than the 7 wired families suggest.
com/k2fsa/sherpa/onnx/OfflineRecognizer.kt:37–86), JNI symbols confirmed inlibsherpa-onnx-jni.soc-api.h:937–1079OfflineRecognizer.kt:105)Cost per new family remains as the plan says (~20 lines of C + ~8 lines Kotlin + one enum case each side), with the
greedy_searchdefault rule (exit(-1)hazard) applying to every non-transducer family.Tier A — new models in already-wired families (catalog rows only)
These need no engine code on either platform, only pins (+ descriptor + language claims):
nemoCtcfamily. Fills Slavic/Balkan coverage the catalog has zero entries for today.istupakov/gigaam-v3-onnx, k2-fsa mirrors). Same NeMo families.large-v1, missing quantizations) — mechanical, as planned (Plan-More-Models.md §8 Tier 1).argmaxinc/whisperkit-coremlHEAD is still the revision we already pin (97a5bf9…), so there are no new upstream variants; growth is purely within-repo enumeration.Tier B — one new family each (bridge code + catalog rows)
csukuangfj/sherpa-onnx-omnilingual-asr-1600-languages-300M-ctc-int8-2025-11-12is 348 MB, greedy-search CTC, auto-detecting, Apache-2.0. An improved v2 export exists (Feb 2026). Family struct present in both bundled runtimes. Coverage exceeds the picker's table → intersect and note surplus, exactly as Plan-More-Models.md §8 Tier 2 anticipates.csukuangfj2/sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25. This updates Plan-More-Models.md §8 Tier 3: the plan expected to decline qwen3ASR on size grounds, but a 0.6B int8 now exists — it should move to "evaluate on flagship RAM floor" (likely ≥ 8 GB floor given CPU decode speed).sherpa-onnx-fire-red-asr2-ctc-zh_en-int8-2026-02-25; stronger Mandarin than paraformer-zh-small.fireRedAsrCtccase exists in both runtimes.zipformerTransducerenum case (model_type left empty — see comment atLocalModelCatalog.kt:19). Best size-to-value ratio in the entire list.zipformerCtccase exists in both runtimes.Tier C — evaluate, likely decline for now
Sarphix/canary-1b-v2-sherpa-onnx-int8, Jul 2026) requiring non-obvious export fixes; k2-fsa has no official package (Canary 1b k2-fsa/sherpa-onnx#1767). Given our supply-chain posture (pinned SHA-256s, privacy docs' review requirement), decline until an official export lands. Revisit: it also needs a RAM floor around 6 GB.Suggested order
tools/pin-model.py(Phase 0 gate).zipformerTransducercase + Zipformer vi/korean/thai/cantonese (smallest, biggest coverage win per byte).LanguageCoverage.only-exceeds-picker resolution + device pass).Every addition still requires: pinned revision + per-file SHA-256, honest
languageCodes/detectsLanguage, RAM floors, a physical-device transcription pass, closed-vocabulary telemetry tests staying green, and fdroid flavor remaining whisper-only by construction (sherpaAvailable).Verification
tools/pin-model.py --verifyclean after each pinjust android ci/just ios ci