Skip to content

gallery: group QAT, APEX and cross-backend builds under their base entry#10983

Merged
mudler merged 1 commit into
masterfrom
variants-sweep-2
Jul 20, 2026
Merged

gallery: group QAT, APEX and cross-backend builds under their base entry#10983
mudler merged 1 commit into
masterfrom
variants-sweep-2

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

What this does

A second pass over the gallery grouping alternative builds of the same model under a single entry, following #10943 which added the mechanism.

63 entries now declare variants, covering 90 targets, up from 52 and 62. Only gallery/index.yaml changes: 46 insertions, 8 deletions.

Two rulings that reverse the first sweep

The first sweep excluded QAT and APEX builds, on the theory that quantization-aware training and APEX produce genuinely different weights. They are quantization techniques over the same weights, so they belong with their base. That correction is most of this diff.

Not extended to -abliterated, of which six exist with base siblings. Abliteration modifies the weights to remove refusal behaviour, so it is a different model, consistent with the already-excluded heretic-uncensored finetunes.

What was grouped

Quantization and config pairs

dolphin-2.9-llama3-8b + :Q6_K · phi-2-chat + :Q8_0 · ideogram-4-iq4nl-ggml + -q8_0-ggml · llama-3.2-1b-instruct:q4_k_m + :q8_0 · llama-3.2-3b-instruct:q4_k_m + :q8_0 · meta-llama-3.1-8b-instruct + :grammar-functioncall + :Q8_grammar-functioncall

The : suffix is LocalAI's own convention for a config variant of the same weights, and was missed entirely by the first sweep, which grouped on name prefixes.

Gemma, now that QAT counts

New: gemma-3-4b-it, gemma-3-12b-it, and gemma-3-27b-it (three members, including google-gemma-3-27b-it-qat-q4_0-small) each gain their QAT build.

Restructured: gemma-4-26b-a4b-it, gemma-4-31b-it, gemma-4-e2b-it and gemma-4-e4b-it had a QAT build acting as parent because the bare entry was excluded. The bare entry now takes over, per the rule that the parent is the bare-named entry when one exists. No existing variant relationship was dropped, and nothing was renamed or re-pointed.

APEX

gemma-4-26b-a4b-it-apex and qwen3.6-35b-a3b-apex join their bases. qwen3.5-35b-a3b-apex and nemotron-3-nano-omni-30b-a3b-reasoning-apex have no base entry and stay standalone.

Cross-backend pairs

silero-vad + silero-vad-sherpa · vibevoice-cpp + vibevoice-tts-crispasr (TTS) · vibevoice-cpp-asr + vibevoice-crispasr (ASR)

These matter out of proportion to their number: almost nothing in the gallery previously exercised the engine-preference ranking added in #10943. TTS and ASR are kept strictly separate, verified by model filename rather than by name.

Gaps closed

omnivoice-cpp + -hq (Q8_0 vs BF16, the same shape as the already-grouped moss-tts-cpp-v1_5 and ced-* pairs) and qwen3-tts-cpp + -0.6b-base-q4, which the first sweep missed only because the parent is named qwen3-tts-cpp rather than qwen3-tts-cpp-0.6b-base, while four identical pairings in the same family were caught.

Deliberately not grouped

  • whisper-1 and whisper-base have an identical sha256 on ggml-base.bin, so this is an alias rather than an alternative build. Grouping would hide the name OpenAI-compatible clients literally send, and ranking would have no basis to choose between them since fit, engine, feature and size are all equal. Worth addressing as an aliasing question, separately.
  • Six -abliterated pairs, as above.
  • mistralai_mistral-small-3.1-24b-instruct-2503 + -multimodal.
  • gemma-3-270m-it-qat and gemma-3-1b-it (no siblings), the 3n entries (different architecture), and all finetunes.

One claim that did not survive checking

The vibevoice ASR pair was expected to be byte-identical. It is not: same filename, different uploaders, different sha256 (mudler/... vs cstr/...). They are two independent q4_k conversions of the same source. Still alternative builds of the same weights, so still grouped, but the stronger claim was wrong. The silero-vad pair genuinely is byte-identical.

Merge anchor hazard

qwen3-tts-cpp defines &qwenttscpp_gallery with nine merge children. Four already override variants; the other five would have inherited the new list, producing one self-reference and four nesting violations. Each got an explicit variants: [], matching the neighbouring &mossttscpp_gallery precedent. Every other touched entry was verified to be a plain list item.

Verification

Independently re-parsed: 1274 entries, 63 parents, 90 targets, with no duplicate target, no nesting, no self-reference, no missing target, and every target independently installable. A resolved-entry diff confirms the entry set is unchanged and every non-variants field is byte-identical, with only the intended entries changing.

core/gallery 314 passed / 9 skipped, core/http/routes 50 passed, make lint 0 issues.

Assisted-by: Claude:claude-opus-4-8 [Claude Code]

Second variant-grouping sweep. QAT and APEX builds are now treated as
quantization techniques rather than distinct weights, per maintainer
ruling, so they group with their base entry instead of standing alone.

Adds 15 new families: quantization and serving-config pairs for
llama-3.2-1b/3b-instruct, dolphin-2.9-llama3-8b, phi-2-chat, ideogram-4,
meta-llama-3.1-8b-instruct, omnivoice-cpp and qwen3-tts-cpp; the gemma-3
4b/12b/27b QAT families; and three cross-backend pairs (silero-vad plus
its sherpa-onnx build, and the vibevoice TTS and ASR builds shared
between the vibevoice-cpp and crispasr backends). The cross-backend
pairs are the first entries that meaningfully exercise engine-preference
ranking during auto-selection.

Restructures four gemma-4 families (31b-it, 26b-a4b-it, e2b-it, e4b-it).
Those bare entries were skipped by the first sweep, which left a QAT
build as parent by default. The bare entry is what installs when nothing
else fits, so it reclaims the parent slot and the former parent becomes
a plain target. Every pre-existing relationship is preserved; nothing is
dropped and nothing nests. gemma-4-12b-it has no bare entry, so it is
left as is.

qwen3-tts-cpp is a YAML anchor with nine merging children, so the five
children that did not already override variants get an explicit empty
list to stop them inheriting the parent's.

Abliterated builds stay excluded: abliteration edits the weights to
remove refusal behaviour, which makes them a different model rather than
another build of the same one.

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
@mudler
mudler merged commit f381844 into master Jul 20, 2026
67 checks passed
@mudler
mudler deleted the variants-sweep-2 branch July 20, 2026 17:34
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.

2 participants