Skip to content

Add Gemma 4 and Qwen3.6/Qwen3.8 catalog rows - #7

Merged
sanchitmonga22 merged 2 commits into
mainfrom
add-gemma4-qwen3.6-qwen3.8-models
Aug 17, 2026
Merged

Add Gemma 4 and Qwen3.6/Qwen3.8 catalog rows#7
sanchitmonga22 merged 2 commits into
mainfrom
add-gemma4-qwen3.6-qwen3.8-models

Conversation

@sanchitmonga22

@sanchitmonga22 sanchitmonga22 commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

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 — pure registerLLM/registerMultiFile rows following the file's existing conventions.

Round 1 — Gemma 4 and Qwen3.6/Qwen3.8

GGUF rows (framework .llamaCpp, text-only chat models)

id model quant file size
gemma-4-e2b-it-q4_k_m Gemma 4 E2B IT Q4_K_M 3.11 GB
gemma-4-e4b-it-text-q4_k_m Gemma 4 E4B IT Q4_K_M 4.98 GB
gemma-4-12b-it-q4_k_m Gemma 4 12B IT Q4_K_M 7.12 GB
gemma-4-26b-a4b-it-q4_k_xl Gemma 4 26B-A4B IT (MoE, 26B total/4B active) UD-Q4_K_XL 17.01 GB
gemma-4-31b-it-q4_k_m Gemma 4 31B IT (dense) Q4_K_M 18.32 GB
gemma-4-31b-it-q2_k_xl Gemma 4 31B IT (dense) UD-Q2_K_XL 11.77 GB
qwen3.8-27b-q4_k_m Qwen3.8 27B (dense) Q4_K_M 17.11 GB
qwen3.6-35b-a3b-q4_k_m Qwen3.6 35B-A3B (MoE, 35B total/3B active) UD-Q4_K_M 22.13 GB

All from the plain unsloth/...-GGUF repos, matching the existing Qwen3.x rows' source convention. Qwen rows set supportsThinking: true.

Gemma 4 E4B id note: this file already had a multimodal gemma-4-e4b-it-q4_k_m row (a VLM decoder+mmproj pair from ggml-org). To avoid an id collision with a materially different artifact, the new text-only row uses gemma-4-e4b-it-text-q4_k_m instead.

MLX rows added (framework .mlx)

id model size
mlx-qwen3.8-27b-4bit Qwen3.8 27B 4bit ~16.05 GB
mlx-qwen3.6-35b-a3b-4bit Qwen3.6 35B-A3B 4bit ~20.40 GB

Reuse the file's existing MLX pattern exactly: the mlxCatalogEnabled gate lives inside the shared registerLLM helper (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 Gemma4TextAttention aborts 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

id model quant notes
muse-glimmer-30b-q4_k_xl Meta Muse Glimmer 30B (VLM, mmproj) UD-Q4_K_XL Apache 2.0, released 2026-08-10
granite-4.1-3b-q4_k_m IBM Granite 4.1 3B Q4_K_M Apache 2.0, dense
granite-4.1-8b-q4_k_m IBM Granite 4.1 8B Q4_K_M Apache 2.0, dense
granite-4.1-30b-q4_k_m IBM Granite 4.1 30B Q4_K_M Apache 2.0, dense (verified: GGUF metadata shows plain granite arch, no expert-routing fields)
nemotron-3-nano-omni-30b-a3b-reasoning-q4_k_m NVIDIA Nemotron 3 Nano Omni 30B-A3B Reasoning (VLM, mmproj) UD-Q4_K_M MoE, 31B total/3B active; supportsThinking: true

New MLX rows

id model
mlx-granite-4.1-3b-4bit MLX IBM Granite 4.1 3B 4bit
mlx-granite-4.1-30b-4bit MLX IBM Granite 4.1 30B 4bit

No MLX row for Granite 4.1 8B: mlx-community only 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-lm 3.31.4 source (from Package.resolved, matched against the local SwiftPM checkout) rather than assuming compatibility:

  • mlx-community/Muse-Glimmer-30B-4bit — its config.json declares model_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 no muse_glimmer entry — 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.
    • Separately, I caught a real data error: the originally supplied size estimate for this repo (~19.4 GB) does not match the live HF blobs API, which reports 4 safetensors shards totaling 39,443,521,145 B (~39.4 GB) — roughly 2x. Flagged in the code comment either way, since the row isn't being added.
  • mlx-community/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-4bitconfig.json declares model_type: "NemotronH_Nano_Omni_Reasoning_V3". VLMModelFactory has 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.
  • IBM Granite 4.1 (3B/30B) — by contrast, both repos' config.json declare plain model_type: "granite" (GraniteForCausalLM), which is a registered LLMModelFactory entry (GraniteConfiguration/GraniteModel). Added.

STT/TTS investigated and NOT added — SDK version verification

Checked runanywhere-sdks core/VERSIONS at the exact tag (v0.20.19) this app's Package.resolved pins: SHERPA_ONNX_VERSION_IOS/_MACOS = 1.13.2.

  • NVIDIA Nemotron-3.5-ASR-Streaming 0.6B — needs sherpa-onnx v1.13.5 (2026-08-11) for native streaming-transducer support. Vendored is 1.13.2. Not added — blocked on the SDK bumping its sherpa-onnx pin, not a dead-end.
  • Supertone Supertonic v3 TTS — vendored 1.13.2 does add native C++ Supertonic support (confirmed: offline-tts-supertonic-*.{h,cc} exist in the vendored sherpa-onnx source). But the published Supertone/supertonic-3 HF repo ships onnx/unicode_indexer.json and ten per-speaker voice_styles/{F,M}[1-5].json files, while the vendored loader's OfflineTtsSupertonicModelConfig hard-requires a single binary unicode_indexer.bin (asserts the path ends in .bin) and a single combined voice.bin blob, 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)

  • NVFP4 quants (e.g. unsloth/Qwen3.8-27B-NVFP4) — NVIDIA-specific; neither of this app's backends can load it.
  • Abliterated/uncensored/heretic/personality-modified community quants — only plain unsloth/...-GGUF and mlx-community/...-4bit repos were used anywhere in this PR.
  • Jina Reranker v3.5 — real, but CC-BY-NC-4.0 non-commercial; needs product/legal sign-off before bundling in a commercial app.
  • IBM Granite Speech 4.1 2B — real, but an audio-instruction encoder+decoder-LM, architecturally different from the ASR transducer/CTC models this app's STT path expects.
  • IBM Granite Vision 4.1 4B — no unsloth/mlx-community/reputable quant exists yet.
  • Ultra-large frontier releases (Kimi K3, GLM-5.2, DeepSeek V4, Mistral Large 3, MiniMax M3) — real, but hundreds-of-GB-to-TB even at 4-bit; not storable/loadable on any of this app's targets.

No license field exists anywhere in this file's registerLLM/registerMultiFile API (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 (real xcodebuild against iphonesimulator) — BUILD SUCCEEDED, no warnings on the changed file, after both commits.
  • No duplicate id: values anywhere in ModelCatalogBootstrap.swift after either round (checked with a full-file dedupe pass).

🤖 Generated with Claude Code

https://claude.ai/code/session_01DxGfpsMbkNzoQT559b2tXz

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
@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b08b3f6a-2e8b-4dc2-a541-1e1f29f96aac

📥 Commits

Reviewing files that changed from the base of the PR and between 939c244 and 3ba8f10.

📒 Files selected for processing (1)
  • RunAnywhereAI/Core/Services/ModelCatalogBootstrap.swift

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The 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.

Changes

Model catalog expansion

Layer / File(s) Summary
Llama.cpp model registrations
RunAnywhereAI/Core/Services/ModelCatalogBootstrap.swift
Adds Qwen3.8 27B, Qwen3.6 35B-A3B, and five text-only Gemma 4 registrations with identifiers, URLs, quantizations, memory requirements, and supported thinking settings.
MLX model registrations and limitation
RunAnywhereAI/Core/Services/ModelCatalogBootstrap.swift
Adds 4-bit MLX entries for the two Qwen3 models. The Gemma 4 exclusion note now covers all sizes and cites unavailable k_norm weights required by the current loader.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 3ba8f

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: ayaangazali, siddhesh2377

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change by naming the added Gemma 4 and Qwen3.6/Qwen3.8 catalog rows.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-gemma4-qwen3.6-qwen3.8-models

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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
@sanchitmonga22
sanchitmonga22 changed the base branch from main to chore/bump-sdk-0.20.24 August 17, 2026 17:39
@sanchitmonga22
sanchitmonga22 changed the base branch from chore/bump-sdk-0.20.24 to main August 17, 2026 17:49
@sanchitmonga22
sanchitmonga22 merged commit 80fcf0e into main Aug 17, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant