Supported model families
Which model families run on llamadart, how their chat templates, tool calls and reasoning are handled, and which ones are validated with a real model.
On this page
llamadart has no model allowlist. Any GGUF that the pinned llama.cpp runtime can load will generate text. What varies by family is how chat messages, tool calls and reasoning are formatted and parsed, and that follows from the model's chat template.
How a family is recognized#
-
GGUF: llamadart reads the chat template embedded in the file
(
tokenizer.chat_template, ortokenizer.chat_template.tool_usewhen tools are passed) and detects its format from marker strings, in llama.cpp's priority order. It does not look at the model name or architecture. -
.litertlm: llamadart picks a template from the file name (gemma-4,gemma-3n,gemma-3/gemma-2,qwen3orqwen2.5) for format detection and output parsing. SetModelParams.chatTemplateto override it. On native LiteRT-LM,getMetadata()reports the template the runtime renders astokenizer.chat_template, and the parsing template, when it differs, asllamadart.chat_template.parsing. A bundle with no matching family and no override reports no template. - No match: the template renders as-is, with no tool-call or reasoning parsing. If you pass tools, llamadart adds a generic JSON tool-call instruction instead.
To see what a model will receive, render the prompt with
engine.chatTemplate(...); see
Chat templates and output parsing.
For native .litertlm the prompt comes from the template the runtime renders
for text-only requests: the file-name template for Qwen3 bundles, and the
bundle's embedded template for the others, such as Qwen3.5 and Gemma. Dart
renders it, so it shows what that template produces, not the runtime's exact
bytes; requests with media always use the embedded template. The other result
fields, such as format, still come from the parsing template.
Evidence levels#
-
Validated: the llamadart validation pack
(
packages/llamadart_validation) has a profile that runs the real model. -
Template-tested: CI detects and renders the family's published chat
template, and parses sample output where one is recorded. Templates come
from llama.cpp's template set (release
b10549) and from real GGUF files.
Chat families#
| Family | Artifacts | Detected format | Evidence | Example repo |
|---|---|---|---|---|
| Qwen3.5 | GGUF, .litertlm |
Qwen3-Coder XML (GGUF); bundle's own template (.litertlm) |
Validated: GGUF on CPU, Metal, CUDA, Vulkan and WebGPU; LiteRT-LM on CPU and GPU (no thinking, see below) | ggml-org/Qwen3.5-0.8B-GGUF, litert-community/Qwen3.5-0.8B |
| Gemma 4 | GGUF, .litertlm |
Gemma 4 | Validated: GGUF and LiteRT-LM | unsloth/gemma-4-E2B-it-GGUF, litert-community/gemma-4-E2B-it-litert-lm |
| Qwen3 | GGUF, .litertlm |
Hermes | Validated: LiteRT-LM. Template-tested: GGUF | litert-community/Qwen3-0.6B |
| Gemma 3, 3n, 2 | GGUF, .litertlm |
Gemma (generic JSON tool calls) | Validated: LiteRT-LM. Template-tested: GGUF | litert-community/Gemma3-1B-IT |
| Qwen2.5, QwQ | GGUF | Hermes | Template-tested | Qwen/Qwen2.5-0.5B-Instruct-GGUF |
| Qwen3-Coder | GGUF | Qwen3-Coder XML | Template-tested | — |
| FunctionGemma | GGUF | FunctionGemma | Template-tested | unsloth/functiongemma-270m-it-GGUF |
| Llama 3.1, 3.2, 3.3 | GGUF | Llama 3 | Template-tested | — |
| Mistral Nemo | GGUF | Mistral Nemo | Template-tested | — |
| Mistral Small 3.2, Ministral 3, Devstral | GGUF | Ministral | Template-tested | — |
| DeepSeek R1 distills, V3.1, V3.2, V4 | GGUF | DeepSeek R1, V3, V3.2, V4 | Template-tested | — |
| GLM 4.6, 4.7 Flash | GGUF | GLM 4.5 | Template-tested | unsloth/GLM-4.7-Flash-GGUF |
| Granite 3.3; Granite 4.0, 4.1 | GGUF | Granite; Hermes | Template-tested | — |
| LFM2 8B-A1B, LFM2.5 8B-A1B, LFM2.5 Instruct | GGUF | LFM2 | Template-tested | — |
| Phi-3.5, SmolLM3 | GGUF | None (generic JSON tool calls) | Template-tested | — |
Other families whose published templates are template-tested with their own format: GPT-OSS, Seed-OSS, Nemotron Nano v2, Apertus, Kimi K2 and K3, MiniMax M1, M2 and M3, Command R7B, Cohere2 MoE, MiniCPM5, Hunyuan Hy3, Solar Open, Poolside Laguna, Muse Glimmer, Functionary v3.1 and v3.2, and FireFunction v2. Nemotron 3 Nano and StepFun 3.5 Flash use the Qwen3-Coder XML format; Hermes 2 Pro, Hermes 3, Bielik, Reka Edge, MiMo-VL and Apriel 1.5 use the Hermes format.
"Generic JSON tool calls" means llamadart supplies a fallback protocol when
the selected template has no recognized tool-call format: it asks the model
to answer with a tool_call or response JSON object and parses that. This
is an intentional extension to the tested llama.cpp behavior, not evidence
of native tool support or reliable tool selection. Templates can omit tool
definitions even when a grammar constrains the output. See
Generic JSON fallback
for the
protocol, upstream comparison and prompt limitations.
Where a format defines reasoning markers, such as <think>, Gemma 4's
thought channel or Mistral's [THINK], the parser returns reasoning
separately from the reply. See
Text generation and streaming.
Qwen3.5 .litertlm bundles render their own embedded chat template
(#1134), so
ModelParams.chatTemplate is ignored for these files. The
Qwen3.5-0.8B_int8, Qwen3.5-0.8B-VL_int8 and
Qwen3.5-0.8B_int8_gpu_composite_v0190 bundles (LiteRT-LM 0.19 and earlier)
close an empty <think> block in the generation prompt and never read
enable_thinking, so enableThinking: true produces no reasoning there. The
Qwen3.5-0.8B_dynamic_wi8_afp32 bundle reads enable_thinking
but needs
LiteRT-LM 0.20.0 or later, so it fails on the pinned 0.19.1 runtime. Use the
GGUF for Qwen3.5 thinking; Qwen3 and Gemma 4 .litertlm bundles support it.
Vision and audio#
GGUF vision and audio need a matching projector (mmproj) file. Gemma 4 E2B
(vision and audio), Qwen3.5 (vision) and LFM2-VL (vision) are the families the
examples use. .litertlm bundles process media themselves. See
Multimodal input.
Speech, embeddings and decision models#
| Task | Model | Evidence | Repo |
|---|---|---|---|
| Speech to text (whole file) | Qwen3-ASR 0.6B | Validated | ggml-org/Qwen3-ASR-0.6B-GGUF |
| Speech to text (live, LiteRT-LM) | Moonshine Tiny | Validated | litert-community/moonshine-tiny |
| Text to speech | Qwen3-TTS 1.7B | Validated | ggml-org/Qwen3-TTS-12Hz-1.7B-Base-GGUF |
| Text to speech | LFM3-Audio 2B | Checked on macOS arm64 | LiquidAI/LFM3-Audio-2B-GGUF |
| Text to speech | Soprano 1.1 80M | Checked on macOS arm64 |
Convert
ekwek/Soprano-1.1-80M
(
guide
)
|
| Text to speech | Chatterbox Turbo | Checked on macOS arm64 | ggml-org/chatterbox-turbo-GGUF |
| Text to speech | Chatterbox Multilingual | Checked on macOS arm64 | ggml-org/chatterbox-GGUF |
| Text to speech | Pocket TTS (English) | Checked on macOS arm64 | macolomb/pocket-tts-without-voice-cloning |
| Embeddings | EmbeddingGemma 300M | Used by the basic example | ggml-org/embeddinggemma-300M-GGUF |
| Decision models | Laya (ModernBERT) | Validated | fr0stbit3/laya-gguf |
See Speech to text, Text to speech, Embeddings and Decision models.
If a family behaves oddly#
-
Render the prompt with
engine.chatTemplate(...)and compare it with the model card. - Check which format was detected:
ChatTemplateEngine.detectFormat(template). - For tool calls, try a family listed above as validated before debugging your own prompts.
- Report the model repo and file in a GitHub issue.