Add Gemma 4 and Qwen3.6/Qwen3.8 catalog rows - #7
Conversation
Adds text-only GGUF rows for the Gemma 4 family (E2B, E4B, 12B, 26B-A4B MoE, and 31B in both Q4_K_M and Q2_K_XL) and dense/MoE rows for Qwen3.8-27B and Qwen3.6-35B-A3B, plus MLX rows for the two new Qwen releases. Gemma 4 MLX is intentionally not added at any size: mlx-swift-lm 3.31.4 aborts loading every Gemma 4 checkpoint on an asymmetric QK-norm bug already documented in this file. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxGfpsMbkNzoQT559b2tXz
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe model catalog adds Qwen3 and Gemma 4 variants for Llama.cpp. It adds Qwen3 variants for MLX and documents why MLX Gemma 4 variants remain unregistered. ChangesModel catalog expansion
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to This change adds model catalog entries without altering SDK dependencies or native runtime code, and the reported checks pass. No actionable merge-blocking risk remains beyond normal review. Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Adds Meta Muse Glimmer 30B and NVIDIA Nemotron 3 Nano Omni 30B-A3B Reasoning as VLM rows (GGUF decoder + mmproj), and the IBM Granite 4.1 family (3B/8B/30B, GGUF; 3B/30B also MLX). Live-verified against the pinned mlx-swift-lm 3.31.4 checkout that Muse Glimmer's and Nemotron Omni's declared model_types have no registered VLMModelFactory/LLMModelFactory entry, so their MLX rows are correctly omitted (same class of bug as the existing Gemma 4 MLX note). Also caught and corrected a ~2x undercount in the originally supplied Muse Glimmer MLX repo size against the live HF blobs API. Nemotron-3.5-ASR-Streaming and Supertonic v3 TTS were investigated and NOT added: the vendored sherpa-onnx (1.13.2, per runanywhere-sdks core/VERSIONS at the SDK release this app pins) predates the 1.13.5 needed for the streaming ASR transducer, and while 1.13.2 does add native Supertonic C++ support, the published HF repo ships JSON (unicode_indexer.json, per-speaker voice_styles/*.json) where the vendored loader hard-requires single binary blobs (unicode_indexer.bin, voice.bin) produced by an offline conversion script not present in the repo or this codebase. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxGfpsMbkNzoQT559b2tXz
Summary
Catalog-only change to
RunAnywhereAI/Core/Services/ModelCatalogBootstrap.swift, added over two rounds on this branch. No SDK/Package.swift/dependency changes, no new native code — pureregisterLLM/registerMultiFilerows following the file's existing conventions.Round 1 — Gemma 4 and Qwen3.6/Qwen3.8
GGUF rows (framework
.llamaCpp, text-only chat models)gemma-4-e2b-it-q4_k_mgemma-4-e4b-it-text-q4_k_mgemma-4-12b-it-q4_k_mgemma-4-26b-a4b-it-q4_k_xlgemma-4-31b-it-q4_k_mgemma-4-31b-it-q2_k_xlqwen3.8-27b-q4_k_mqwen3.6-35b-a3b-q4_k_mAll from the plain
unsloth/...-GGUFrepos, matching the existing Qwen3.x rows' source convention. Qwen rows setsupportsThinking: true.Gemma 4 E4B id note: this file already had a multimodal
gemma-4-e4b-it-q4_k_mrow (a VLM decoder+mmproj pair fromggml-org). To avoid an id collision with a materially different artifact, the new text-only row usesgemma-4-e4b-it-text-q4_k_minstead.MLX rows added (framework
.mlx)mlx-qwen3.8-27b-4bitmlx-qwen3.6-35b-a3b-4bitReuse the file's existing MLX pattern exactly: the
mlxCatalogEnabledgate lives inside the sharedregisterLLMhelper (guard framework != .mlx || mlxCatalogEnabled else { return }) — no new plumbing invented.MLX Gemma 4 rows intentionally NOT added, at any size. This file already documented that mlx-swift-lm 3.31.4's
Gemma4TextAttentionaborts on Gemma 4's asymmetric QK-norm. That bug is architectural, not per-size, so it blocks 12B/26B-A4B/31B exactly as it already blocked E2B/E4B — I extended the existing comment to say so explicitly.Round 2 — Muse Glimmer 30B, IBM Granite 4.1, Nemotron Nano Omni (deep HF verification pass)
New GGUF rows
muse-glimmer-30b-q4_k_xlgranite-4.1-3b-q4_k_mgranite-4.1-8b-q4_k_mgranite-4.1-30b-q4_k_mgranitearch, no expert-routing fields)nemotron-3-nano-omni-30b-a3b-reasoning-q4_k_msupportsThinking: trueNew MLX rows
mlx-granite-4.1-3b-4bitmlx-granite-4.1-30b-4bitNo MLX row for Granite 4.1 8B:
mlx-communityonly publishes that size in bf16/nvfp4/mxfp4/mxfp8 (no clean 4-bit from a reputable quantizer) plus one unofficial third-party "-oQ4" repo, which was excluded per the "stick to reputable quants" rule already used for Gemma/Qwen.MLX rows investigated and NOT added, with verified reasons
I checked out the exact pinned
mlx-swift-lm3.31.4 source (fromPackage.resolved, matched against the local SwiftPM checkout) rather than assuming compatibility:mlx-community/Muse-Glimmer-30B-4bit— itsconfig.jsondeclaresmodel_type: "muse_glimmer".VLMModelFactory's registered types (paligemma, qwen2_vl, qwen2_5_vl, qwen3_vl, qwen3_5[_moe], idefics3, gemma3, gemma4[_unified], smolvlm, fastvlm, llava_qwen2, pixtral, mistral3, lfm2_vl, glm_ocr) contain nomuse_glimmerentry — this would download in full and then fail to load. Same class of bug as the existing documented Gemma 4 MLX note, so I extended that note rather than silently omitting the row.mlx-community/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-4bit—config.jsondeclaresmodel_type: "NemotronH_Nano_Omni_Reasoning_V3".VLMModelFactoryhas zero Nemotron entries of any kind;LLMModelFactory's only Nemotron entry,"nemotron_h", is a different, non-matching string and is text-only regardless (no vision path). Not added.config.jsondeclare plainmodel_type: "granite"(GraniteForCausalLM), which is a registeredLLMModelFactoryentry (GraniteConfiguration/GraniteModel). Added.STT/TTS investigated and NOT added — SDK version verification
Checked
runanywhere-sdkscore/VERSIONSat the exact tag (v0.20.19) this app'sPackage.resolvedpins:SHERPA_ONNX_VERSION_IOS/_MACOS= 1.13.2.offline-tts-supertonic-*.{h,cc}exist in the vendored sherpa-onnx source). But the publishedSupertone/supertonic-3HF repo shipsonnx/unicode_indexer.jsonand ten per-speakervoice_styles/{F,M}[1-5].jsonfiles, while the vendored loader'sOfflineTtsSupertonicModelConfighard-requires a single binaryunicode_indexer.bin(asserts the path ends in.bin) and a single combinedvoice.binblob, both produced by an offline conversion script (generate_indexer_bin.py) that ships with neither the HF repo nor this codebase. I also found zero references to "supertonic" anywhere in this SDK's own engine/provider code, so the app-side dispatch to this loader doesn't exist yet either. Not added — two real blockers, not one; needs a RunAnywhere-side re-export (the same pattern already used for Parakeet CTC) plus provider wiring.Explicitly considered and NOT added (all rounds)
unsloth/Qwen3.8-27B-NVFP4) — NVIDIA-specific; neither of this app's backends can load it.unsloth/...-GGUFandmlx-community/...-4bitrepos were used anywhere in this PR.No license field exists anywhere in this file's
registerLLM/registerMultiFileAPI (grepped — zero hits across the whole file both rounds), so none was added to any new row; matches every existing row.Verification (both rounds)
swift package resolve— clean../scripts/smoke.sh— passes../scripts/verify.sh(realxcodebuildagainstiphonesimulator) — BUILD SUCCEEDED, no warnings on the changed file, after both commits.id:values anywhere inModelCatalogBootstrap.swiftafter either round (checked with a full-file dedupe pass).🤖 Generated with Claude Code
https://claude.ai/code/session_01DxGfpsMbkNzoQT559b2tXz