Select your Mac CPU model, RAM, and machine count below. Then view what AI models should run well on it — and those that won’t. Updated .
The one with a clean provenance story: Bria trained it exclusively on licensed data, which is the differentiator rather than the pixels. If you are generating images for something commercial, that is a materially different risk position from every other model here, and it is the reason to accept a gated download. Technically it is JSON-native like Ideogram 4, built for long structured captions and professional-grade control. Fibo-lite is a distilled two-stage variant at roughly ten times the speed - 8 steps, no negative prompt - at some cost in quality, but note the Lite weights are CC-BY-NC-4.0, which undoes the commercial argument for using them.
| Context each | KV per stream | Streams |
|---|
Both tiers are supported - --model fibo and --model fibo-lite - along with its edit capability. Lite runs at 8 steps with guidance=1.0 and no negative prompt. Weights are gated.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
MLX-Video's image support covers the FLUX line, not this.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
DiffusionKit implements Stable Diffusion 3 and FLUX.1 only.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The pragmatic default for image generation on a Mac. 4B is small enough that the whole thing sits in a few gigabytes, it edits as well as it generates, and mflux implements it natively. Apple quotes FLUX-dev-4bit as 3.8x faster on M5 than M4, which is the largest generation-over-generation jump of anything on this page.
| Context each | KV per stream | Streams |
|---|
mflux implements FLUX.2 natively - not a diffusers wrapper - and treats it as the fastest and smallest family it carries, with edit capability. mflux-generate and you are going. GGUF builds down to Q5 exist if 7.8 GB of bf16 is more than you want to hold.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
MLX-Video covers image models as well as video, but FLUX.2 is not called out and the project moves in bursts. mflux is the maintained path for this.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
DiffusionKit has not been updated since April 2025 and FLUX.2 shipped in January 2026.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The larger Klein. Better prompt adherence and detail than the 4B at rather more than twice the footprint, and no quantised community builds published yet - so this is a bf16-or-nothing choice today.
| Context each | KV per stream | Streams |
|---|
Same native FLUX.2 implementation as the 4B, just larger. No quantised builds published, so plan for the full 52.9 GB.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Not called out in the project's model list.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Unmaintained since April 2025.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The clearest case on this page for looking past MLX. τ²-Bench 86.4% is the second-highest tool-use number here, Google publishes a quantisation-aware-trained q4_0 GGUF itself at 17.7 GB, and llama.cpp, Ollama and LM Studio all load it today. The MLX side is the worst on this page, and the weights are not why - 4-bit and QAT 4-bit conversions of the 31B both exist. It carries more open mlx-lm issues than any other architecture tracked here, which is exactly the sort of gap that makes an MLX-only view of Apple Silicon misleading.
| Context each | KV per stream | Streams |
|---|
This is the model the MLX-only view of the world gets most wrong. Google publishes a quantisation-aware-trained q4_0 GGUF itself - 17.7 GB, plus a 1.2 GB mmproj for vision - so the recommended download comes from the model's own authors and QAT means less quality lost than a post-hoc 4-bit. Two things to know: sliding-window attention has a report of dropping earlier context, which matters because SWA is how the 256k window is built, and MTP speculative decoding crashes today.
2 open of 3 tracked on this engine
Gemma 4's long context is built on SWA, so this bites exactly where the 256k window is the reason you picked the model. Quality loss, not a crash, which makes it harder to notice.
MTP is the reason to prefer the GGUF build - the checkpoint ships a draft head. With MTP off the model runs, so this costs speed rather than correctness.
Closed 2026-09-03 as not planned, which is a decision not to fix rather than a fix - the vocab assert on Google's own QAT GGUF still stands. Filed against the E2B variant, and it matters because the QAT repo is the recommended download, so this is the default path and not an exotic one. Treat the closed marker as 'no longer being worked on'.
| Context each | KV per stream | Streams |
|---|
ollama run gemma4, with a tag ladder from 10 GB to 24 GB. The single easiest way to get the highest tool-use score on this page running on a Mac.
1 open of 1 tracked on this engine
Resident size climbing during use, on the MLX path. Matters most on a machine sized close to the model.
| Context each | KV per stream | Streams |
|---|
The QAT build is curated under lmstudio-community. Either engine can serve this - the GGUF ladder is the finer-grained one, and 4-bit MLX builds of the 31B do exist - but the MLX side inherits the open mlx-lm defects listed on the mlx-lm tab, so GGUF is the safer default.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
oMLX has real Gemma 4 traffic - a Gemma tool parser, and open reports of a post-0.6.1 performance regression, a practical context wall well short of the advertised 256k, and DFlash disabling the prefix cache. Weights are not the problem: mlx-community ships a 4-bit of the 31B at 18.4 GB and a QAT 4-bit at 28.8 GB. The problem is underneath, on an mlx-lm path with more open issues than any other architecture tracked here.
5 open of 5 tracked on this engine
A wedge, not a slowdown - the server stops doing work with no error.
Turning on the draft head disables the prefix cache, so you trade a decode speedup for full re-prefill every turn. On agent workloads that is a net loss.
The visible reply comes back blank whenever thinking is on.
Gemma 4 advertises 256k. This is where users find the practical ceiling on a Mac, which is set by KV residency rather than by the model.
A version-pinning matter rather than an architecture one, but it means the newest build is not automatically the right one for this model.
| Context each | KV per stream | Streams |
|---|
Fully supported, with a Metal kernel for its per-layer sliding window and YOCO, and automatic prefix caching on by default rather than opt-in. That makes this the cleanest MLX route to Gemma 4 by a distance - mlx-lm cannot load the 31B at all. The example checkpoint in the matrix is the small E2B variant, so verify the 31B before planning around it.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The worst MLX story on the page, and not for want of weights - mlx- community publishes both a 4-bit and a QAT 4-bit of the 31B. gemma4 carries more open mlx-lm issues than any other architecture here: generation hangs at 0% CPU right after prompt processing, thinking- enabled turns come back with reasoning and empty content, one variant will not load at all, and RotatingKVCache blocks --kv-bits on the sliding-window layers this model is built from.
5 open of 5 tracked on this engine
A wedge, not a slowdown - the server stops doing work with no error.
The visible reply comes back blank whenever thinking is on.
The published small-variant quant does not load cleanly.
Gemma 4's sliding-window attention cannot use a quantised KV cache.
Dispatch falls through to qwen3_5 rather than the Gemma path.
Same blockers, one layer down. These are the issues every MLX server inherits.
4 open of 4 tracked on this engine
A wedge, not a slowdown - the server stops doing work with no error.
The visible reply comes back blank whenever thinking is on.
The published small-variant quant does not load cleanly.
Gemma 4's sliding-window attention cannot use a quantised KV cache.
Meta's open agentic model, distilled from the closed Muse Spark - Spark itself is API-only, so this is the one you can actually run. Apache-2.0, with Meta publishing both the GGUF and a draft head, and mlx-community carrying a 4/5/6/8-bit family. It leads MCP Atlas at 75.5 and posts SWE-bench Verified 76.0, but its Terminal-Bench 2.1 of 51.7 trails Qwen3.8-27B's 73.0, so it is stronger at tool orchestration than at raw terminal work. One caution for agent use: Siren AgentDojo puts its prompt-injection attack-success rate at 28.4%.
| Context each | KV per stream | Streams |
|---|
Meta publishes the GGUF itself, alongside an mmproj for vision and a 1.6 GB dflash draft head for speculative decoding. Two caveats that both matter for agents: a roughly 50 KB request has been reported to kill llama-server outright, and the draft head fails to bind on builds that encode a sliding-window key.
3 open of 3 tracked on this engine
Filed on Glimmer. 50 KB is an ordinary agent turn once a file or a diff is in the prompt, and the process dies rather than rejecting the request.
Blocks speculative decoding on exactly the builds that carry a sliding-window key. The target model still runs; you lose the draft head's speedup.
A sampler, not the model. Pin top-p explicitly and it is a non-issue; listed because the default sampler config is what most launchers use.
| Context each | KV per stream | Streams |
|---|
In the library with a full tag ladder from 17 GB to 57 GB. Nothing model-specific to work around.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Curated in both formats. Given that the MLX path has live tool-calling and speculative-decoding reports and the GGUF path does not, being able to switch engines without changing tools is worth something here.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
It loads and it is fast in principle, but the open reports cluster on precisely what you would buy Glimmer for. Tool calling has been reported broken on the oQ4e checkpoint, and DFlash speculative decoding both disables the prefix cache and can end a turn after reasoning without emitting the forced call. Run it with DFlash off and check which quant you pulled.
4 open of 4 tracked on this engine
Tool calling is the whole point of Glimmer - it leads MCP Atlas. Traced to a pre-#1839 quantisation, so check which build you pulled before concluding the model is bad.
Turning on the draft head disables the prefix cache, so you trade a decode speedup for full re-prefill every turn. On agent workloads that is a net loss.
The model finishes its reasoning and stops instead of emitting the call. An agent sees a turn that did nothing, which usually gets retried - so it costs two turns, not one.
The companion report to the two above: on this family the draft head currently costs more than it saves. Run Glimmer without it.
Not in the support matrix. The project asks that unsupported models be raised as issues rather than assumed, which is a reasonable read on how narrow the tested set is.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
A clean pairing: zero open muse_glimmer issues in mlx-lm, a full mlx-community quant family at 4/5/6/8-bit, and a dense 30B that needs none of the hybrid-attention machinery that breaks elsewhere on this engine.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
muse_glimmer has no open issues in mlx-lm. This is the quiet reference path for the model.
1 open of 1 tracked on this engine
The json_tools parser never matches, so the call is returned as plain text. Architecture-independent and specific to agent use.
3B active out of 31B, so decode is bandwidth-cheap and KV space is abundant - the opposite tradeoff to the large GLM tiers, on the same MIT license. The natural cheap tier to route low-stakes work to, and the easiest thing on this page to get running on any engine.
| Context each | KV per stream | Streams |
|---|
First-class: the GGUF lives in ggml-org's own namespace, which is as strong a support signal as this ecosystem gives. 18.2 GB at Q4_K, 31.8 GB at Q8_0, and enough headroom on any machine here that quantisation choice is about quality rather than fit.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
ollama run glm-4.7-flash. The easiest thing on this page to get running, and small enough that the default tag is the right tag.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Curated in both formats under lmstudio-community, MLX at 6-bit and 8-bit included. A good place to measure what the MLX-versus-GGUF gap actually is on your machine, since both builds are one click apart.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
The best match on this page for what oMLX is for. 3B active makes decode cheap, 16.9 GB leaves the rest of the machine for KV blocks, and continuous batching plus the hot/cold cache is exactly the shape of a high-concurrency cheap tier.
1 open of 1 tracked on this engine
Server-wide, not per model. Discovery racing an in-flight load leaks the whole resident model; on a 256 GB machine that is the entire budget gone until you restart.
| Context each | KV per stream | Streams |
|---|
Experimental but on the plain GQA paged path with automatic prefix caching, and mlx-community/GLM-4.7-Flash-4bit is the matrix's own example checkpoint. 3B active over vLLM's continuous batching is a good pairing.
0 open of 1 tracked on this engine
Fixed. PR #648 normalises disabled top_k rows to vocab_size and merged 2026-08-27, closing this. It mattered because continuous batching puts requests with different sampling parameters in one batch, so it was reachable with ordinary mixed traffic. Kept listed so the fix is dated: you want a build from 2026-08-27 or later.
| Context each | KV per stream | Streams |
|---|
3B active, so decode is bandwidth-cheap and KV space is abundant - the opposite tradeoff to the large GLM tiers, on the same mature code path and quant family.
1 open of 1 tracked on this engine
With --reasoning-parser glm4 the entire thinking block lands in content. Non-streaming is unaffected, so it is easy to miss - an agent frontend renders the model's reasoning as the visible reply.
| Context each | KV per stream | Streams |
|---|
Works, and small enough that the CLI is a reasonable way to use it rather than just to test it.
1 open of 1 tracked on this engine
The json_tools parser never matches, so the call is returned as plain text. Architecture-independent and specific to agent use.
The highest agentic score reachable on Apple hardware, and reachable today - just not through the MLX servers, which are blocked three ways. The practical constraints are size and precision: the builds that fit one or two Macs are 1-2 bit, so the honest question is not whether it loads but how much of the model survives the quantisation.
| Context each | KV per stream | Streams |
|---|
The highest agentic score reachable on Apple hardware, and ds4 is how you reach it. The routed IQ2_XXS build is 211.1 GB in one file, Q2_K is 262 GB, Q4_K is 434.2 GB. The interesting mode is tensor parallelism over Thunderbolt: two Macs hold half the routed experts each and work on the same token together, which cuts latency rather than just fitting a bigger model - demonstrated on a pair of 128 GB MacBooks. It needs an IQ2_XXS or Q2_K routed layout, so a routed Q4 GLM is rejected for that mode, and RDMA needs an IPv4 address on the cabled interface itself rather than the bridge.
6 open of 6 tracked on this engine
Most agent clients are stateless - they resend a longer prompt each turn. If the session is not extended, the disk KV cache and prefix reuse stop paying, which is the main reason to run ds4.
Hits the distributed path specifically. If you are splitting DeepSeek V4 PRO or GLM-5.2 across two Macs, this is the first thing to check when the numbers look impossible.
Tokenization is pure fixed cost before any GPU work. An agent that pastes a file into the prompt pays it on every turn, and it does not show up in the tok/s figures.
Swap quantisations and the cache from the old weights can be restored against the new ones. Silent wrong-context, and it survives a restart because that is what the disk cache is for.
Unconfirmed. On a machine where the model already occupies most of RAM, a slow server-side leak ends as an OOM rather than as swap.
You build from a moving main branch. The project describes itself as beta and fast-changing, so pin a commit yourself if you care about reproducibility.
| Context each | KV per stream | Streams |
|---|
glm-dsa is in mainline. The quant ladder is the whole story: IQ1_S 216.7 GB, IQ2_XXS 238.5 GB, Q2_K_XL 253.9 GB, and Q4 tiers from 436 GB up - so a single 256 GB machine reaches only the 1-2 bit tiers, and quality at IQ1 is a real question rather than a footnote. One structural annoyance: DSA has no V cache, but the K and V cache types are validated as a pair, so you cannot quantise K independently on the model with the least memory to spare.
1 open of 1 tracked on this engine
GLM-5.2's DSA attention has no V cache to quantise, but the flag pair is validated as if it did, so you cannot set the K type independently. Costs memory on the model that has the least to spare.
| Context each | KV per stream | Streams |
|---|
In the library. On a single 256 GB machine you will need to be deliberate about the tag - the Q2-class build is already at 254 GB before any KV.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
GGUF engine only in practice. The MLX build exists but mlx-lm cannot load it, and LM Studio's MLX engine is downstream of that.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
oMLX ships fused DSA prefill kernels for GLM-5.2, and with them the difference is not marginal: 845 tok/s versus about 29 on an M3 Ultra. The trap is that a plain pip install does not build them and the fallback is silent, so most people measuring this model on oMLX are measuring the wrong thing. Use the DMG or build with full Xcode. Open on top of that: repetition loops, mxfp4 failing to load on 0.4.4, and prefill throttling near the memory ceiling.
4 open of 5 tracked on this engine
Repetition loops on the flagship model. A loop burns the context window and the wall clock without producing a turn, which on a metered agent is worse than an error.
The published 845 tok/s number depends on the native DSA kernels being compiled in. This thread is where you find out whether your install actually has them - the fallback is roughly 30x slower and uses more memory.
Filed against 0.4.4. Matters because mxfp4 is the smallest faithful GLM-5.2 build, and the alternative affine quants are larger at the same nominal bit width.
Closed as completed in July 2026, with memory also fluctuating between 400 and 520 GB on a 512 GB M3 Ultra. Kept on the list as the reference point for what a healthy GLM-5.2 prefill looks like, and as a reminder that a version bump can cost you a factor of four on this model.
GLM-5.2 leaves very little headroom on any Mac that can hold it, so the adaptive throttle engages in normal use rather than at an extreme.
Not in the matrix. GLM-5.2's DSA attention is a latent-attention variant, and the MLA Metal kernel it would need is an open RFC.
1 open of 1 tracked on this engine
Until this exists, latent-attention models fall back to MLX SDPA with no Metal kernel - which is why the GLM-4.5 row in the support matrix is flagged as slow and untested.
Blocked three ways through mlx-lm: the IndexShare indexers fail to load, DSA top-k evicts attention sinks, and at a measured 395.1 GB it sits squarely inside the >300 GB band where a one-shot mx.eval trips the GPU watchdog at load.
3 open of 3 tracked on this engine
The loader expects a DeepSeek-V3.2-style indexer on every layer, but GLM-5.2's IndexShare places them on a subset. mlx-community/GLM-5.2-mxfp4 aborts with 285 missing parameters.
Past index_topk (2048) the indexer drops the attention sinks and decode collapses into repetition — a sharp cliff, not drift. Hits every sparse-attention model: DeepSeek V3.2/V4 and GLM-5.2 both decode through this module.
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
glm_moe_dsa.py exists, but the model does not load: IndexShare indexers, sink eviction under DSA top-k, and the >300 GB load watchdog.
3 open of 3 tracked on this engine
The loader expects a DeepSeek-V3.2-style indexer on every layer, but GLM-5.2's IndexShare places them on a subset. mlx-community/GLM-5.2-mxfp4 aborts with 285 missing parameters.
Past index_topk (2048) the indexer drops the attention sinks and decode collapses into repetition — a sharp cliff, not drift. Hits every sparse-attention model: DeepSeek V3.2/V4 and GLM-5.2 both decode through this module.
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
The flagship successor to GLM-5.2, and architecturally the same machine: glm_moe_dsa, 78 layers, the same 512-wide latent plus 64 rope, so the KV cost per token is identical at 88 KiB and everything that loaded 5.2 loads this. What changed is the weights and the scores - Terminal-Bench 2.1 goes from 81.0 to 88.2, which puts it within a tenth of Kimi K3 at a quarter of the size. Note the licence is no longer MIT: 5.2 was, 5.3 is a custom zai-org licence, which is a real difference if you are shipping something. At 753B this is a multi-machine model at any usable precision except ds4's Q2, which the project sizes at about 197 GiB and calls resident on a 256 GB machine.
| Context each | KV per stream | Streams |
|---|
ds4 documents GLM-5.3 as a first-class target with its own ownership-aware Q4 path, and publishes antirez/glm-5.3-gguf. Its Q2 build is about 197 GiB and the project calls it resident on a 256 GB machine, which is the only way this model runs on one Mac. Two 128 GB machines over RDMA is the documented alternative. Validated on Metal.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Same glm-dsa architecture as GLM-5.2, already in the arch table, so this loads on a stock build. unsloth publishes the GGUF ladder. The constraint is size rather than support - at 753B every rung above Q2 needs more memory than one Mac has.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Inherits the architecture from llama.cpp. Not in the curated library at this size, so you are importing a GGUF yourself.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Its llama.cpp engine carries the architecture. Nothing curated under lmstudio-community at this size; point it at the unsloth ladder.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
oMLX serves glm_moe_dsa and added GLM-5.3-Flash in v0.6.3, so the architecture is not the obstacle. Nobody has published an MLX conversion of the full 753B model - the hub has GGUF only.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Not in the supported-model matrix, and the compute layer is MLX, so it would need a conversion that does not exist either.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Wraps mlx-lm, which has the class. Same missing-conversion wall.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
mlx-lm has a glm_moe_dsa class, so this would load if a conversion existed. None does at 753B.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Released 2026-08-25 under MIT, which is unusually permissive for a model this size. It is a middle tier rather than a successor to GLM-5.2: 321B against 5.2's 744B, so it is aimed at machines that cannot hold the flagship. The architecture is the interesting part - 45 layers of which only 11 are full attention, the other 34 being KDA linear attention, and those 11 store a 512-wide latent vector rather than separate K and V. That is roughly 11 KB of cache per token, about a fifth of what DeepSeek V4 Flash needs and an eighth of GLM-5.2, which is the whole point of the Flash line. It is also a vision-language model; the config carries image and video token ids alongside the text stack. Weights ship pre-quantised to FP8, with a separate BF16 repository. oMLX vendored support for it in v0.6.3 within two days of release, and is currently the only engine here that can load it - see the engine tabs.
| Context each | KV per stream | Streams |
|---|
oMLX added first-class GLM-5.3-Flash support in v0.6.3 on 2026-08-27, alongside Qwen3.8-Flash-Next, with its own implementation rather than waiting for mlx-lm - so this is the only engine here that can load the model at all. The maintainer's M3 Ultra 512 GB figures are 482 tok/s prefill and 24.1 tok/s generation at 4k, holding 450 and 23.5 at 32k, at about 179 GiB resident. There is a first-party Jundot/GLM-5.3-Flash-oQ4e build. Text and image input; video is unsupported. The open Qwen4-Exp defects on this engine do not apply here - they are in the vendored qwen4_exp path, not the GLM one.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
glm5_next is not in src/llama-arch.cpp. Three competing PRs are open for it - #27752, #27754 and #27773 - which is a good sign of demand and a bad sign for a settled implementation. GGUFs are already published, so the files exist ahead of the loader.
1 open of 1 tracked on this engine
One of three competing open PRs for the same architecture (#27752, #27754, #27773). Quants are already published, so the weights are waiting on whichever of these lands.
Ollama takes this architecture from llama.cpp, so it is blocked until that lands and Ollama bumps. Not in the library.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Both of LM Studio's engines are downstream here: its llama.cpp build has no glm5_next, and its MLX engine has no mlx-lm class to call.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Not in docs/supported_models.md, and the compute layer is MLX, so it inherits the missing model class.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
No glm5_next support. The MLX quants on the hub were converted ahead of any runtime that can execute them.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
No mlx_lm/models/glm5_next.py, so mlx-lm refuses the weights whichever quant you point it at. This is the gate for every MLX engine here.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
ds4 has a dedicated GLM-5.3-Flash implementation, not a generic path: its own graph for the recurrent KDA and sparse DSA layers, its own published artifacts, and a documented section of the README. antirez/glm-5.3-flash-gguf carries Q2 at 96.5 GB, Q4_K at 190.9 GB and FP8 at 327.2 GB, plus a separate 1.1 GB vision encoder that the text GGUF does not include - pass it with --vision. MTP is supported, and two 128 GB machines can run it over RDMA. That makes Q2 the one build here that fits a single 128 GB Mac.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Older now, but a genuinely comfortable fit on any engine: 5.1B active means fast decode and 63-66 GB leaves plenty of KV room. Scores scale with reasoning effort - the figures shown are the high setting; medium gives SWE-bench 52.6% and τ-Bench Retail 62.0%. Apache-2.0. Its one recurring problem is not the model but Harmony: the channel format its tool calls ride on has open parsing defects in more than one engine.
| Context each | KV per stream | Streams |
|---|
63.4 GB in OpenAI's native MXFP4, from ggml-org, plus an EAGLE3 draft model. It runs well; both open problems are in the agent path rather than the model. A large tool list can generate a GBNF grammar that fails to parse, and malformed Harmony channel headers drop tool calls.
1 open of 2 tracked on this engine
Constrained decoding is how tool calls are kept well-formed. Past some number of tools the generated grammar fails to parse - which is to say the failure arrives as you add capability to your agent.
gpt-oss encodes reasoning and tool calls in Harmony channels; a garbled header drops the call. Model specific and parser-side, so it is fixable without touching the weights.
| Context each | KV per stream | Streams |
|---|
ollama run gpt-oss:120b. One of the better-exercised models in the library.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Curated in both formats. 5.1B active keeps decode fast on either engine.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Loads comfortably - 65.8 GB leaves plenty of KV room - but the Harmony plumbing has open defects that specifically cost tool calls: correctly-formed calls addressed to functions.* have been dropped by a stricter channel check, and there is a report of the OpenAI endpoint 500ing while the Anthropic endpoint on the same server works.
2 open of 2 tracked on this engine
A regression from a stricter channel check. Calls that are correctly formed per the Harmony spec get discarded, so the agent sees a turn with no action.
Both endpoints front the same engine, so a client that speaks Anthropic gets a working server and a client that speaks OpenAI does not. Worth knowing which one your agent uses.
| Context each | KV per stream | Streams |
|---|
Listed as experimental, with a dedicated sink-attention kernel and automatic prefix caching. gpt-oss is a shape that trips several engines on this page, so a purpose-built attention path for it is worth something.
0 open of 1 tracked on this engine
Fixed. PR #648 normalises disabled top_k rows to vocab_size and merged 2026-08-27, closing this. It mattered because continuous batching puts requests with different sampling parameters in one batch, so it was reachable with ordinary mixed traffic. Kept listed so the fix is dated: you want a build from 2026-08-27 or later.
| Context each | KV per stream | Streams |
|---|
A genuinely comfortable fit: 5.1B active means fast decode, 65.8 GB leaves plenty of KV room, and the gpt_oss path in mlx-lm is quiet.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Quiet on the model side. Harmony parsing is the client's problem here rather than the engine's.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The one to pick when the image has to contain readable text. Typography is what this model is built for, and it is the job every general-purpose generator on this page is worst at. The catch is that it is JSON-caption-native: it expects structured captions, and mflux notes that plain text prompts are accepted but often underperform, so it is not a drop-in for a prompt you wrote for FLUX. It also ships sampler presets rather than free step counts, and mflux ignores --steps and --guidance on this CLI. Access needs manual approval, not just a click - request it on the model card and wait, which is the step people miss.
| Context each | KV per stream | Streams |
|---|
Supported with JSON-caption validation, the published sampler presets, quantisation via mflux-save and LoRA loading. Two gate steps are needed before the first download - request access on the card and wait for approval - and doing only the first is the common failure.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
MLX-Video's image support covers the FLUX line, not this.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
DiffusionKit implements Stable Diffusion 3 and FLUX.1 only.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The best open-weight agentic model there is - Terminal-Bench 2.1 of 88.3, MCPMark-Verified 94.5 - and the hardest to get onto a Mac. Both available routes trade quality for fit: 1-bit GGUF tiers on one side, community expert-pruned MLX builds on the other. Neither is the model the benchmarks describe, and the honest position is that nobody has published Apple-hardware evaluations of either.
| Context each | KV per stream | Streams |
|---|
kimi-k3 is in mainline, which makes the best open-weight agentic model on this page reachable on Apple hardware at all. Reachable, not comfortable: the smallest build is UD-Q1_0 at 466.4 GB, TQ1_0 is 508.9 GB, and Q2_K_XL is 861 GB. At 1-bit the question is no longer whether it loads but whether it is still the model whose Terminal-Bench 2.1 is 88.3. Vision is on a branch; the text backbone is not.
1 open of 1 tracked on this engine
The text backbone is in mainline. This asks for tensor-split support on the vision branch, which is a useful signal about how finished K3 support is rather than a blocker for text work.
| Context each | KV per stream | Streams |
|---|
In the library. The tag you can actually run is decided by your pooled memory, not by preference.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
GGUF engine. mlx-lm has no kimi_k3 class, so its MLX engine is not an option.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
There is an MLX route, and it is a compromise rather than a port. Community REAP builds prune routed experts - keeping 179 of 896 per layer - to get from 1.56 TB down to 350 GB, and the publisher measures 5.54 tok/s on a 512 GB M3 Ultra while documenting the degradation candidly, including Chinese output looping in that build. Note that pruning buys memory, not speed: per-token traffic depends on top-k and non-expert precision, so a 350 GB and a 451 GB build decode at the same rate. mlx-lm has no kimi_k3 model class, so these repos ship their own modelling code.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The support matrix has not been updated for K3, though mlx-lm now carries the class it would build on. Still no unpruned MLX build to try even if it had.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Wraps mlx-lm, which gained a kimi_k3 class on 2026-09-01, so there is now an architecture to wrap. The practical limit is the same one everywhere on this model: the only MLX builds published are expert- pruned.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
mlx-lm merged a kimi_k3 model class on 2026-09-01, so the architecture gap that used to block this is closed - the community REAP repos that shipped their own modelling code via auto_map are no longer the only route. What has not changed is the size: no unpruned MLX conversion exists, so in practice you are still loading a REAP build with most of its routed experts deleted. Treat this as loadable rather than solved.
1 open of 1 tracked on this engine
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
The default answer for narration on a Mac, and by download count the most used open TTS model there is. 82M parameters, Apache-2.0, four MLX precisions published, and small enough that the whole model is smaller than one layer of most things on this page.
| Context each | KV per stream | Streams |
|---|
First in MLX-Audio's own table, four precisions published under mlx-community, eight languages. For narration this is the default and the burden of proof is on anything you would pick instead.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Released June 2026 and the newest general-purpose image model mflux carries. Its own description is the useful one: very good quality across a wide range of styles, which makes it the creative-exploration option rather than the photorealism one. Distilled to 8 steps, so it is quick despite being 12B. The full-precision download is 62 GB, which is the number that decides whether it fits - quantise to q8 and it comes down sharply. There is a companion Krea-2-Raw on the hub with marginally more downloads; Turbo is the one mflux drives. Weights are gated, and the licence is a community licence rather than open weights.
| Context each | KV per stream | Streams |
|---|
First-class in mflux, with img2img, LoRA and quantisation all supported. Defaults to 8 steps at q8. mflux-generate --model krea2 and the weights pull automatically once you have accepted the gate.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
MLX-Video's image support covers the FLUX line, not this.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
DiffusionKit implements Stable Diffusion 3 and FLUX.1. It has not been extended to the 2026 model generation.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Lightricks' video model, and the one generating video with synchronised audio rather than silent clips. The fp8 build at 58.7 GB is the one that fits a real machine; the full release is 156 GB. Video is where Apple Silicon is furthest behind - expect minutes per clip, not seconds, and check MLX-Video's commit history before planning around it.
| Context each | KV per stream | Streams |
|---|
The MLX route to text-to-video and image-to-video with synchronised audio. Two caveats worth stating plainly: video generation on Apple Silicon is minutes per clip rather than seconds, and MLX-Video's last push was several months before the models on this page - check it still tracks the checkpoint you want before committing.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The current Lightricks video model, released 2026-07-23, and already the more downloaded of the two. It supersedes LTX-2.3 on quality - but not on this page, because the engine here cannot load it yet. MLX weights do exist: mlx-community/ltx-2.5-mlx and an 8-bit build at 23.9 GB. What drives them is a community port, xocialize/ltx-2-mlx, on an ltx-2.5 branch with no stars and no releases, so it is not carried as an engine here. Its own card quotes 62.4 GB peak on a 128 GB machine, reducible to 40.7 GB by evicting components between stages. Note the licence is not open weights in the usual sense: it is a community licence that requires a paid agreement above $10M of revenue, and the repository is gated. LTX-2.3 remains the version this page can actually run - see its card.
MLX-Video implements LTX-2 and LTX-2.3 only; its README names no 2.5 pipeline and its pre-converted weights stop at 2.3. Support was requested on 2026-08-19 and is unanswered, and the project's last commit predates LTX-2.5 by more than two months. Converted MLX weights exist on the hub regardless, driven by a separate community port rather than this engine.
1 open of 1 tracked on this engine
LTX-2.5 is the current Lightricks video model and MLX weights for it are already published, but mlx-video only implements LTX-2 and LTX-2.3. Until this lands, the newest weights have no loader in this engine.
SWE-bench Verified 80.5% is the best coding score on this page that fits one 256 GB machine, and since the architecture reached mainline llama.cpp that is now a real option rather than a hypothetical. Note its Terminal-Bench 2.1 of 66.0 sits below Qwen3.8-27B's 73.0 despite being 15x larger, so it is a coding pick rather than an agentic one. The MLX route is a vision-language checkpoint with open loader problems.
| Context each | KV per stream | Streams |
|---|
minimax-m3 is in mainline llama.cpp, which flips this model from unreachable to practical. A 22-tier ladder means you can choose your fit: UD-IQ3_XXS at 159.4 GB, UD-Q3_K_XL at 194.9 GB, UD-IQ4_XS at 207.6 GB, with the Q4 tiers (248-265 GB) needing more than one 256 GB machine. SWE-bench Verified 80.5% is the highest coding score on this page that fits a single box.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
In the library. Check which quant the tag resolves to before pulling 250 GB onto a 256 GB machine.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
GGUF path only in practice - the MLX conversion is an mlx-vlm build with open loader problems. LM Studio's llama.cpp engine is where this model works.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
oMLX explicitly ships native kernels for MiniMax M3, so it is the MLX engine that intends to run this. In practice the checkpoint is minimax_m3_vl and loading has failed with 2225 vision-tower parameters rejected rather than skipped, alongside a model-type mapping error and an open question about which quant tiers the long-prefill fixes actually cover. Promising, not yet dependable.
3 open of 3 tracked on this engine
The released checkpoint is minimax_m3_vl - a vision-language model - and the text path rejects the vision tower's tensors instead of skipping them.
The minimax_m3_vl model type is not mapped cleanly. Same root cause as the loader failure above, seen from the config side.
An open question about which quant tiers the long-prefill fixes cover. Read it before choosing a MiniMax quant, because the answer decides whether long prompts work.
Not in the support matrix, and MiniMax M3's sparse attention would need its own kernel work.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
There is no MiniMax M3 text backbone in mlx-lm - PR #1401 is still open - so there is nothing for vllm-mlx to wrap.
1 open of 1 tracked on this engine
The only route to M3 on MLX, open since 2026-08-24. The only route to M3 on MLX.
minimax.py covers the earlier MiniMax generation, not M3. The M3 text backbone is PR #1401, unmerged. The mlx-community 4-bit was produced with mlx-vlm, which is a different package and a different code path.
1 open of 1 tracked on this engine
The only route to M3 on MLX, open since 2026-08-24. The only route to M3 on MLX.
NVIDIA's small multilingual TTS, part of the Nemotron voice-agent stack alongside VoiceChat and the Nemotron ASR models. At a third of a gigabyte it runs on anything, which makes the cluster picker beside the point for this one.
| Context each | KV per stream | Streams |
|---|
MLX 8-bit and 4-bit conversions exist from a community packager rather than mlx-community, so check the build before trusting it. Pairs naturally with the Nemotron ASR models if you are assembling a pipeline rather than using an end-to-end model.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The only full song-generation model with a maintained MLX port: lyrics in, 44.1 kHz stereo out, via a hierarchical autoregressive stage feeding flow matching. Seven MLX precisions published, from bf16 at 28.5 GB down to 4-bit at 9.2 GB.
| Context each | KV per stream | Streams |
|---|
Seven precisions published, from bf16 at 28.5 GB to 4-bit at 9.2 GB, plus MXFP4/MXFP8/NVFP4. The only maintained MLX path to full song generation with lyrics.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Released 2026-08-11 with weights, training data and recipes. 3B active makes it the cheapest thing here to run at concurrency, and the checkpoint ships MTP draft weights. Published agentic coverage is thin - NVIDIA leads with general benchmarks - so treat it as a fast tier to trial rather than a proven agentic pick. The larger Nemotron 3 Super (120B-A12B) and Ultra (550B-A55B, SWE-bench Verified 70.7) are stronger but have no Apple-ready quantisation published.
| Context each | KV per stream | Streams |
|---|
In the library. The simplest route to trying the model, and at 3B active it is cheap to leave running.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
ggml-org publishes it, with separate MTP draft weights at Q4/Q8/BF16 so speculative decoding is available. The catch is nemotron_h_moe aborting inside ggml_ssm_scan during context reservation - before generation starts, in the shared SSM kernel rather than a backend-specific path. Check that issue against your build before committing to this one.
1 open of 1 tracked on this engine
Fires at context reservation, before any token is generated, and the assertion is in the shared SSM scan rather than a backend - so it is not a CUDA-only report.
| Context each | KV per stream | Streams |
|---|
Curated GGUF plus the mlx-community 4-bit. Given the llama.cpp SSM assertion above, having the MLX path a click away is the practical value here.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Loads on the nemotron_h path with nothing architecture-level open against it. MTP is not wired up yet, so the draft weights NVIDIA shipped go unused - speed left on the table rather than a defect.
1 open of 1 tracked on this engine
A feature request. Nemotron 3.5 Lightning ships MTP weights, so this is speed left on the table rather than anything broken.
Nemotron-H paged attention is an open request - the Mamba-2 plus MoE hybrid has no implementation here yet. That issue is the thing to watch.
1 open of 1 tracked on this engine
Open request rather than a bug. It is the reason Nemotron 3.5 Lightning does not load here.
| Context each | KV per stream | Streams |
|---|
3B active makes this the cheapest thing here to run at concurrency, and nothing for this architecture is open in mlx-lm.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Runs on the hybrid Mamba-Transformer path without special handling.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The strongest thing on this page for its size, and MIT on top. SWE-bench Verified of 79 puts it within two points of DeepSeek V4 Pro at roughly a fortieth of the weight, and it does that on 3B active parameters. KV is 20 KiB/token from 10 full-attention layers out of 40 - the other 30 are linear - so a full 262k context costs about 5 GB, which is affordable on a machine that can hold the weights at all. Two things to know: it is a vision-language model, and mlx-lm's Qwen3.5 support is text-only, so the MLX path drops the image input. And the card reports Terminal-Bench 2.1 under two harnesses - 67.8 on Terminus-2, 68.5 under Claude Code - which is unusually honest, but means you should check which harness any comparison used. The figure quoted here is Terminus-2.
| Context each | KV per stream | Streams |
|---|
The official GGUF declares qwen35moe, which llama.cpp has carried since the Qwen3.5 series landed, so this loads on a stock build rather than needing master. bartowski publishes a second ladder if you want more tiers than the first-party one offers.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
In the library as a real local build, not a cloud stub: ornith-1.5:35b is a 23 GB pull, with 9b at 6.6 GB and 397b at 242 GB either side of it if you want a different size.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Both engines can take it - GGUF through llama.cpp and the first-party MLX builds through its MLX engine.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Serves the mlx-lm Qwen3.5 class. Text only: that class landed explicitly without vision, so the image input this model was trained with is not available on any MLX path.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
The supported-model matrix covers the Qwen3.5 series, and 3B active over vLLM's continuous batching is a good pairing.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Wraps mlx-lm, so the same Qwen3.5 MoE class and the same text-only limitation. 3B active makes it a reasonable continuous-batching target.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
qwen3_5_moe has been in the models directory since 2026-02-12, and the first-party 4, 6 and 8-bit MLX conversions are published by the model's own authors rather than a third party.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Qwen calls this an experimental preview of the architecture behind Qwen4, and the numbers are the strongest per active parameter on this page: 6B active beats Qwen3.8-27B on every shared benchmark, and its SWE-bench Multilingual of 81.0 leads the page outright. Three genuinely new pieces - Qwen Sparse Attention at micro-block granularity, gated residuals, and a 51B n-gram embedding table designed to be offloaded. That last one is why the checkpoint is 180B on disk against a stated 125B. llama.cpp merged the qwen4exp architecture on 2026-08-27, so this is runnable on Apple silicon for the first time - from a master build, not a release, and the GGUF ladder filled out from a single 1-bit tier to Q4_K_XL within days. oMLX went further and vendored its own qwen4_exp support in v0.6.3, so the fastest published numbers on Apple silicon are now on MLX rather than GGUF - with the concurrency caveats on that tab.
| Context each | KV per stream | Streams |
|---|
oMLX vendored its own qwen4_exp support in v0.6.3 rather than waiting for mlx-lm - the same move it made for DeepSeek V4 - and it is the fastest published path to this model on Apple silicon. Measured by the maintainer on an M3 Ultra 512 GB with the first-party Jundot/Qwen3.8-Flash-Next-oQ4e-mtp build: 1,061 tok/s prefill and 53.6 tok/s generation at 4k, still 1,114 and 45.9 at 32k, with Lightning MTP worth 2.3x to 2.6x on generation. Two of the four defects behind this status were fixed in the first days of September - concurrent requests no longer fail on the sparse-attention indexer, and loading another Qwen VLM no longer kills MTP - but neither fix is in a tagged release yet, so a packaged v0.6.4 install still hits both. What remains open either way is QSA prefix-cache reuse across turns, which means paying full prefill again on every turn of a conversation. Text and image input; video is unsupported.
2 open of 4 tracked on this engine
Fixed on 2026-09-02, but after v0.6.4 shipped and there has been no release since, so a packaged install still fails on any two concurrent requests. It was a shape error from the sparse-attention indexer that only appeared once continuous batching formed a multi-row batch - which is the configuration anyone serving this model would run.
Four defects in the QSA cache handling vendored in for Qwen4-Exp between v0.6.3rc3 and v0.6.3. Prefix cache reuse is the difference between a fast second turn and paying full prefill again, so this costs exactly what the engine is fastest at.
Fixed on 2026-08-30, and likewise not in a tagged release yet. Loading any other Qwen3.5-family VLM used to kill Lightning MTP for an already-working Flash-Next until restart, silently costing the 2.3x to 2.6x that MTP is worth on generation.
The built-in benchmark intermittently reports nothing at pp16384. A reporting defect rather than an inference one, but it undercuts the numbers you would use to size a machine.
| Context each | KV per stream | Streams |
|---|
Support landed on 2026-08-27: qwen4exp is now in src/llama-arch.cpp. It is on master only - no tagged release carries it yet, so a packaged build or a distro binary will still refuse the weights. Build from source until the next release cuts. Three further PRs are open against the same architecture for fixes, so treat the implementation as new rather than settled.
1 open of 2 tracked on this engine
The request thread, still open even though the implementing PR (#27742) merged on 2026-08-27. Worth watching for the follow-up fixes rather than as a blocker; the remaining gap for this model is MLX, not llama.cpp.
Merged 2026-08-27, which is what unblocked this architecture. It is on master only - no tagged release carries it yet, so a packaged build will not load the weights until the next release cuts.
Not in the library. llama.cpp gained the architecture on 2026-08-27, so this is now waiting on an Ollama bump to a build that carries it rather than on the architecture itself.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Nothing curated in either format. Its llama.cpp engine will pick this up once LM Studio ships a build from master; its MLX engine stays blocked until mlx-lm merges a qwen4_exp class.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The matrix covers Qwen3.5 through 3.8, not the qwen4_exp preview architecture, and the compute layer is MLX so it inherits the same missing model class.
1 open of 1 tracked on this engine
Open. Until it merges mlx-lm has no qwen4_exp class, so every MLX engine that builds on mlx-lm refuses the weights regardless of which quant you point at it.
Wraps mlx-lm, which has no qwen4 class. Nothing to wrap until that PR merges.
1 open of 1 tracked on this engine
Open. Until it merges mlx-lm has no qwen4_exp class, so every MLX engine that builds on mlx-lm refuses the weights regardless of which quant you point at it.
The models directory carries qwen3_next but nothing for qwen4. A PR adding qwen4_exp is open and unmerged, and it is the gate for every MLX engine on this page - llama.cpp has already moved, MLX has not.
1 open of 1 tracked on this engine
Open. Until it merges mlx-lm has no qwen4_exp class, so every MLX engine that builds on mlx-lm refuses the weights regardless of which quant you point at it.
The best fit-to-capability ratio on this page. 3B active out of 80B total gets SWE-bench Verified 74.2% - within a point of GLM-5.2 at a fraction of the footprint - and Apache-2.0 with a 38-tier GGUF ladder means it runs on almost anything. Note the caveats: its Terminal-Bench figure is on v2.0, so it cannot be ranked against the v2.1 numbers elsewhere here, and it is non-thinking only. KV is 24 KiB/token, among the cheapest here, so long context is affordable.
| Context each | KV per stream | Streams |
|---|
qwen3next is in mainline, and unsloth publishes the deepest quant ladder of any model here - 38 tiers from 18.9 GB to 159.5 GB - so this fits almost any Mac at a precision you choose rather than one you accept. 3B active means decode stays cheap even on a laptop. Watch one report of garbled output, though it is filed against an abliterated finetune rather than the base weights.
1 open of 1 tracked on this engine
Filed against a community abliterated finetune rather than the base weights, so it may say more about that conversion than about the architecture. Worth knowing before you blame the model.
| Context each | KV per stream | Streams |
|---|
ollama run qwen3-coder-next. Given the 3B active parameters and 256k context, this is the closest thing on the page to a drop-in local coding agent.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Curated in both formats under lmstudio-community - GGUF plus MLX at 4, 6 and 8-bit - which makes it one of the better-served models in the catalogue.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
oMLX's own README uses this model in its example model directory, so it is a supported path. Two things to know: mlx-lm's hybrid cache is reported silently broken for Qwen3-Next, which removes prefix reuse without telling you, and continuous-batching prefill has been reported collapsing at exactly two concurrent requests.
3 open of 3 tracked on this engine
Recovers at higher concurrency, which makes it easy to miss in a benchmark that jumps straight to eight. Two concurrent requests is the most common real case.
Silent, and it removes prefix reuse - the single biggest win on multi-turn agent traffic. Every MLX server that wraps mlx-lm inherits it, so the model looks fine while every turn re-prefills.
Cross-contamination between models in the same server, on the Qwen3-Next batched path specifically.
| Context each | KV per stream | Streams |
|---|
Qwen3-Next is a supported family with its own row in the matrix, on the same hybrid SDPA + GDN path as Qwen3.8. Prefix caching is opt-in for that shape. At 3B active this is a natural fit for vLLM's continuous batching.
1 open of 2 tracked on this engine
Fixed. PR #648 normalises disabled top_k rows to vocab_size and merged 2026-08-27, closing this. It mattered because continuous batching puts requests with different sampling parameters in one batch, so it was reachable with ordinary mixed traffic. Kept listed so the fix is dated: you want a build from 2026-08-27 or later.
Qwen3.8 is exactly that shape, and it ships an MTP head. Until this lands you choose between the draft head and the prefix cache rather than having both.
| Context each | KV per stream | Streams |
|---|
Loads on mlx-lm's qwen3_next class. The hybrid-cache defect upstream is the thing to check first, because a silently broken prompt cache costs you the whole reason to run a server.
1 open of 1 tracked on this engine
Silent, and it removes prefix reuse - the single biggest win on multi-turn agent traffic. Every MLX server that wraps mlx-lm inherits it, so the model looks fine while every turn re-prefills.
| Context each | KV per stream | Streams |
|---|
qwen3_next.py exists and generates. The hybrid cache silently failing is filed here and propagates to every MLX server that wraps it.
2 open of 2 tracked on this engine
Silent, and it removes prefix reuse - the single biggest win on multi-turn agent traffic. Every MLX server that wraps mlx-lm inherits it, so the model looks fine while every turn re-prefills.
The json_tools parser never matches, so the call is returned as plain text. Architecture-independent and specific to agent use.
Stronger on paper than its size suggests: SWE-bench Pro of 61.7 is within noise of GLM-5.2's 62.1 at 1/27th the scale, and LiveCodeBench-v6 of 90.3 is the highest here. Its hybrid Gated DeltaNet layout is also the most engine-sensitive thing here - the same weights get working multi-token speculative decoding on one engine and a k=1 cap on another, so which runtime you pick changes the throughput more than which quant you pick.
| Context each | KV per stream | Streams |
|---|
The better path for this model, for one specific reason: the GGUF repo ships a separate 1.4 GB MTP draft head, so --draft-mtp gives you real multi-token speculative decoding - exactly the thing that is capped at k=1 on the MLX servers. A 29-tier quant ladder from 6.2 GB to 31.5 GB on top. Watch two Mac-specific things: a crash on an M2 Ultra with default settings, and a chat template that mis-renders tool calls until you substitute the Qwen3.6 one.
3 open of 3 tracked on this engine
Confirmed on Darwin arm64 with the Metal backend, and on defaults rather than a tuned command line - the one class of bug that hits you on first run.
The shipped template mis-renders something in the tool path. A workaround exists and is a single --chat-template-file, but until it is fixed the default template is wrong for agent use.
Multi-GPU only - a single GPU is fine, so this does not apply to a Mac. Listed because it is the most active MTP thread and the fix will touch the shared path.
| Context each | KV per stream | Streams |
|---|
In the library with 18/30/32/56 GB tags. Since Ollama now defaults to MLX on Apple Silicon, whether you get the MTP speedup depends on which path your tag resolves to - benchmark it rather than assuming.
1 open of 1 tracked on this engine
Speculative decoding making decode twice as slow is the opposite of the intent. On this model MTP is the main reason to prefer one engine over another, so a negative result here matters.
| Context each | KV per stream | Streams |
|---|
Curated in both formats, which makes it the cheapest way to settle the question this model raises: the MLX build decodes faster per token in principle, the GGUF build gets working MTP. Run both.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
oMLX ships native Metal kernels for the Qwen3.5 family, which is the right answer to this hybrid GDN architecture, and it is the strongest MLX option for the model. It is still degraded rather than clean: single-stream decode has regressed from about 36.5 to 24 tok/s on an M3 Ultra with the MTP path implicated, continuous batching on this architecture is unmeasured, and loading a second Qwen-family model can contaminate a resident engine.
4 open of 5 tracked on this engine
A third of decode throughput, on the model most people will try first, with the MTP path implicated. This is the number to check against before assuming an MLX server beats llama.cpp here.
Continuous batching is the reason to run a server instead of the CLI. Unmeasured on this architecture means the concurrency story is unproven, not that it is broken.
Multi-model serving is a headline oMLX feature; this is the cross-contamination it can cause. The second model loads and the first one quietly changes behaviour.
ANE offload is off by default, so this is an opt-in trap rather than a first-run one - but it is silent, returning an empty completion rather than an error.
oMLX's own quant format with the MTP head merged. Until it exists you are running a generic mlx-community build rather than one tuned for this server.
| Context each | KV per stream | Streams |
|---|
The strongest MLX-backed option for this model, and worth being precise about why, because the name suggests otherwise: this is vLLM's scheduler and API over MLX as the compute layer. It pins mlx==0.32.0 exactly, depends on mlx-lm and mlx-vlm, and its paged attention kernel is implemented as an mlx::core::Primitive subclass rather than running beside MLX. What it adds on top is hardware-specific: as of August 2026 it uses the M5 Neural Accelerator tensor units for MHA, GQA and MQA prefill, which no other engine here claims. mlx-community/Qwen3.8-27B-8bit is the project's own example checkpoint for the hybrid SDPA + GDN path, so this is the configuration they test. Prefix caching works but is opt-in on hybrid GDN - pass --enable-prefix-caching - which is a far better position than vllm-mlx, where it is off entirely. The open catch is that the built-in MTP head and prefix caching do not yet work together.
2 open of 3 tracked on this engine
Fixed. PR #648 normalises disabled top_k rows to vocab_size and merged 2026-08-27, closing this. It mattered because continuous batching puts requests with different sampling parameters in one batch, so it was reachable with ordinary mixed traffic. Kept listed so the fix is dated: you want a build from 2026-08-27 or later.
Each request re-ingests the full prompt into the draft model, which costs more than the draft saves. Worth knowing before you reach for spec decode here; the built-in MTP path (#610) is the one to watch.
Qwen3.8 is exactly that shape, and it ships an MTP head. Until this lands you choose between the draft head and the prefix cache rather than having both.
| Context each | KV per stream | Streams |
|---|
What holds this model back here is the runtime, not the model. Prefix caching is off on hybrid linear-attention architectures and speculative decoding is capped at k=1, so you pay full re-prefill on every turn and get none of the MTP head the checkpoint carries. The published Terminal-Bench 2.1 of 73.0 is the best agentic number among things that run - it is just not what you measure on this engine.
11 open of 11 tracked on this engine
#691's all-or-nothing rewind gate rejects every hybrid model: ArraysCache leaves have no .keys and inherit is_trimmable() -> False. Measured on Qwen3.8-27B-8bit — an identical 24k prompt resent back-to-back gives zero speedup on main, versus ~58x before #691. Rejection logs only at DEBUG.
Explicitly Fixes #730, opened 2026-08-25 with the 58x measurement attached. The single event that most changes this plan.
Leaks Metal buffer handles on hybrid models. Compounds every other memory-pressure item at concurrency.
Cross-conversation KV leak and repetition loops. A correctness bug, not a speed bug — one tenant's context bleeding into another's is disqualifying for multi-agent serving.
Both are the vendor-shipped draft mechanisms on the models that have one. If neither is wired up, speculative decoding on this engine is limited to what the generic k=1 path gives you.
Reference CUDA/vLLM deployments run k=3 at ~77% acceptance for a ~66% decode gain. Measured on Qwen3.8-27B / M3 Ultra 256GB: verify forward is 69% of step time, reject and replay 19.3%.
The structural reason the k=1 cap exists — GDN state layers cannot be rolled back on draft rejection. Same root cause as #730.
Another way the cache serves state that does not match the prompt it is keyed on.
Prefill chunk size is the main Apple Silicon prefill lever, ignored in exactly the config we would run.
One of two competing fixes for #711.
Would catch a broken MTP head at load instead of at generation.
| Context each | KV per stream | Streams |
|---|
The qwen3_5 class works for single-stream generation. The cache limitations that make this architecture painful on the servers above start here: ArraysCache is not trimmable, which is the cause of the k=1 speculative-decoding cap downstream.
2 open of 2 tracked on this engine
The json_tools parser never matches, so the call is returned as plain text. Architecture-independent and specific to agent use.
The structural reason the k=1 cap exists — GDN state layers cannot be rolled back on draft rejection. Same root cause as #730.
The biggest image model on this page and the most permissively licensed - Apache-2.0 on a 20B generator is unusual, and it is why this stays worth listing despite being the oldest of the current set. What you buy for the size is prompt understanding and world knowledge: it follows long, compositional prompts that the distilled 4-to-8-step models drop parts of. It also edits, not just generates. What you pay is speed - it is a base model at 30 steps, not a turbo, so it is the slowest option here by a wide margin. Reach for it when a prompt keeps coming out wrong elsewhere, not as a default.
| Context each | KV per stream | Streams |
|---|
Supported including its edit mode, and ungated. mflux flags it plainly as the large, slower option: 30 steps against 4 to 8 for the distilled models, on 20B of weights. Quantise to q8 unless you have the memory to spare.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
MLX-Video's image support covers the FLUX line, not this.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
DiffusionKit implements Stable Diffusion 3 and FLUX.1 only.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The weights are public at Qwen/Qwen3.8-2.4T-A95B and the architecture is already supported - this is the same qwen3_5_moe family as Qwen3.8-27B, so llama.cpp and mlx-lm both load it. Terminal-Bench 2.1 of 86.6 is second only to Kimi K3 on this page, and its SWE-bench Pro of 67.7 leads it outright. What stops it is arithmetic: 2.45T parameters means the smallest unpruned build is 397 GB at 1.30 bits per weight, and the first tier clearing 2 bits is 656 GB. Everything that fits a realistic Mac has either been quantised past the point its own quantiser warns about, or had most of its experts deleted.
| Context each | KV per stream | Streams |
|---|
The weights are public at Qwen/Qwen3.8-2.4T-A95B and the architecture is qwen3_5_moe, which llama.cpp already implements as qwen35moe - the same family as Qwen3.8-27B. So this is purely a capacity problem, not a support one. The ladder is brutal: UD-IQ4_XS is 1.31 TB, UD-IQ2_XXS is 656.6 GB, and the smallest unpruned build is UD-Q1_0 at 397.3 GB. Someone has also published REAP-pruned GGUFs sized deliberately for 256 GB and 512 GB Macs.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
The qwen3.8 library entry carries only 27B tags. Nothing at this size is published, which is reasonable - a 397 GB minimum does not suit a one-command pull.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Through the llama.cpp engine on the GGUF ladder. Nothing curated under lmstudio-community at this size, so you are pointing it at a community repo.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
mlx-lm's qwen3_5_moe class covers the architecture, so this loads - but every published MLX build except one is REAP expert-pruned, and the one that is not is 805.6 GB. At these sizes the load-time watchdog on >300 GB checkpoints is also in play.
2 open of 2 tracked on this engine
Server-wide, not per model. Discovery racing an in-flight load leaks the whole resident model; on a 256 GB machine that is the entire budget gone until you restart.
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
| Context each | KV per stream | Streams |
|---|
The matrix row covering Qwen3.5/3.6/3.8 notes that the 3.6 generation adds MoE, so this architecture is plausibly in scope - but nobody has run a 2.45T checkpoint through it, and no MLX build of this model exists that is not expert-pruned. Treat it as untested rather than supported.
1 open of 1 tracked on this engine
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
| Context each | KV per stream | Streams |
|---|
Same picture as oMLX: the class exists, the unpruned MLX build is 805.6 GB, and everything smaller has had experts deleted.
1 open of 1 tracked on this engine
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
| Context each | KV per stream | Streams |
|---|
qwen3_5_moe.py handles it. The constraint is what has been published: pruned builds from 360.9 GB up, or 805.6 GB unpruned.
2 open of 2 tracked on this engine
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
The structural reason the k=1 cap exists — GDN state layers cannot be rolled back on draft rejection. Same root cause as #730.
The best shape on this page for Apple hardware: 13B active reads roughly 7.5 GB per token, so bandwidth stops being the constraint and a 256 GB machine finally does useful work. It is also the clearest example of a model whose story depends entirely on the engine - unreachable through the mainstream MLX servers, and carried by one engine written specifically for it. Read both engine tabs before committing: ds4 is the default here, but llama.cpp runs this on a stock build and the case between them is narrower than a single recommendation makes it look.
| Context each | KV per stream | Streams |
|---|
Purpose-built C and Metal kernels for this one architecture, and the only engine here with published Metal numbers for it. Be precise about which numbers: the headline 790 tok/s prefill and 39.4 tok/s generation are q2 on a 128 GB M5 Max. The build a 256 GB machine would actually load is q4, and the only q4 figure the project publishes is from its older sweep - 35.5 tok/s generation on a 512 GB M3 Ultra, against 36.9 for q2 on the same machine, so the quant costs little. There is no head-to-head against llama.cpp on Metal, by anyone. ds4-server speaks OpenAI and Anthropic, persists KV to disk across restarts, and --batched-session N gives real concurrent sessions. Its own costs are real: the BPE merge loop is O(n squared), so a 24k-token prompt burns 175-250 seconds of CPU before prefill even starts - measured on an M3 Ultra, and worse for agents than anything llama.cpp has on Metal - there are no tagged releases, and vision is unsupported.
6 open of 6 tracked on this engine
Most agent clients are stateless - they resend a longer prompt each turn. If the session is not extended, the disk KV cache and prefix reuse stop paying, which is the main reason to run ds4.
Tokenization is pure fixed cost before any GPU work. An agent that pastes a file into the prompt pays it on every turn, and it does not show up in the tok/s figures.
Swap quantisations and the cache from the old weights can be restored against the new ones. Silent wrong-context, and it survives a restart because that is what the disk cache is for.
Unconfirmed. On a machine where the model already occupies most of RAM, a slow server-side leak ends as an OOM rather than as swap.
You build from a moving main branch. The project describes itself as beta and fast-changing, so pin a commit yourself if you care about reproducibility.
Text only today. Irrelevant for coding and terminal work; relevant if you wanted the same engine for screenshots.
| Context each | KV per stream | Streams |
|---|
deepseek4 is in mainline, so this works on a stock build, and at 256 GB the GGUF ladder gives you more rungs to choose from than ds4 does. The reason it is not the default here is one open defect, and it is filed against exactly this case: a Mac Studio M3 Ultra with 256 GB running the unsloth UD-Q8_K_XL build on Metal degenerates into repetition and leaks special tokens over a long agentic session. It degrades rather than fails, so a short test will not show it. For one- shot or short-conversation use the two engines are much closer than this page previously implied.
1 open of 1 tracked on this engine
The one DeepSeek V4 Flash defect on this engine actually filed against Apple silicon: a Mac Studio M3 Ultra with 256 GB, Metal with flash attention, serving the unsloth UD-Q8_K_XL build at 262k context. It degrades over a long agentic conversation rather than failing outright, which is the hard kind to notice. Open since 2026-08-07.
| Context each | KV per stream | Streams |
|---|
In the library as deepseek-v4-flash. The zero-effort route; the ceiling is lower than ds4's and you inherit whichever backend the tag resolves to.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Runs through the GGUF engine with the llama.cpp caveats above. Not through its MLX engine - there is no mlx-lm model class to use.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
oMLX does load DeepSeek V4 Flash, which no mlx-lm-derived engine can, so it has its own path. The residency thrash that held decode to 4-17 tok/s on a 128 GB M5 Max was closed as fixed on 2026-08-28 with the v0.6.3 release; nobody has published a decode figure since, so the old number is historical and the new one is unmeasured. Three defects behind this status are still open: MXFP4 crashes on float32 activations, the prefix cache drops out with a signature mismatch and takes a severe slowdown with it, and thinking leaks into content on truncated turns. ds4 remains the faster path on comparable hardware.
3 open of 4 tracked on this engine
MXFP4 is the quantisation DeepSeek actually released, so this is the preferred build rather than a fringe one.
Closed as completed on 2026-08-28, alongside the v0.6.3 release. It was traced to the bundled mlx keeping a single residency set, so weights faulted instead of staying wired. No post-fix decode figure has been published, so treat the old 4-17 tok/s as historical rather than current - and the other DeepSeek defects on this engine are still open.
The prefix cache silently stops being used, so every turn re-prefills. On long agent conversations that is the difference between seconds and minutes per turn.
A truncated turn returns reasoning as if it were the answer. Downstream that is indistinguishable from the model answering badly, and it corrupts anything that parses the reply.
Not in the support matrix. Latent attention generally is the weak spot here: the only MLA row carried is flagged as having no Metal kernel, and a specialised MLA paged-attention kernel is still at the RFC stage.
1 open of 1 tracked on this engine
Until this exists, latent-attention models fall back to MLX SDPA with no Metal kernel - which is why the GLM-4.5 row in the support matrix is flagged as slow and untested.
The quant exists and the footprint is ideal - 13B active reads about 7.5 GB per token, so bandwidth stops being the constraint - but the architecture is rejected outright. There is nothing to wrap: mlx-lm has no deepseek_v4 model class.
2 open of 3 tracked on this engine
This is the entire MLX blocker for DeepSeek V4. Until it merges there is no deepseek_v4 in mlx-lm, so no MLX server that wraps mlx-lm can load the architecture no matter which quant you download.
ValueError: Model type deepseek_v4 not supported. Open since 2026-08-01, no maintainer reply, no PR — and mlx-lm has no deepseek_v4.py, so the architecture is unimplemented upstream too.
Dies at ~11k decode tokens with metal::malloc resource-limit exceeded. Even once the architecture lands, this has to be fixed before the model is servable.
The single most consequential gap in MLX. Several quants exist and their cards tell you to pip install mlx-lm, but there is no deepseek_v4.py in mlx-lm - support is PR #1233, still open. The residency growth that used to abort decode at around 11k tokens is no longer the blocker: #1784 and #1790 fixed it upstream on 2026-08-27. Only the missing model class stands between this and running. If you want an MLX-shaped route meanwhile, [ssd- moe/deepseek-v4-flash-mlx](https://github.com/ssd-moe/deepseek-v4-flash- mlx) is a custom MLX offload engine that streams experts from SSD to run this on a 48 GB Mac at about 4.5-5 tok/s - a different tradeoff from ds4's own SSD streaming, and far slower than either resident path.
4 open of 7 tracked on this engine
This is the entire MLX blocker for DeepSeek V4. Until it merges there is no deepseek_v4 in mlx-lm, so no MLX server that wraps mlx-lm can load the architecture no matter which quant you download.
Where the community port was developed and tested before PR #1233. Useful for finding out what already works in a fork if you do not want to wait for the merge.
Dies at ~11k decode tokens with metal::malloc resource-limit exceeded. Even once the architecture lands, this has to be fixed before the model is servable.
Past index_topk (2048) the indexer drops the attention sinks and decode collapses into repetition — a sharp cliff, not drift. Hits every sparse-attention model: DeepSeek V3.2/V4 and GLM-5.2 both decode through this module.
Fixed upstream. #1784 makes decode evaluate cache state periodically and #1790 fixes the unevaluated graph in deepseek specifically; both merged, and this closed 2026-08-27. It was the general form of the DeepSeek V4 residency growth - any model class written that way leaked for the life of the process, aborting at around 11k generated tokens rather than failing on the first run.
The demand-side thread for the PR above. Useful as a temperature check on whether the port is moving.
Filed against the mlx-vlm DeepSeek path, which is the only working MLX route today. A quality defect rather than a load failure, and confined to CJK output.
Same architecture as Flash at roughly five times the size, which makes it a capacity problem rather than a compatibility one. It runs, on hardware most people will not have: a 512 GB machine, or a pair of them for the Q4 split. Worth knowing it exists so you can price the ceiling.
| Context each | KV per stream | Streams |
|---|
ds4 runs PRO, with the honest caveat that it takes real hardware. The IQ2_XXS routed build is 464.6 GB in one file - a 512 GB machine, or pooled across two 256 GB machines by pipeline parallelism. The Q4 split ships as two files of 457.5 GB and 442.0 GB, designed for a pair of 512 GB Mac Studios with the coordinator taking layers 0-30 and the worker taking 31 to output. Measured: 9.56 tok/s generation on PRO q2 at 32k context on a 512 GB M3 Ultra. Note the 0813 refresh is not yet a supported checkpoint.
5 open of 5 tracked on this engine
Most agent clients are stateless - they resend a longer prompt each turn. If the session is not extended, the disk KV cache and prefix reuse stop paying, which is the main reason to run ds4.
Hits the distributed path specifically. If you are splitting DeepSeek V4 PRO or GLM-5.2 across two Macs, this is the first thing to check when the numbers look impossible.
Tokenization is pure fixed cost before any GPU work. An agent that pastes a file into the prompt pays it on every turn, and it does not show up in the tok/s figures.
Swap quantisations and the cache from the old weights can be restored against the new ones. Silent wrong-context, and it survives a restart because that is what the disk cache is for.
The 0813 refresh is not yet a supported checkpoint. ds4 is deliberately narrow, so a newer PRO release is a tracked task rather than something that just loads.
| Context each | KV per stream | Streams |
|---|
Same deepseek4 path as Flash, so it loads on a stock build. No Apple- silicon defect is on file against Pro specifically - the four this page used to cite here were all CUDA reports on Windows and Linux, which say nothing about Metal. Treat it as untested rather than proven: at this size few people are running it on a Mac to find out.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
In the library. Fit is the constraint, not availability.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
GGUF engine only - there is no MLX model class for this architecture.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
| Context each | KV per stream | Streams |
|---|
Correcting a claim this page carried until 2026-08-29: PRO conversions do exist - mlx-community/DeepSeek-V4-Pro-4bit at 837 GB and an inferencerlabs Q2.8 at 562 GB. oMLX has its own DeepSeek V4 path rather than going through mlx-lm, so there is no missing model class standing in the way. What is missing is anyone reporting having run it: at 562 GB the smaller of the two still needs memory pooled across machines, and the MXFP4 float32 crash filed against Flash would apply to the mxfp4 route. Treat as plausible and untested, not as blocked.
1 open of 1 tracked on this engine
MXFP4 is the quantisation DeepSeek actually released, so this is the preferred build rather than a fringe one.
Same as Flash - the architecture is not in the matrix, and MLA has no Metal kernel yet.
1 open of 1 tracked on this engine
Until this exists, latent-attention models fall back to MLX SDPA with no Metal kernel - which is why the GLM-4.5 row in the support matrix is flagged as slow and untested.
Same wall as Flash, and it is the real one: no deepseek_v4 class in mlx-lm to wrap. PRO conversions do exist on the hub, which is why this is a code gap rather than a weights gap.
2 open of 2 tracked on this engine
This is the entire MLX blocker for DeepSeek V4. Until it merges there is no deepseek_v4 in mlx-lm, so no MLX server that wraps mlx-lm can load the architecture no matter which quant you download.
ValueError: Model type deepseek_v4 not supported. Open since 2026-08-01, no maintainer reply, no PR — and mlx-lm has no deepseek_v4.py, so the architecture is unimplemented upstream too.
No deepseek_v4 model class, so mlx-lm cannot load this whatever you point it at. Conversions exist - a 4-bit at 837 GB and a Q2.8 at 562 GB - which is exactly the files-ahead-of-the-loader pattern this page keeps running into.
2 open of 2 tracked on this engine
This is the entire MLX blocker for DeepSeek V4. Until it merges there is no deepseek_v4 in mlx-lm, so no MLX server that wraps mlx-lm can load the architecture no matter which quant you download.
Past index_topk (2048) the indexer drops the attention sinks and decode collapses into repetition — a sharp cliff, not drift. Hits every sparse-attention model: DeepSeek V3.2/V4 and GLM-5.2 both decode through this module.
Released 3 August 2026 and the most interesting audio model here: it listens and speaks at the same time rather than taking turns, and it is the first open full-duplex model that can call tools mid-conversation. Artificial Analysis put it top-three among open speech models on both conversational dynamics and speech reasoning. mlx-community has published 8-bit and 4-bit builds, so it runs on a laptop.
| Context each | KV per stream | Streams |
|---|
mlx-community has published 8-bit (13.9 GB) and 4-bit (9.17 GB) builds, so a full-duplex voice agent fits on a laptop. What makes this worth the footprint over a TTS model is that it is end-to-end speech-to-speech - no ASR-then-LLM-then-TTS pipeline, no accumulated latency - and it can call tools while the conversation is still going.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
mflux leads its own README with this one, and describes it as fast, small and very good on realism. Apache-2.0, which separates it from the FLUX family for anything commercial. The published checkpoint is bf16, so the on-disk figure is larger than the parameter count suggests.
| Context each | KV per stream | Streams |
|---|
The model mflux opens its own README with, described there as fast, small and very good on realism, with both distilled and base variants and training support. Apache-2.0 makes it the one to reach for if the FLUX licence is a problem.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Not in the project's model list.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
Z-Image shipped in November 2025, after DiffusionKit stopped.
0 open of 0 tracked on this engine
Nothing open tracked against this engine for this model.
What each engine is, what its API actually implements, and the defects that follow
you whichever model you load on it. All seven speak OpenAI on /v1/chat/completions with SSE
streaming, and none is desktop-only — but “OpenAI-compatible” covers a wide range, and the
differences land on exactly the features an agent leans on: whether tool-call arguments stream as deltas or
arrive only after the turn, whether constrained decoding exists at all, and whether tool_choice
is implemented. Five of the seven also serve Anthropic /v1/messages, so Claude Code can point
at them directly.
The reference GGUF runtime, with a first-class Metal backend. New architectures land here earlier and more completely than anywhere else on this page, and Ollama, LM Studio, Jan, KoboldCpp and most other local runners are downstream of it. llama-server exposes an OpenAI-compatible endpoint, so nothing here is GUI-only.
usage object plus a timings block that reports cache_n - how many prompt tokens were reused from cache - which is the number you want when tuning an agent loop.tool_choice, and parallel_tool_calls gated on what the jinja template supports. Arguments stream as deltas.response_format accepts both json_object and json_schema, enforced by GBNF grammar sampling at the token level rather than validated afterwards.-np), with per-slot prompt caches you can persist to disk.--jinja flag on both the OpenAI and Anthropic surfaces - without it tools is silently inert. The project's own docs decline to claim spec compliance: “no strong claims of compatibility with OpenAI API spec is being made”.Constrained decoding is how tool calls are kept well-formed. Past some number of tools the generated grammar fails to parse - which is to say the failure arrives as you add capability to your agent.
Filed on Glimmer. 50 KB is an ordinary agent turn once a file or a diff is in the prompt, and the process dies rather than rejecting the request.
GLM-5.2's DSA attention has no V cache to quantise, but the flag pair is validated as if it did, so you cannot set the K type independently. Costs memory on the model that has the least to spare.
Blocks speculative decoding on exactly the builds that carry a sliding-window key. The target model still runs; you lose the draft head's speedup.
One-command pulls from a curated library, running as a launch-agent server. Since v0.30 (May 2026) MLX is the default engine on Apple Silicon rather than llama.cpp, which is the single most important thing to know about it here: on a Mac, Ollama inherits MLX's architecture coverage for the models it serves through that path.
stream_options. The only engine here that publishes an explicit checkbox matrix of what it does and does not implement, which is worth more than most of the feature lists.tool_choice is not implemented - you cannot force a specific call or require that one happen. Also missing: logprobs, n, logit_bias, user.response_format and JSON mode supported./v1/responses is non-stateful only: no previous_response_id, no conversation. And because MLX is now the default engine on Apple Silicon, a tag can resolve to a different backend than you expect.An M5-specific crash in the Metal matmul path. If you are buying an M5 machine, this is the one to check is closed before you plan around Ollama on it.
The call survives and the accompanying text does not. Silent truncation is worse than an error because the agent proceeds on a partial turn.
The server rejects output produced by the model it shipped. From the agent's side it is a hard failure on a turn that was otherwise correct.
The tag says MLX and the manifest says something else, so you may not be running what you think you are. Worth knowing generally: an Ollama tag is a manifest, not a guarantee about the underlying build.
The automatic context sizing can commit more memory than the machine has. On a Mac that is unified memory, so it is the whole machine rather than just the model.
An index-out-of-range in the MLX runner's dense MLP forward. Importing an ordinary mlx-community checkpoint is a normal thing to want to do.
HTTP 200, plausible usage numbers, and useless vectors. Not an LLM path, but it says something about how failures surface here.
App-first but not app-only. It ships both a llama.cpp engine and its own MLX engine, so for any given model it can take whichever path works, and its catalogue tends to carry a curated quant within a day of a release. The lms CLI and the server run headless.
delta.tool_calls[].function.arguments fragments you accumulate across chunks - the correct OpenAI shape.json_schema only - json_object mode is not supported. Enforcement differs by engine: llama.cpp grammars for GGUF, Outlines for MLX. SDK integrations bind to Zod, Pydantic and msgspec.lms.Filed against a hybrid linear-attention model - the Qwen3.8 shape. A silent 4864-token ceiling makes any agent workload fail in a way that looks like the model being stupid rather than the engine being misconfigured.
The GGUF build of the same model handles them. A vision model that invents what it cannot see is the worst available failure mode, and it is engine-specific.
The capability badge is wrong, so the app steers you away from working tool-calling builds. Cosmetic in code, decision-changing in practice.
Over-allocation relative to the model. On a 256 GB machine running a 200 GB model there is no slack to absorb it.
Tool-call parsing is per-family, so a model whose format has no parser returns its calls as text. Track this if your model is not in the supported list.
A catalogue-side failure rather than an inference one, but the catalogue is how most people get models into this app.
MLX serving built for agent clients: continuous batching, a hot/cold KV cache that spills blocks to SSD and survives a restart, and hand-written Metal kernels for the GLM-5.2, MiniMax M3 and Qwen3.5 families. Its LLM coverage is mlx-lm's, plus those kernels and its own additions - install the custom kernels or the affected families fall back silently to a much slower generic path.
stream_options.include_usage, and SSE keep-alives so a long prefill does not read-timeout the client. It also scales reported token counts so Claude Code's auto-compact triggers at the right moment on a smaller-context model.functions.*.Server-wide, not per model. Discovery racing an in-flight load leaks the whole resident model; on a 256 GB machine that is the entire budget gone until you restart.
Closed as completed in July 2026, with memory also fluctuating between 400 and 520 GB on a 512 GB M3 Ultra. Kept on the list as the reference point for what a healthy GLM-5.2 prefill looks like, and as a reminder that a version bump can cost you a factor of four on this model.
vLLM itself, running on Apple Silicon. This is a plugin in the vllm-project org that keeps vLLM core and swaps the compute layer for MLX, unifying MLX and PyTorch under one lowering path - so you get vLLM's scheduler, paged KV, continuous batching and API surface rather than a lookalike. Despite the name it is an MLX engine underneath: it pins a single exact MLX version, pulls in mlx-lm and mlx-vlm, and builds its Metal kernels as MLX primitives. Two things make it worth attention on new hardware: v0.2.0's unified paged varlen Metal kernel claims 83x TTFT and 3.6x throughput over v0.1.0, and as of August 2026 it uses the M5 Neural Accelerator tensor units to speed up MHA, GQA and MQA prefill - the only engine here that claims M5-specific acceleration. The cost is coverage: its model matrix is a curated list, not everything that exists.
Fixed. PR #648 normalises disabled top_k rows to vocab_size and merged 2026-08-27, closing this. It mattered because continuous batching puts requests with different sampling parameters in one batch, so it was reachable with ordinary mixed traffic. Kept listed so the fix is dated: you want a build from 2026-08-27 or later.
Until this exists, latent-attention models fall back to MLX SDPA with no Metal kernel - which is why the GLM-4.5 row in the support matrix is flagged as slow and untested.
Each request re-ingests the full prompt into the draft model, which costs more than the draft saves. Worth knowing before you reach for spec decode here; the built-in MTP path (#610) is the one to watch.
Design work on how backends get selected per model. Useful for judging how settled the internals are.
A paged KV cache and continuous batching over mlx-lm's model classes. Unaffiliated with vllm-project/vllm despite the name. Because it wraps mlx-lm rather than reimplementing models, an architecture missing upstream is missing here, and mlx-lm's bugs arrive intact.
cached_tokens is not surfaced yet - an open PR - so you cannot see prefix-cache hits from the API.--reasoning-parser.response_format with json_schema.finish_reason, closing a stream mid-flight leaves the generator and request state open, and a strict json_schema decode can wedge. Also bind carefully - non-loopback requests have been reported silently dropped on 0.0.0.0.Over 5-minute hangs on Qwen3-Coder-30B-A3B. Structured output is load-bearing for tool arguments.
Deployment blocker: a server on the LAN is reachable only from localhost. Silent — no log, recv-queue 0.
Filed as an OOM on small Macs, but it cuts the other way here: a hardcoded 32GB ceiling on a 256GB box leaves most of the machine unused.
Fixed, closed 2026-08-30. It mattered because a streaming tool call that ends without a terminator is exactly the shape that reads as a fabricated turn downstream. Kept listed so the fix is dated.
Same class as mlx-lm #1197: mlx-vlm handles a checkpoint the mlx-lm path does not.
Two allocators with different ideas of the budget. Relevant when hot-swapping checkpoints for A/B runs.
Client disconnects are routine in agentic work; leaked request state accumulates.
Observability. Without it there is no way to confirm a hit rate from the API — which is how #730 stayed silent.
Apple's own reference implementation, and the substrate almost everything MLX-shaped depends on. Treat it as the floor: an architecture with no model class here is absent from most of the MLX ecosystem at once. The bundled server is deliberately basic - one model, simple batching - so it is a correctness reference more than a serving layer.
stream_options.include_usage and prompt_tokens_details for cached prompt tokens.tool_calls are parsed and returned. It also implements logprobs and top_logprobs up to 11, which Ollama does not - a genuine inversion of the usual ordering.response_format, no json_schema and no grammar support anywhere in the server. If your agent depends on constrained decoding, this engine cannot give it to you.seed is set - so speculative decoding and concurrency are mutually exclusive here.The json_tools parser never matches, so the call is returned as plain text. Architecture-independent and specific to agent use.
load_model() ends with one mx.eval(model.parameters()), building a single enormous Metal command buffer. At ~390GB it hits kIOGPUCommandBufferCallbackErrorTimeout and the error escapes uncaught, hard-aborting the process. GLM-5.2 at 4-bit is 372-475GB.
Fixed upstream. #1784 makes decode evaluate cache state periodically and #1790 fixes the unevaluated graph in deepseek specifically; both merged, and this closed 2026-08-27. It was the general form of the DeepSeek V4 residency growth - any model class written that way leaked for the life of the process, aborting at around 11k generated tokens rather than failing on the first run.
A single-purpose C and Metal engine for DeepSeek V4 Flash, DeepSeek V4 PRO and GLM-5.2 - deliberately not a general GGUF loader, so only the published checkpoints load. In exchange it gets a disk KV cache that persists sessions across restarts, resident session batching, SSD expert streaming for machines too small to hold the weights, and tensor parallelism across two Macs over Thunderbolt RDMA. Where it applies, it is the fastest option here.
-m.stream_options.include_usage. In thinking mode reasoning streams on its own channel instead of being mixed into the final text, and the Responses surface emits the full Codex event lifecycle - response.output_text.delta, function-call argument events, and terminal response.completed / incomplete / failed.tools and tool_choice on all three surfaces. Schemas are rendered into DeepSeek's DSML format and generated calls mapped back. Tool calls stream incrementally: the header goes out as soon as the DSML invocation is recognised, then argument bytes are forwarded as tool_calls[].function.arguments deltas while generation continues.response_format or grammar support; correctness comes from DSML canonicalisation rather than constrained decoding.--batched-session N preallocates N resident KV sessions with fair scheduling, and idle slots persist to the disk KV cache before reuse. MTP speculative decoding is disabled while native session batching is active.--cors for browser clients; --host 0.0.0.0 is opt-in.Most agent clients are stateless - they resend a longer prompt each turn. If the session is not extended, the disk KV cache and prefix reuse stop paying, which is the main reason to run ds4.
Hits the distributed path specifically. If you are splitting DeepSeek V4 PRO or GLM-5.2 across two Macs, this is the first thing to check when the numbers look impossible.
Tokenization is pure fixed cost before any GPU work. An agent that pastes a file into the prompt pays it on every turn, and it does not show up in the tok/s figures.
Swap quantisations and the cache from the old weights can be restored against the new ones. Silent wrong-context, and it survives a restart because that is what the disk cache is for.
Unconfirmed. On a machine where the model already occupies most of RAM, a slow server-side leak ends as an OOM rather than as swap.
A single report without a resolved cause. Listed because a full-machine crash is a different risk class from a process crash.
You build from a moving main branch. The project describes itself as beta and fast-changing, so pin a commit yourself if you care about reproducibility.
A line-by-line MLX port of a dozen image model families, written from scratch rather than wrapping diffusers - FLUX.2, Z-Image, Qwen Image, Krea 2, Ideogram 4, FIBO and more, plus SeedVR2 for upscaling and Depth Pro for depth. It is deliberately minimal and explicit, and it is the most active image runtime on Apple Silicon by a distance. There is no server: you drive it from the CLI or import it, so putting it behind an API is your job.
Nothing server-wide tracked against this engine.
The centre of gravity for audio on Apple Silicon, and the largest catalogue on this page: twenty-odd TTS families, a similar spread of speech-to-text, speaker diarisation, speech enhancement and music generation. If an audio model has an MLX port at all, this is usually where it lives.
Nothing server-wide tracked against this engine.
Inference and finetuning for image, video and audio generation models. Same author as MLX-Audio. Worth checking the commit history before planning around it - it moves in bursts rather than continuously.
Nothing server-wide tracked against this engine.
Argmax's on-device image generation for Apple Silicon, covering both MLX and Core ML. Solid engineering, but it has not been touched since April 2025, so it predates every model added to this page and should be treated as a reference implementation rather than a live option.
Nothing server-wide tracked against this engine.
Disclaimer. All of this is best effort and provided for entertainment purposes only. No warranty is given as to its accuracy. Benchmark scores are vendor- or aggregator-reported and are not reproduced here; issue states are a twice-daily snapshot; hardware figures are arithmetic, not measurements. Verify anything you intend to spend money on.