Supported Models¶
mlxcel detects the model architecture automatically from checkpoint metadata. The model_type field in config.json is the primary generation-family key; architectures, sentence-transformers pooling layouts, and classifier heads additionally distinguish embedding and reranker checkpoints. Run mlxcel arch to inspect the exact matrix compiled into a particular binary.
Browse mlxcel Recipes for model-specific commands and hardware guidance; each supported registry family also has a page at https://mlxcel.ai/en/recipes/families/<id>/.
Current Tensor Parallel Runtime¶
The current tp_size > 1 runtime is available for the following dense text families:
| Family | model_type | Current TP Status | Recipe | Notes |
|---|---|---|---|---|
| Llama family | llama | Supported | Recipe | Dense Llama-style path |
| Qwen 2 / 2.5 | qwen2 | Supported | Recipe | Dense Qwen2/Qwen2.5 path; smallest tied-embedding checkpoints are validated through 24 greedy tokens |
| Qwen 3 | qwen3 | Supported | Recipe | Dense TP path; paged server decode is enabled by default |
| Qwen 3.5 | qwen3_5, qwen3.5, or qwen3_5_text | Supported | Recipe | Dense text backbone only; VLM-packaged checkpoints load through the text TP path for text generation; paged server decode is enabled by default |
| Gemma 3 | gemma3 or gemma3_text | Supported | Recipe | Text-only Gemma 3 path; paged server decode is enabled by default |
| Gemma 4 | gemma4 or gemma4_text | Supported | Recipe | Text path only; dense 31B/E4B and 26B-A4B MoE parity are covered, while E2B-style VLM checkpoints use a conservative TP fallback |
| ERNIE 4.5 | ernie4_5 or ernie4.5 | Supported | Recipe | Dense ERNIE 4.5 only |
| Hunyuan v1 Dense | hunyuan_v1_dense or hunyuan_dense | Supported | Recipe | Dense path only |
Current TP constraints:
--tp-embedding-mode replicated--tp-lm-head-mode replicated- No LoRA adapters with TP
- TP server batching is enabled for dense Llama, Qwen2/2.5, Qwen3, Qwen3.5, Gemma 3 text, Gemma 4 text, ERNIE 4.5, and Hunyuan v1 Dense
- Server decode storage defaults to automatic selection; paged decode is selected by default for Llama, Qwen 3, Qwen 3.5 text, Gemma 3 text, and Llama 4 workers, while other families stay on dense decode unless explicitly opted in
- Gemma 4 E2B-style checkpoints (
num_key_value_heads=1with per-layer inputs + KV sharing) currently run through a conservative fallback and force sequential server execution
Real-model CUDA parity coverage currently includes:
tp=2: Qwen2.5 0.5B (24-token greedy parity)tp=2: Llama, Qwen 3, Qwen 3.5 0.8B and 9B, Gemma 3, Gemma 4 E2B (generation smoke), ERNIE 4.5, Hunyuan v1 Densetp=4: Qwen2.5 7Btp=4: Llama, Qwen 3, Qwen 3.5 4B, 9B, and 27B, Gemma 3, Gemma 4 31B / E4B / 26B-A4B, ERNIE 4.5, Hunyuan v1 Dense- Additional Gemma 4 TP smoke coverage:
gemma-4-e2b-it-8bit,gemma-4-e4b-it-8bit,gemma-4-31b-it-4bit,gemma-4-31b-it-nvfp4(F8_E4M3 weight scales converted to f16 at load time)
Table of Contents¶
- Standard Transformer Models
- Mixture-of-Experts (MoE) Models
- SSM and RNN Models
- Hybrid Models
- Vision-Language Models (VLM)
- Regional and Specialized Models
- Audio Models
- Embedding Models
- Reranker Models
- Object Detection Models
- Dense Prediction and Token-Level Models, including image generation
- Code Models
- Model Detection
Standard Transformer Models¶
| Model Family | Variant | Architecture Key (model_type) | Notes |
|---|---|---|---|
| Llama | Llama ½/3 and Mistral ½ | llama or mistral | Shared dense runtime |
| Llama | Llama 4 | llama4 | MoE variant; VLM auto-detected |
| Qwen | Qwen 2 / 2.5 | qwen2 | |
| Qwen | Qwen 3 | qwen3 | |
| Qwen | Qwen 3.5 | qwen3_5 | Hybrid Transformer + GatedDeltaNet; VLM auto-detected. Qwen3.8-27B checkpoints declare this key and load through the same path. Vendor fine-grained FP8 checkpoints (quant_method: fp8, E4M3 weights with a bf16 inverse scale per 128x128 block) are requantized to MLX mxfp8 at load, one tensor at a time; other FP8 layouts are refused by name |
| Gemma | Gemma 1 | gemma | |
| Gemma | Gemma 2 | gemma2 | |
| Gemma | Gemma 3 | gemma3 or gemma3_text | Text-only or VLM auto-detected |
| Gemma | Gemma 4 | gemma4 or gemma4_text | Text-only or VLM auto-detected |
| Gemma | DiffusionGemma | diffusion_gemma or diffusion_gemma_text | Block-diffusion canvas decoder on the Gemma 4 MoE backbone; image input supported. See Block Diffusion |
| Gemma | Gemma 3n | gemma3n or gemma3n_text | MatMul-Free variant; VLM auto-detected |
| Phi | Phi ½ | phi or phi-msft | |
| Phi | Phi 3 | phi3 | |
| Phi | Phi 3 Small | phi3small | |
| Mistral | Mistral 3 | mistral3 | Text-only or VLM auto-detected |
| Mistral | Mistral 4 | mistral4 | MLA text model |
| Youtu | Youtu-LLM | youtu or youtu_llm | Text-only Multi-head Latent Attention decoder in the DeepSeek-V2 layout; the same decoder serves as the Youtu-VL text tower. rope_interleave selects the rotary pair layout, rope_scaling is accepted only as the identity YaRN block (factor: 1.0), and q_lora_rank may be absent |
| Ministral | Ministral 3 | ministral3 | |
| Nemotron | Nemotron | nemotron | |
| DeepSeek | DeepSeek (v1) | deepseek | |
| DeepSeek | DeepSeek V2 | deepseek_v2 | MoE |
| DeepSeek | DeepSeek V3 | deepseek_v3 | MoE |
| DeepSeek | DeepSeek V3.2 | deepseek_v32 or deepseek_v3.2 | MoE |
| DeepSeek | DeepSeek V4 | deepseek_v4 | Text model. HyperConnections replace the plain residual stream; attention uses one shared 512-wide KV head across 64 query heads in a 128-token rotating window with per-head softmax sinks; compress_ratios selects local, pooled, or sparse-compressed attention per layer, with a top-k indexer on the sparse layers; the first three MoE layers route by hashing the token id (tid2eid). Validated on mlx-community/DeepSeek-V4-Flash-4bit |
| Cohere | Command-R | cohere | |
| Cohere | Command-R v2 | cohere2 | |
| InternLM | InternLM 2 | internlm2 | |
| InternLM | InternLM 3 | internlm3 | |
| OLMo | OLMo 1 | olmo | |
| OLMo | OLMo 2 | olmo2 | |
| OLMo | OLMo 3 | olmo3 | |
| SmolLM | SmolLM 3 | smollm3 | |
| MiniCPM | MiniCPM | minicpm | |
| MiniCPM | MiniCPM 3 | minicpm3 | |
| StableLM | StableLM | stablelm | |
| Solar | Solar Open | solar_open | |
| MiMo | MiMo | mimo | |
| Step | Step 3.5 | step3p5 | |
| GPT | GPT-2 | gpt2 | Learned absolute position embeddings; Conv1D-layout weights |
| GPT | GPT-BigCode | gpt_bigcode | Multi-query attention code model |
| GPT | GPT-NeoX | gpt_neox | Parallel attention/MLP residual |
| Kyutai | Helium | helium | |
| Apple | OpenELM | openelm | Layer-wise scaled attention and FFN widths |
| TeleAI | TeleChat3 | telechat3 | |
| IBM | Granite | granite | Dense Granite text model |
| Swiss AI | Apertus | apertus | Dense text model |
| ByteDance | Seed-OSS | seed_oss | Dense text model |
| BitNet | BitNet b1.58 | bitnet | Ternary-weight architecture |
| nanochat | nanochat d20 / d32 | nanochat | GPT-2-shaped decoder with weightless RMSNorm, mirrored RoPE, a relu(x)^2 MLP, and logits soft-capped at 15. Weights stay bf16 at load (no f16 conversion). The prompt must start with <\|bos\|>: the shipped chat template adds it, and with --no-chat-template write it literally. Generation stops on <\|assistant_end\|>. Validated on madmag77/nanochat-d20-q8-mlx and dnakov/nanochat-d20-mlx. Not tensor-parallel enabled |
Mixture-of-Experts (MoE) Models¶
| Model Family | Variant | Architecture Key (model_type) | MoE Details |
|---|---|---|---|
| Mixtral | Mixtral 8x7B / 8x22B | mixtral | Sparse MoE |
| Qwen | Qwen 2 MoE | qwen2_moe | Sparse MoE |
| Qwen | Qwen 3 MoE | qwen3_moe | Sparse MoE |
| Qwen | Qwen 3.5 MoE | qwen3_5_moe | Hybrid MoE + GatedDeltaNet; VLM auto-detected |
| GPT-OSS | GPT-OSS MoE | gpt_oss | |
| MiniMax | MiniMax | minimax | Sparse MoE |
| OLMoE | OLMoE | olmoe | Sparse MoE |
| Phi | Phi MoE | phimoe | |
| GLM | GLM 4 MoE | glm4_moe | |
| GLM | GLM 4 MoE Lite | glm4_moe_lite | GLM-4.7-Flash. Its next-token-prediction layer runs as a separate MTP drafter produced by mlxcel split-mtp; see MTP and DFlash |
| GLM | GLM MoE DSA | glm_moe_dsa | Dual-sparse attention |
| ERNIE | ERNIE 4.5 MoE | ernie4_5_moe or ernie4.5_moe | |
| Hunyuan | Hunyuan MoE | hunyuan (with num_experts > 1) | Auto-detected from config |
| ExaOne | ExaOne MoE | exaone_moe | |
| Mellum | Mellum / Mellum 2 | mellum | JetBrains code model; sliding/full hybrid attention with QK-RMSNorm and a sparse softmax-routed MoE in every layer |
| LLaDA-2 | LLaDA-2 MoE | llada2_moe | Masked-diffusion LLM with a DeepSeek-V3-style MoE FFN; see Block Diffusion |
| Cohere | Command MoE | cohere2_moe | Sparse MoE on the Command-R v2 backbone |
| Databricks | DBRX | dbrx | Sparse MoE |
| Dots | dots.llm1 | dots1 | Sparse MoE |
| Ant Group | Ling / Bailing MoE | bailing_moe | Sparse MoE |
| Arcee | AFMoE | afmoe | Sparse MoE |
| Kuaishou | Klear | Klear | Sparse MoE. The published checkpoints capitalize the key; detection lowercases model_type, so Klear and klear both load |
| MiniMax | MiniMax-M3 | minimax_m3 | Hybrid dense/MoE with block-sparse attention; VLM auto-detected |
| Poolside | Laguna XS 2.1 / XS.2 / S 2.1 | laguna | Code models: full-attention layers (YaRN, partial rotary) interleaved with 512-token sliding-window layers, per-head softplus attention output gate, sigmoid-routed top-k MoE with a shared expert. The published NVFP4 checkpoints keep the experts in the compressed-tensors nvfp4-pack-quantized layout, which is transcoded to MLX NVFP4 at load; pre-stacked MLX conversions and per-expert bf16 exports load through the same path. No tensor parallelism. A Laguna DFlash drafter is supported |
| Phi | Phixtral | phi-msft with num_local_experts > 1 | Mixtral-style sparse MoE on the Phi-2 parallel-residual backbone. There is no phixtral key: dense Phi-2 declares the same phi-msft, so the two are told apart by num_local_experts. Attention runs in float32 |
| Xiaomi | MiMo v2 Flash | mimo_v2_flash | Hybrid sliding/full attention sparse decoder: 48 layers, 256 routed experts with top-8 selection, a noaux_tc sigmoid router whose correction bias applies to selection only, separate Q/K (192) and V (128) head widths, partial per-layer RoPE, and learned attention sinks on sliding layers. Validated on mlx-community/MiMo-V2-Flash-4bit (161.8 GiB resident on a 512 GB M3 Ultra) |
SSM and RNN Models¶
| Model Family | Variant | Architecture Key (model_type) | Notes |
|---|---|---|---|
| Mamba | Mamba 1 | mamba or falcon_mamba | State Space Model |
| Mamba | Mamba 2 | mamba2 | Structured SSM |
| RWKV | RWKV 7 | rwkv7 | Linear-time RNN |
| RecurrentGemma | Griffin | recurrent_gemma or griffin | Recurrent + MLP layers |
Hybrid Models¶
Hybrid models combine multiple architectural paradigms (e.g., Transformer attention layers with SSM or linear-attention layers).
| Model Family | Variant | Architecture Key (model_type) | Hybrid Type |
|---|---|---|---|
| Jamba | Jamba, AI21 Jamba-Reasoning | jamba | Transformer + Mamba blocks. AI21-Jamba-Reasoning-3B always primes <think>, so set max_tokens to at least 1024; see the note below |
| Nemotron-H | Nemotron-H | nemotron_h | Transformer + SSM |
| Nemotron-NAS | Nemotron-NAS | nemotron-nas | Neural Architecture Search hybrid |
| Qwen 3 Next | Qwen 3 Next | qwen3_next or qwen3next | Transformer + GatedDeltaNet |
| Ling / Ring | Bailing linear-attention MoE | bailing_moe_linear | Transformer + gated linear attention, with a sparse MoE FFN. Chunked closed-form prefill is the default; see MLXCEL_BAILING_LINEAR_CHUNKED_PREFILL |
| Kimi-Linear | Kimi-Linear | kimi_linear | Linear Transformer |
| Kimi K3 | Kimi K3 | kimi_k3 (with text_config.model_type: kimi_linear) | Kimi Delta Attention layers with NoPE MLA at every fourth layer, a latent MoE (896 experts plus two shared experts), and Attention Residual blocks; the compressed-tensors mxfp4 experts are stacked into MLX mxfp4 at load. Single-process only: the full 93-layer checkpoint is about 1.4 TB at 4 bits, and --pp-size / --pp-layers refuse this family. Chunked prefill is disabled for it. The tokenizer is a tiktoken vocabulary, and the XTML chat format is rendered in code because the checkpoint ships no Jinja template. A checkpoint that also carries the vision tower loads as the Kimi K3 VLM |
| Longcat Flash | Longcat Flash | longcat_flash | Long-context flash attention hybrid |
| Longcat Flash Ngram | Longcat Flash Ngram | longcat_flash_ngram | With n-gram speculative decoding |
| Falcon | Falcon-H1 | falcon_h1 | Parallel Mamba2 + attention hybrid |
| Liquid AI | LFM2 | lfm2 | Short convolution + attention hybrid |
| Liquid AI | LFM2-MoE | lfm2_moe | LFM2 hybrid with sigmoid-gated experts |
| Preferred Networks | PLaMo 2 | plamo2 | Mamba + attention hybrid |
| IBM | Granite 4 | granitemoehybrid | Mamba2 + attention interleaved hybrid |
AI21-Jamba-Reasoning-3B starts every reply in reasoning_content; the answer reaches content once the model writes </think>, and a max_tokens budget that ends first returns an empty content with finish_reason: "length". Short factual answers take 150 to 450 completion tokens at temperature 0. In multi-turn chats, echo reasoning_content back with each assistant turn, or rely on the server's reasoning re-echo while the prompt cache is on; otherwise the chat template renders earlier turns differently and the prompt cache misses.
Vision-Language Models (VLM)¶
VLMs are automatically distinguished from their text-only counterparts by the presence of a vision_config section in config.json.
A checkpoint with a VLM model_type loads text-only when vision_config is absent, null, or {}, when language_model_only is true, or when its weights carry no vision tower (vision_tower.*, model.visual.*, and similar prefixes). Text requests run normally; an image or video request fails, on the Qwen-VL families with model <path> was loaded without a vision tower (text-only checkpoint). For Qwen 3.5, language_model_only: true wins even when vision weights ship (a notice goes to stderr), and a non-boolean value is rejected at load.
| Model Family | Variant | Architecture Key (model_type) | Vision Encoder |
|---|---|---|---|
| Gemma 3 VLM | Gemma 3 Vision | gemma3 with vision_config | SigLIP 2 |
| Gemma 3n VLM | Gemma 3n Vision | gemma3n with vision_config | MobileNetV5 |
| Gemma 4 VLM | Gemma 4 Vision | gemma4 with vision_config | Gemma 4 ViT |
| Gemma 4 Unified | Gemma 4 Unified | gemma4_unified | Encoder-free patch projection for text + vision + audio. The only family that accepts video and audio in the same prompt |
| Llama 4 VLM | Llama 4 Scout / Maverick | llama4 with vision_config | Llama 4 ViT |
| Qwen2-VL | Qwen2-VL | qwen2_vl | Custom ViT with MRoPE |
| Qwen2.5-VL | Qwen2.5-VL | qwen2_5_vl | Windowed ViT with MRoPE |
| Qwen3-VL | Qwen3-VL | qwen3_vl | ViT + DeepStack interleaved MRoPE |
| Qwen3-VL-MoE | Qwen3-VL-MoE | qwen3_vl_moe | Qwen3-VL + MoE text backbone |
| Qwen 3.5 VLM | Qwen 3.5 VLM | qwen3_5 with vision_config | Qwen3-VL encoder. MTP speculative decoding applies to text-only requests; a request with images or video declines MTP and decodes plainly |
| Qwen 3.5 MoE VLM | Qwen 3.5 MoE VLM | qwen3_5_moe with vision_config | Qwen3-VL encoder + MoE |
| MiMo-V2 | MiMo-V2 / V2.5 / V2.6 | mimo_v2 | MiMo v2 Flash text decoder plus the mimovl vision tower: fused per-shard QKV with per-shard FP8 scale grids, MXFP4 routed experts, learned per-head sinks on windowed blocks, and the shared Qwen2.5-VL image and video runtime. Audio is not supported. Real-checkpoint validation is pending because the published checkpoint does not fit the development machines; loader and fixture-parity tests cover the layouts |
| Qwen3.8-Flash-Next | Qwen 3.8 Flash-Next (Qwen4-Exp) | qwen4_exp | Qwen4-Exp vision tower over a Qwen 3.5-style GatedDeltaNet hybrid text stack: 512-expert top-10 MoE with a sigmoid-gated shared expert, zero-centered RMSNorm weights, low-rank gated hyper-connections, and interleaved MRoPE. Qwen Sparse Attention runs with native Metal prefill and sparse decode. Accepts text, image, and video input. An external n-gram table (text_config.ple_storage) stays on disk behind a bounded row cache, routed experts stream from the SSD on Metal, and prompt-cache snapshots restore the whole per-sequence state. Pairs with its native MTP head as a drafter, either embedded in the target conversion or split out. FP8 checkpoints are refused at load |
| Cohere Compass | North-Micro-Vision | cohere_compass | Qwen3-VL tower with DeepStack mergers + Command-style parallel decoder |
| Youtu-VL | Youtu-VL | youtu_vl | SigLIP2 windowed-attention encoder + DeepSeek-V3-style MLA |
| InternVL | InternVL Chat | internvl_chat | InternViT + pixel-shuffle connector + Qwen2 text |
| LLM-jp-VL | LLM-jp-4 VL / Jagle-VL | llmjpvl | SigLIP2-so400m + InternVL-style dynamic tiling + pixel-shuffle connector; Llama or Qwen3 text backbone |
| LLaVA | LLaVA / LLaVA-Next | llava or llava_next | CLIP or SigLIP + Llama/Qwen2 |
| LLaVA-Bunny | LLaVA-Bunny | llava_bunny, bunny-llama, llava-qwen2 | SigLIP + Qwen2 |
| Aya Vision | Aya Vision | aya_vision | SigLIP + Cohere2 |
| PaliGemma | PaliGemma ½ | paligemma | SigLIP + Gemma |
| Pixtral | Pixtral | pixtral | ViT with 2D RoPE + Mistral |
| Mistral 3 VLM | Mistral 3 Vision | mistral3 with vision_config | Pixtral ViT + PatchMerger |
| Phi 3.5 Vision | Phi 3.5 Vision | phi3_v | CLIP + Phi 3 |
| Phi 4 MM | Phi 4 Multimodal | phi4mm | SigLIP2 NaFlex + Phi4 (image only) |
| Phi 4 SigLIP | Phi 4 Reasoning Vision | phi4-siglip | SigLIP2 NaFlex + Phi3-style text |
| Molmo | Molmo v1 | molmo | CLIP ViT + attention pooling + OLMo-style text |
| Molmo2 | Molmo2 | molmo2 | Custom ViT + attention pooling |
| Molmo-Point | Molmo-Point | molmo_point | Molmo2-style vision stack with point-prediction head |
| MiniCPM-o | MiniCPM-o | minicpmo | Dynamic SigLIP + resampler + Qwen3-VL text |
| MiniCPM-V 4.6 | MiniCPM-V 4.6 | minicpmv4_6 | SigLIP + VitMerger + Merger + Qwen3.5 text |
| Moondream3 | Moondream3 | moondream3 | Custom ViT + custom text decoder |
| Moondream2 | Moondream2 | moondream2 (also moondream1) | Moondream3 ViT + dense Phi text |
| Nemotron H Nano Omni | Nemotron H Nano Omni | nemotron_h_nano_omni or nemotronh_nano_omni_reasoning_v3 | Vision-capable Nemotron-H variant; optional audio path is loaded when present |
| Llama 3.2 Vision | mllama | mllama | Tiled ViT with gated cross-attention layers spliced into the Llama-3 text backbone |
| GLM-4V | GLM-4V | glm4v | GLM-4V ViT (3D patch embedding, SwiGLU merger) + GLM-4 text with sectioned even/odd MRoPE |
| GLM-4V MoE | GLM-4.5V-class | glm4v_moe | GLM-4V ViT + GLM-4 MoE text with sectioned half-split MRoPE |
| GLM-OCR | GLM-OCR | glm_ocr | GLM-4V-style ViT (OCR-oriented) + GLM-4 text |
| SmolVLM / SmolVLM2 / Idefics3 | SmolVLM family | smolvlm, smolvlm2, or idefics3 | SigLIP + pixel-shuffle token compression + Llama/SmolLM2 text; one shared runtime for both on-disk layouts |
| Idefics2 | Idefics2 | idefics2 | SigLIP + perceiver-resampler connector + Mistral text |
| PaddleOCR-VL | PaddleOCR-VL | paddleocr_vl | NaViT dynamic-resolution SigLIP-style encoder + ERNIE-4.5 text with MRoPE |
| dots.ocr | dots.ocr | dots_ocr | dots_vit dynamic-resolution ViT + Qwen2 text decoder |
| Kimi-VL / Kimi-VL 2.5 | Kimi-VL | kimi_vl (also kimi_k25) | MoonViT native-resolution encoder + DeepSeek-V3-style MoE text. Accepts video as well as images: 3D MoonViT patch embedding covers both |
| Kimi K3 VLM | Kimi K3 | kimi_k3 with vision_config and vision_tower.* tensors | MoonViT3D native-resolution tower + patchmergerv2 projector in front of the Kimi K3 text backbone. No native video path, so a clip goes through the video-frames fallback as ordered images. One request's images may use at most 32768 media tokens (MLXCEL_KIMI_K3_MAX_MEDIA_TOKENS) |
| LFM2-VL | LFM2-VL | lfm2_vl or lfm2-vl | Packed-patch SigLIP2 ViT + pixel-unshuffle projector + LFM2 hybrid text |
| Granite Vision | Granite Vision | granite_vision (or llava_next with a Granite text config) | SigLIP with four intermediate feature taps + Granite text |
| Granite 4 Vision | Granite 4 Vision | granite4_vision | SigLIP + eight window-QFormer projectors feeding a Granite 4 hybrid text backbone |
| DeepSeek-OCR | DeepSeek-OCR | deepseekocr | SAM-style ViT-B + CLIP-style ViT-L + DeepSeek MoE decoder |
| DeepSeek-OCR 2 | DeepSeek-OCR 2 | deepseekocr_2 | SAM-style ViT-B + Qwen2-shaped query resampler + DeepSeek MoE decoder |
| GOT-OCR 2.0 | GOT-OCR2_0 | GOT | SAM-style ViT-B on a fixed 1024x1024 canvas (256 feature rows per page) + Qwen2-0.5B decoder. One image per request; the checkpoint ships no chat template, so mlxcel supplies the fixed OCR conversation and the instruction text selects the mode (OCR:, OCR with format:, a [x1,y1,x2,y2] region, or a [red] color-marked region) |
| DeepSeek-VL2 | DeepSeek-VL2 | deepseek_vl_v2 (also deepseek_vl2) | SigLIP-style ViT + DeepSeek-V2 MoE (MLA) decoder |
| FastVLM | FastVLM | fastvlm or llava_qwen2 | FastViTHD hybrid encoder + Qwen2 text |
| ERNIE-4.5 MoE VL | ERNIE-4.5 MoE VL | ernie4_5_moe_vl or ernie4.5_moe_vl | DFNRope ViT + variable-resolution resampler + modality-split MoE text with 3D MRoPE |
| Hunyuan-VL | Hunyuan-VL (e.g. HunyuanOCR) | hunyuan_vl | ViT with a perceive merger + Hunyuan dense text with XD-RoPE |
| Qwen3-Omni MoE | Qwen3-Omni (thinker + talker) | qwen3_omni_moe | Qwen3-VL-MoE vision/text stack + audio tower; optional speech output (talker + code2wav vocoder) via --output-audio |
| MiniMax-M3-VL | MiniMax-M3-VL | minimax_m3_vl | ViT + MiniMax-M3 hybrid dense/MoE text with block-sparse attention |
| Unlimited-OCR | Unlimited-OCR | unlimited_ocr (also unlimited-ocr) | OCR-oriented encoder + ring sliding decode cache |
| Florence-2 | Florence-2 base-ft | florence2 | DaViT tower + BART encoder-decoder. Encoder-decoder (seq2seq), not autoregressive; see Vision-Language Models |
| LocateAnything | LocateAnything 3B | locateanything | MoonViT native-resolution tower + Qwen2 text. Generative grounding: boxes arrive as <box> and coordinate tokens in the ordinary text stream |
| Falcon-OCR | Falcon-OCR 300M | falcon_ocr | No vision tower. Each 16x16 patch goes through one linear projector straight into the token stream of a single hybrid-mask decoder |
| Jina VLM | jina-vlm | jvlm (also jina_vlm) | SigLIP-so400m-class ViT + Molmo-style pooling connector + Qwen2-class text with an OLMo tensor layout |
| Muse Glimmer | Meta Muse Glimmer 30B | muse_glimmer | Dense BF16 and pinned affine Q4 checkpoints; single-process only (no TP or PP). Speculative decoding runs only with its own DFlash assistant drafter on mlxcel-server, for text-only requests |
| Step | Step-3.7 | step3p7 | Perception encoder ViT + Step-3.5 MoE text |
| Mage-VL | Mage-VL 4B | mage_vl (MageVLForConditionalGeneration) | Mage-ViT tower with Qwen2-VL smart_resize (patch 16, 2x2 merge) + Qwen3-4B decoder with 1-D RoPE. Image input only. Validated on microsoft/Mage-VL and mlx-community/Mage-VL-8bit. Codec-native video, frame-sampled video, LoRA, and tensor parallelism are not supported |
| Inkling | Inkling (text) / Inkling VLM | inkling_mm_model or inkling | Hybrid sliding and global NoPE attention with learned banded relative-position logits and routed plus shared experts. Loads bf16/f32 weights, ModelOpt NVFP4 expert planes, and pre-converted affine 4-bit experts. The VLM form (detected from vision_config plus vision weights) takes image, video, and audio (dMel) input. Both forms have a native chained-MTP drafter (see MTP and DFlash) |
| Nemotron-Parse | Nemotron-Parse 2.0 | nemotron_parse | C-RADIOv2-H tower + mBART decoder. Encoder-decoder (seq2seq) document OCR and layout model with its own CLI driver and single-stream server worker, like Florence-2. One image per request; see Vision-Language Models |
Audio Models¶
Audio-only checkpoints do not use the text-generation worker. Start a dedicated server and use the OpenAI Audio API, or for Nemotron VoiceChat the Realtime VoiceChat API.
| Model | Detection | Direction | Current limits |
|---|---|---|---|
| Whisper | model_type: whisper (whisper) | Speech-to-text transcription and English translation | WAV input, fp16/f32 weights, greedy decoding |
| Kokoro-82M | istftnet config or kokoro-v1_0.safetensors | Text-to-speech | American-English G2P, WAV output, voice packs under voices/ |
| Nemotron VoiceChat | model_type: nemotron_voicechat | Full-duplex speech-to-speech (16 kHz in, 22.05 kHz out, 80 ms frames) | Built-in Aria voice only, batch 1; offline through mlxcel generate --audio, served only on the /v1/realtime WebSocket, one session at a time |
Regional and Specialized Models¶
| Model Family | Variant | Architecture Key (model_type) | Notes |
|---|---|---|---|
| Baichuan | Baichuan M1 | baichuan_m1 | |
| GLM | GLM 4 | glm4 | |
| ERNIE | ERNIE 4.5 | ernie4_5 or ernie4.5 | |
| Hunyuan | Hunyuan Dense | hunyuan_v1_dense or hunyuan_dense | |
| Hunyuan | Hunyuan (auto) | hunyuan (with num_experts == 1) | Dense auto-detected |
| ExaOne | ExaOne | exaone | Korean LLM |
| ExaOne | ExaOne 4 | exaone4 |
Embedding Models¶
Embedding checkpoints run through mlxcel embed or the embedding server routes rather than text generation. Detection checks encoder-only model_type values, known embedding architectures, a sentence-transformers Pooling module, or 1_Pooling/config.json. See Embedding and Reranking APIs for serving and Embeddings and Reranking for the model contracts.
Dense Text Embeddings¶
| Family | Detection key | Pooling | Validated checkpoint | Recipe |
|---|---|---|---|---|
| BERT / MiniLM | bert | Checkpoint, commonly mean | sentence-transformers/all-MiniLM-L6-v2; intfloat/multilingual-e5-small | Recipe |
| XLM-RoBERTa | xlm-roberta | Checkpoint, commonly CLS | BAAI/bge-m3 | Recipe |
| ModernBERT | modernbert | Checkpoint or mean default | nomic-ai/modernbert-embed-base | Recipe |
| SigLIP text tower | siglip | Fixed last position | google/siglip-base-patch16-224; text only | Recipe |
| EmbeddingGemma | gemma3_text or bidirectional gemma3 architecture | Mean plus two dense projections | mlx-community/embeddinggemma-300m-4bit | Recipe |
| Qwen3-Embedding | qwen3 embedding architecture/layout | Last token | Qwen/Qwen3-Embedding-0.6B | Recipe |
| Bidirectional Llama / LLM2Vec | llama_bidirec or LlamaBidirectionalModel | Mean | nvidia/llama-nemotron-embed-1b-v2 | Recipe |
| Nemotron-3-Embed | Non-causal ministral3 | Mean | nvidia/Nemotron-3-Embed-1B-BF16 | Recipe |
| LFM2.5-Embedding | lfm2 with Lfm2BidirectionalModel | CLS | LiquidAI/LFM2.5-Embedding-350M | Recipe |
Multimodal and Late-Interaction Embeddings¶
| Family | Detection key | Output | Validated checkpoint | Recipe |
|---|---|---|---|---|
| Qwen3-VL-Embedding | qwen3_vl embedding architecture | One pooled text or image vector | Qwen/Qwen3-VL-Embedding-2B | Recipe |
| Llama-Nemotron-VL-Embed | llama_nemotron_vl | One pooled text or image vector | nvidia/llama-nemotron-embed-vl-1b-v2 | Recipe |
| EmbeddingGemma 2 | embedding_gemma2, embedding_gemma2_text, or EmbeddingGemma2Model | One pooled text vector, or an image vector when the checkpoint carries a vision tower; in-model projection 512 to 768, mean pooling, L2 normalization, Matryoshka 768 / 512 / 256 / 128 | google/embeddinggemma-2, mlx-community/embeddinggemma-2-bf16 (bf16 kept at load) | Recipe |
| ColIdefics3 | idefics3, ColIdefics3 | One normalized 128-dimensional vector per token | vidore/ColSmolVLM-Instruct-256M-base with merged retrieval weights | Recipe |
| ColQwen2.5 | qwen2_5_vl or colqwen2 retrieval architecture | One normalized 128-dimensional vector per token | vidore/colqwen2.5-base with merged retrieval weights | Recipe |
Qwen3-VL-Embedding, Llama-Nemotron-VL-Embed, and EmbeddingGemma 2 return a single vector for an image; an EmbeddingGemma 2 checkpoint without a vision tower, such as embedding_gemma2_text, refuses image inputs. ColIdefics3 and ColQwen2.5 return a token-vector matrix and must be ranked with MaxSim. A LoRA-only late-interaction repository is rejected; merge the adapter into a complete checkpoint first. The SigLIP embedding family exposes only its text tower.
Reranker Models¶
Rerankers are served through mlxcel rerank or any of the reranking routes. All supported kinds return a relevance score in [0, 1].
| Family | Selection | Score | Validated checkpoint | Recipe |
|---|---|---|---|---|
| BERT cross-encoder | One-label BertForSequenceClassification; auto-detected from -m | sigmoid(logit) | cross-encoder/ms-marco-MiniLM-L6-v2 | Recipe |
| XLM-RoBERTa cross-encoder | One-label XLMRobertaForSequenceClassification; auto-detected from -m | sigmoid(logit) | BAAI/bge-reranker-v2-m3 | Recipe |
| ModernBERT cross-encoder | One-label ModernBertForSequenceClassification; auto-detected from -m | sigmoid(logit) | Alibaba-NLP/gte-reranker-modernbert-base | Recipe |
| Qwen3 generative reranker | Explicit --reranker-model | sigmoid(logit("yes") - logit("no")) | mlx-community/Qwen3-Reranker-0.6B-4bit | Recipe |
| Qwen3-VL multimodal reranker | Explicit --reranker-model | The same yes/no score over text and images | Qwen/Qwen3-VL-Reranker-2B | Recipe |
Only one-label sequence classifiers can be identified as rerankers from -m alone. A generative checkpoint is indistinguishable from an ordinary generator at detection time, so the explicit secondary flag selects its ranking semantics. Qwen3-VL supports image-bearing queries and documents, processes image rows individually, and does not rerank video.
Object Detection Models¶
Object-detection models do not emit a token stream. Use the dedicated mlxcel detect command, which loads the checkpoint, runs the image processor, and prints bounding boxes in text or JSON format.
| Model Family | Variant | Detection Key | Notes |
|---|---|---|---|
| RT-DETRv2 | RT-DETRv2 / Docling layout checkpoints | architectures: ["RTDetrV2ForObjectDetection"] or compatible RT-DETRv2 config | Supports pre-converted MLX checkpoints and raw HuggingFace RT-DETRv2 weights, which are translated to MLX layout at load time. |
| YOLO11 | OmniParser v2 icon detect | model_type: yolo11 | Fixed OmniParser v2 icon_detect topology: C3k2 backbone, SPPF, C2PSA neck, and an anchor-free DFL head at strides 8, 16, and 32. Accepts converted MLX checkpoints with a matching ch / stride; --threshold defaults to 0.05, --size sets the longest side before letterboxing, and --iou sets NMS (default 0.1, at most 300 boxes). Validated on axiom-of-choice/OmniParser-v2-icon-detect |
Example:
mlxcel detect -m mlx-community/docling-layout-heron-mlx-bf16 -i page.png --format json
mlxcel detect -m axiom-of-choice/OmniParser-v2-icon-detect -i ui.png --size 1280 --format json
Dense Prediction and Token-Level Models¶
Three further families of checkpoints do not produce a chat token stream and each has its own subcommand.
| Surface | Subcommand | Families | Guide |
|---|---|---|---|
| Depth, normals, segmentation, point maps, keypoints, masks, meshes | mlxcel predict | DINOv2, Sapiens2, SAM 3 and SAM 3.1, Video Depth Anything, MoGe3, SAM 3D Objects, SAM 3D Body | Dense Prediction and Vision Tasks |
| Object boxes, optionally with instance masks | mlxcel detect | RT-DETRv2, PP-DocLayoutV3, RF-DETR Base and Seg Small (--masks-dir) | CLI Reference |
| Fixed-label token classification and request-time span extraction | mlxcel tag, mlxcel extract | BERT / XLM-RoBERTa ForTokenClassification, OpenAI Privacy Filter, GLiNER2.5 | Token Classification and Span Extraction |
Image-generation checkpoints are a fourth surface (mlxcel generate-image, and /v1/images/generations and /v1/images/edits behind --image-model). The families are FLUX.2 Klein (flux2), Z-Image (z_image), Prism Bonsai ternary FLUX.2 Klein (bonsai), ERNIE-Image (ernie_image), Mage-Flow (mage_flow), Qwen-Image-2.1 (qwen_image), Ideogram 4 (ideogram4), Ming-Image-0.1-Design (ming_image), and LLaDA-Image (llada_image). Image Generation lists checkpoints, tasks, and default steps.
Page OCR pipelines load a whole document through mlxcel generate rather than through a subcommand. IndicOCR (indic_ocr) pairs a PP-DocLayoutV3 layout stage with a Qwen3.5-0.8B block transcriber for English and 22 Indian languages, and returns Markdown in reading order or a block JSON file:
--table-format markdown renders tables as GitHub-flavored Markdown instead of HTML, and -n/--max-tokens overrides the 2048-token per-block default. A prompt is not needed because each region's instruction comes from its layout class. --layout-detections FILE replays detection JSON from mlxcel detect instead of running the layout stage.
Code Models¶
| Model Family | Variant | Architecture Key (model_type) | Notes |
|---|---|---|---|
| StarCoder | StarCoder 2 | starcoder2 | Code generation |
| IQuest | IQuest-Coder V1 Loop | iquestloopcoder | 40B-Loop Instruct and Thinking checkpoints, also detected from architectures: ["IQuestLoopCoderForCausalLM"]. A Llama-shaped decoder that runs its layers twice over the same tokens with the same weights: in pass 2 each layer mixes attention over pass 1's K/V and a 64-token sliding window over its own K/V through a per-head sigmoid gate. Only loop_num: 2 is accepted. KV cache modes are FP16 only, and --max-kv-size does not bound the pass-1 cache |
| IQuest | IQuest-Coder V1 | iquestcoder | 7B / 14B / 40B Base, Instruct, and Thinking checkpoints on the shared Llama decoder under their own label; also detected from architectures: ["IQuestCoderForCausalLM"] on a checkpoint relabelled llama. A non-null clip_qkv or an active sliding window is refused at load because the shared decoder implements neither. Pipeline parallelism is available; tensor parallelism is not |
Model Detection¶
Architecture detection is performed in src/models/detection.rs. Generation families primarily match config.json::model_type; task-kind detection first checks embedding layouts and supported one-label sequence-classification heads so they are not misrouted to generation.
For models that have both text-only and vision-language variants (Gemma 3, Llama 4, Qwen 3.5, Mistral 3, Gemma 3n), detection is automatic:
Florence-2 is an encoder-decoder family. It is detected the same way, from model_type: florence2, but it does not join the shared autoregressive loop: mlxcel generate drives its own seq2seq pipeline and mlxcel-server serves it through a dedicated single-stream worker rather than the batched or paged scheduler. Nemotron-Parse (model_type: nemotron_parse) follows the same pattern.
For the Hunyuan family, detection is based on num_experts:
Embedding detection also recognizes encoder-only families, known embedding architecture names, a sentence-transformers Pooling module, or 1_Pooling/config.json. A supported ForSequenceClassification architecture always selects reranking before those embedding rules. Generative Qwen3 and Qwen3-VL rerankers require --reranker-model because their configuration is an ordinary generation configuration.
Quantization Formats¶
Quantization is read from the quantization block of config.json. Besides affine 4-bit and 8-bit and the MXFP4, MXFP8, and NVFP4 modes, mlxcel loads affine 1-bit checkpoints (bits: 1, group_size 32, 64, or 128, with .scales and .biases): Metal runs them with fused 1-bit kernels, and CUDA and ROCm run the dequantize graph. Only dense linears and embeddings may be 1-bit; 1-bit MoE expert stacks, 1-bit MLA per-head projections, and 1-bit planes without .biases are refused at load. MLXCEL_ONE_BIT_KERNEL=0 forces the dequantize graph on Metal. Validated on prism-ml/Bonsai-1.7B-mlx-1bit and prism-ml/Bonsai-8B-mlx-1bit (qwen3). See Quantization Support for per-backend behavior.
The fine-grained FP8 hub builds (quantization_config: {"quant_method": "fp8", "fmt": "e4m3", "weight_block_size": [128, 128]}) and llm-compressor's compressed-tensors float-quantized exports both load: mlxcel reconstructs raw E4M3 bytes with their block or channel scale and requantizes each tensor to MLX-native mxfp8, one tensor at a time. Compressed-tensors accepts per-output-channel and block scales; strategy: "tensor" or "group", another num_bits, and dynamic weights are named load errors. Validated on RedHatAI/Qwen3.5-4B-FP8-dynamic against its bf16 base; the per-channel scale is load-bearing, and traces without it produce non-finite logits.
Adding a New Model¶
See the Adding Models guide for the complete checklist.