Summary
The model catalog ships QWEN3_4B_Q4_K_M with addon: "diffusion", but the entry points at the Qwen3-4B text-generation GGUF (unsloth/Qwen3-4B-GGUF/.../Qwen3-4B-Q4_K_M.gguf). Loading that constant routes a text model to the diffusion addon, so completion can't use it. The instruct variant QWEN3_4B_INST_Q4_K_M is tagged addon: "llm" and works fine.
I hit this in Punt (a P2P betting app built for the Tether Dev Cup) while picking a juror model. Grabbed the base constant first, got the wrong addon, and only figured out what was going on after reading the catalog in dist/.
Environment
@qvac/sdk 0.13.5
- Node.js 22+
- macOS 14 (Darwin 24.6.0)
Where it is in the shipped package
dist/models/registry/models.js, models[21]:
{
name: "QWEN3_4B_Q4_K_M",
registryPath: "unsloth/Qwen3-4B-GGUF/resolve/9b5c4f3506ac99d74e59ecd9aa9abb05537b7f59/Qwen3-4B-Q4_K_M.gguf",
registrySource: "hf",
...
modelId: "Qwen3-4B-Q4_K_M.gguf",
addon: "diffusion",
}
For comparison, models[69]:
{
name: "QWEN3_4B_INST_Q4_K_M",
registryPath: "qvac_models_compiled/ggml/Qwen3-4B/2025-06-27/Qwen3-4B-Q4_K_M.gguf",
registrySource: "s3",
...
addon: "llm",
}
I grepped the whole catalog to be sure this isn't intentional. Every other entry tagged diffusion really is an image or video model (FLUX.2, Wan 2.1, SD 2.1/XL, ESRGAN). Every other QWEN3 entry, including all the multimodal ones, is tagged llm. This one entry is the odd one out.
Expected
addon: "llm" for a Qwen3-4B text-generation GGUF. Or drop the entry entirely if the INST variant is meant to supersede it.
Actual
addon: "diffusion", so loadModel hands the model to the wrong addon.
Workaround
Use QWEN3_4B_INST_Q4_K_M instead. That's what Punt does now:
// (The SDK's QWEN3_4B_Q4_K_M entry is mislabeled addon:"diffusion";
// QWEN3_4B_INST_Q4_K_M is the correct llamacpp one.)
Looks like a one-line fix in the catalog.
Summary
The model catalog ships
QWEN3_4B_Q4_K_Mwithaddon: "diffusion", but the entry points at the Qwen3-4B text-generation GGUF (unsloth/Qwen3-4B-GGUF/.../Qwen3-4B-Q4_K_M.gguf). Loading that constant routes a text model to the diffusion addon, socompletioncan't use it. The instruct variantQWEN3_4B_INST_Q4_K_Mis taggedaddon: "llm"and works fine.I hit this in Punt (a P2P betting app built for the Tether Dev Cup) while picking a juror model. Grabbed the base constant first, got the wrong addon, and only figured out what was going on after reading the catalog in
dist/.Environment
@qvac/sdk0.13.5Where it is in the shipped package
dist/models/registry/models.js, models[21]:For comparison, models[69]:
I grepped the whole catalog to be sure this isn't intentional. Every other entry tagged
diffusionreally is an image or video model (FLUX.2, Wan 2.1, SD 2.1/XL, ESRGAN). Every other QWEN3 entry, including all the multimodal ones, is taggedllm. This one entry is the odd one out.Expected
addon: "llm"for a Qwen3-4B text-generation GGUF. Or drop the entry entirely if the INST variant is meant to supersede it.Actual
addon: "diffusion", soloadModelhands the model to the wrong addon.Workaround
Use
QWEN3_4B_INST_Q4_K_Minstead. That's what Punt does now:Looks like a one-line fix in the catalog.