MLX models for LocalLM Lab
Which open-weight models to download for a 24 GB MacBook Air and a 64 GB Mac Studio, what we've tested, and what's next. Updated 2026-10-22. How local models work, and how we test them: Local AI Models on Apple Silicon.
Updated 2026-10-22. Results are for LocalLM Lab 2.1.0 GA on a 64 GB Mac Studio unless a row says otherwise; rows with times on the Air come from LocalLM Lab 2.0. 2.1.0 GA runs mlx-swift-lm at 30d755c (upstream main plus a fix of ours for Qwen3 tool calls inside an unclosed <think> block). Gemma 4 list arguments, gpt-oss tool calls and Muse Glimmer need 2.1.0 GA; on 2.0 they don't work. LocalLM Lab 2.2.0 GA runs mlx-swift-lm at dea880a: 30d755c plus Nemotron 3.5 support and nothing else, so the 2.1.0 GA results hold on 2.2.0 GA. Nemotron 3.5 needs 2.2.0 GA, and its rows were tested on it. Sizes are the checkpoint's weight files on Hugging Face as of October 2026, not the repo's usedStorage (which can count old revisions twice — Qwen3-14B-4bit reports 16.6 GB but downloads 8.3 GB).
Every result here is a point in time. Conversions, chat templates and the runtime all move, so check your own model with the SDK's MLXModelProvider.capabilityProbe before building on it.
Target Macs
| Mac | Memory | Comfortable weights | Tight | Too big |
|---|---|---|---|---|
| MacBook Air (M3) | 24 GB | up to 12 GB | 12 – 16.8 GB | over 16.8 GB |
| Mac Studio (M5 Max) | 64 GB | up to 32 GB | 32 – 44.8 GB | over 44.8 GB |
- Comfortable is about half of memory: inference needs room for context and activations on top of the weights, and macOS needs its share.
- Tight loads, but long prompts or a second app can push it into a stall. LocalLM Lab warns before downloading anything over half of memory, and 70% is where the SDK's own check (
MLXModelProvider.validate) flags a model as too big. - The Air has no fan. A long generation slows down as it heats up, so judge its speed on short and medium prompts.
- A mixture-of-experts (MoE) model, marked MoE below, needs memory for all its weights but only computes a few billion parameters per token. It is much faster than a dense model of the same size, so on the Studio it is often the better trade.
Have a Mac with 128 GB or more? Help us test the bigger models. Several models the app's runtime supports are too big for our Macs, such as GLM 4.5 Air (60 GB), Mistral Small 4 119B (68 GB) and Mistral Medium 3.5 128B (78 GB); their repo ids are under Won't run in the app. Run them through the test protocol and send your results to neuron@thisbrain.ai or share them on our Discord. Tell us your Mac and its memory, and we'll add your results to this page with full attribution.↑ Top
Our picks
| Use | MacBook Air 24 GB | Mac Studio 64 GB |
|---|---|---|
| Everyday chat with tools | mlx-community/Qwen3-8B-4bit | mlx-community/Qwen3.8-27B-4bit |
| Best grounding (cites tool results exactly) | mlx-community/gemma-4-12B-it-OptiQ-4bit | mlx-community/gemma-4-31b-it-4bit |
| Fast with tools | mlx-community/Qwen3-4B-4bit | mlx-community/Qwen3-30B-A3B-Instruct-2507-4bit |
| Highest quality that fits | mlx-community/Qwen3-14B-4bit | mlx-community/Qwen3.8-27B-8bit |
Decider (lab.decide, JevDK) | mlx-community/Qwen3-4B-4bit | mlx-community/Qwen3-4B-4bit |
| Speed helper (draft model) | mlx-community/Qwen3-0.6B-4bit | mlx-community/Qwen3-0.6B-4bit |
Every pick is a tested row below. For a smaller grounding pick on the Air, Ministral-3-14B-Instruct-2512-mxfp4 (8.0 GB) passed every test twice.
How to read the tables
Tool use
- ✅ Reliable — called the right tools and grounded its answer in what came back.
- ⚠️ Partial — calls tools, but the wrong ones, inconsistently, or the call is never dispatched; or invents details the tools didn't return.
- ❌ No tools — loads and answers, but never calls a tool.
- 🚫 Won't load or Too big — the app's runtime can't load it, the repo is broken, or it's too big for either Mac.
- 🧪 Not tested yet — a candidate: the runtime supports its architecture and we've checked its size, but haven't run it.
Fit — ✅ comfortable, ⚠️ tight, ❌ too big, using the limits in Target Macs.
Format — the model_type from the checkpoint's config.json, and the tool-call parser the runtime picks for it. A model whose format has no parser can't call tools in the app, however good it is.
Qwen
The reference family: the MLX bridge was built against Qwen's tool-call convention, and the Qwen3 models call tools reliably at every size we tried. Qwen3.5 is less steady: see its rows.
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/Qwen3-4B-4bit | 2.3 GB | Fits | Fits | Reliable | qwen3 · json | The decider default: about 150 ms for four questions. Pairs with Qwen3-0.6B-4bit as a speed helper (17–25% faster on the Air). |
mlx-community/Qwen3-8B-4bit | 4.6 GB | Fits | Fits | Reliable | qwen3 · json | 360 s on the GitHub test on the Air. Dropped 2 of 3 releases and guessed a timeframe. code-buddy's default. |
mlx-community/Qwen3-14B-4bit | 8.3 GB | Fits | Fits | Reliable | qwen3 · json | 245 s on the Air — faster than 8B on the same prompt. Release dates to the day only. |
mlx-community/Qwen3.8-27B-4bit | 16.1 GB | Tight | Fits | Reliable | qwen3_5 · xml_function | All four tests passed on the Studio, every commit cited correctly. Slow on GitHub, 617 s, because it reads every page of commits; shows its reasoning before the answer. On the Air (LocalLM Lab 2.0) it hit the 10-minute timeout without answering. Loads as a vision model. 92% on triage questions as a decider, but about 1.2 s per case. |
lmstudio-community/Qwen3.8-27B-MLX-6bit | 22.8 GB | Too big | Fits | Reliable | qwen3_5 · xml_function | Confirmed on the Studio. |
mlx-community/Qwen3.8-27B-8bit | 29.5 GB | Too big | Fits | Reliable | qwen3_5 · xml_function | Confirmed on the Studio. Needed the 1.0.0 GA preflight fix, which stopped it being counted as 58.1 GB. |
mlx-community/Qwen3-1.7B-4bit | 1.0 GB | Fits | Fits | Partial | qwen3 · json | Calls the right tools, but its GitHub answer cites no commits and puts releases on the wrong days; Context7 stopped after the first call. Echo and HF passed. Too small for grounded answers. |
mlx-community/Qwen3-4B-Instruct-2507-4bit | 2.3 GB | Fits | Fits | Partial | qwen3 · json | Fast (9 s on GitHub, no thinking pass) and named the releases correctly, but cites commits only vaguely ("7 commits in two days"). Context7 stopped after the first call, and in one of two runs it answered HF from a search instead of the repo details and missed the facts. Echo passed. |
mlx-community/Qwen3.5-4B-MLX-4bit | 3.0 GB | Fits | Fits | Partial | qwen3_5 · xml_function | Echo and Context7 passed. On GitHub it never finished: one run stopped mid-plan, the other made 8 calls and returned an empty answer. Its HF answer missed the Gemma license. Shows its reasoning. Qwen3.5-9B did better in the scripted run, but its tool calls now usually fail (see its row). |
mlx-community/Qwen3.5-9B-MLX-4bit | 6.0 GB | Fits | Fits | Partial | qwen3_5 · xml_function | Tool calls usually fail in later testing: the turn ends with a rejected tool call (malformed_syntax), even for a tool with no arguments (known issue, under investigation). In the scripted run on 2.1.0 GA all four tests passed both times, with accurate GitHub answers, so it can do the work when its calls parse. 35 s on GitHub with the Studio idle. Shows its reasoning in the answer. Fine for chat without tools; for tool use, pick another model until this is fixed. |
mlx-community/Qwen3.6-27B-4bit | 16.1 GB | Tight | Fits | Reliable | qwen3_5 · xml_function | All four tests passed. Its GitHub answer (115 s) cited 12 real commit messages with exact times and all three releases, nothing invented. Shows its reasoning. Qwen3.8-27B is the newer pick at the same size. |
mlx-community/Qwen3-30B-A3B-Instruct-2507-4bit | 17.2 GB | Too big | Fits | Reliable | qwen3_moe · json | MoE, 3B active. All four tests passed, the fastest GitHub answers (10 s idle). Misread the release order both times, calling v1.0.0 the latest (it was the first). No visible reasoning. Not as a decider (MoE). |
mlx-community/Qwen3.6-35B-A3B-4bit | 20.4 GB | Too big | Fits | Partial | qwen3_5_moe · xml_function | MoE, 3B active. Right tools every time, but the first GitHub answer invented 5 of 14 commits, hashes and messages included; the second (28 s) invented none. Treat its grounding as unreliable. Echo, HF and Context7 passed both times. Shows its reasoning. |
mlx-community/Qwen3-Coder-30B-A3B-Instruct-4bit | 17.2 GB | Too big | Fits | Partial | qwen3_moe · json | MoE, 3B active. Echo and HF passed, but on GitHub its call was cut off before it was complete (the turn failed), and the Context7 test produced nothing for 15 minutes and was stopped. A coding model; not reliable for general tool use in the app. |
mlx-community/Qwen3-Coder-Next-4bit | 44.8 GB | Too big | Tight | Reliable | qwen3_next · xml_function | MoE. All four tests passed. Its GitHub answer (31 s) cited real commits and placed v1.0.0 correctly as the first release; one slip, saying the last commit came "over a day" after the last release (it was 12 hours). Coding model, right at the Studio's 70% limit (44.8 GB). |
mlx-community/Qwen2.5-1.5B-Instruct-4bit | 0.9 GB | Fits | Fits | Reliable | qwen2 · json | The original baseline. Calls tools, grounds shallowly. Pairs with Qwen2.5-0.5B-Instruct-4bit. |
Gemma
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/gemma-4-12B-it-OptiQ-4bit | 9.0 GB | Fits | Fits | Reliable | gemma4_unified · gemma4 | All four tests passed; the GitHub answer (22 s) matched five real commits to the right hashes and gave every release time correctly, nothing invented. |
mlx-community/gemma-4-e4b-it-4bit | 5.1 GB | Fits | Fits | Partial | gemma4 · gemma4 | Asks for confirmation instead of calling the GitHub tools in some tries (2 of 3 on 2.0's runtime, 1 of 3 on 2.1.0 GA's); accurate when it does call them. List arguments arrive garbled on 2.0 and clean from 2.1.0 GA, where HF, echo and Context7 all passed. |
mlx-community/gemma-4-26b-a4b-it-4bit | 15.3 GB | Tight | Fits | Reliable | gemma4 · gemma4 | MoE, 4B active. All four tests passed, every release time correct, 10 s on GitHub. On LocalLM Lab 2.0 tools that take a list fail: the HF test looped through 16 calls, and the GitHub answer had wrong dates. Needs 2.1.0 GA. |
mlx-community/gemma-4-31b-it-4bit | 18.4 GB | Too big | Fits | Reliable | gemma4 · gemma4 | All four tests passed. Its GitHub answer (36 s) is one of the best yet: real commit hashes matched to the right messages, all three release times correct, nothing invented. Studio only. Needs 2.1.0 GA for tools that take lists. |
Mistral
Two things to know before picking a Mistral checkpoint:
- Most of mlx-community's December 2025 Ministral 3 conversions are broken. Their
model.safetensors.index.jsonnames weight files the repo doesn't have, so nothing can load them. As of October 2026, every quantized 8B and 14B Instruct repo and every quantized Reasoning repo is broken; every 3B Instruct repo is intact. For the 14B, use the later MXFP4, MXFP8 or NVFP4 conversions. There is no intact quantized 8B Instruct. - Only the newer
mistral3models get Mistral's tool-call parser. Older checkpoints (model_typemistral: Mistral 7B, Nemo, Magistral, Codestral) get the default JSON parser, but their templates write Mistral's[TOOL_CALLS]syntax. Expect the gpt-oss result: a correct call that is never dispatched. Test before relying on one. (That's on LocalLM Lab 2.0's45693f6. From 2.1.0 GA the runtime picks the Mistral parser from the template. But Mistral 7B v0.3 writes the older[TOOL_CALLS] [{…}]list form, which that parser rejects, so its calls still fail. For tools, use a Ministral 3 model.)
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/Ministral-3-3B-Instruct-2512-4bit | 2.7 GB | Fits | Fits | Reliable | mistral3 · mistral | Cleanest grounding after Gemma 4: every commit and release correct, nothing invented. 51 s on the Air. |
mlx-community/Ministral-3-14B-Instruct-2512-mxfp4 | 8.0 GB | Fits | Fits | Reliable | mistral3 · mistral | The intact way to get the 14B (the 4-bit repo is broken); MXFP4 loads fine. All four tests passed. The first GitHub answer attached one commit message to the wrong commit; the second was accurate. 25 s on GitHub, idle. |
mlx-community/Ministral-3-14B-Instruct-2512-mxfp8 | 14.8 GB | Tight | Fits | Reliable | mistral3 · mistral | All four tests passed (35 s on GitHub): all three releases right, dates to the day, nothing invented. The 8-bit-class version of the 14B for the Studio. |
mlx-community/Mistral-Small-3.2-24B-Instruct-2506-4bit | 13.3 GB | Tight | Fits | Reliable | mistral3 · mistral | The conversion ships no tool-capable template, so 2.1.0 GA supplies Mistral's own format for it. All four tests passed; the GitHub answer (30 s) cited five real commit messages and all three releases by name, dates to the day, nothing invented. |
mlx-community/Mistral-Small-3.2-24B-Instruct-2506-8bit | 25.0 GB | Too big | Fits | Partial | mistral3 · mistral | This conversion has no chat template at all; 2.1.0 GA supplies Mistral's tool format, and its capability check now finishes (it used to run for over 30 minutes). Echo, HF and Context7 passed, but its GitHub answer called v1.0.0 the latest release (it was the first) and cited only two commits. The 4-bit did better. |
mlx-community/Devstral-Small-2-24B-Instruct-2512-4bit | 15.1 GB | Tight | Fits | Reliable | mistral3 · mistral | All four tests passed (37 s on GitHub) with real commits and releases, nothing invented, though its conclusion contradicted itself on how often releases happen. Coding and agent model. |
mlx-community/Devstral-Small-2-24B-Instruct-2512-8bit | 26.6 GB | Too big | Fits | Partial | mistral3 · mistral | Weaker than the 4-bit in our run: echo and HF passed and its GitHub answer named all three releases, but cited no specific commits; on Context7 it wrote resolve-library-id[ARGS]{…} without the [TOOL_CALLS] marker, so nothing ran. One run each, so treat the difference from the 4-bit as tentative. |
lmstudio-community/Magistral-Small-2507-MLX-4bit | 13.3 GB | Tight | Fits | Reliable | mistral · json (default) | All four tests passed (37 s on GitHub). Cited real commits with links and all three releases, dates to the day, nothing invented. On 2.1.0 GA the runtime picks Mistral's parser from its template, and Magistral writes the newer call format it reads. |
mlx-community/Mistral-7B-Instruct-v0.3-4bit | 4.1 GB | Fits | Fits | No tools | mistral · mistral | No tool calling in the app; use Ministral 3 instead. Its calls use the old [TOOL_CALLS] [{…}] list form: printed as raw text on LocalLM Lab 2.0, rejected as malformed from 2.1.0 GA. A drafted runtime patch parses them, but this 2024 conversion's chat template also drops the tool result, so a tool loop still fails. The newer mlx-community/Mistral-7B-Instruct-v0.3-mlx-4Bit ships the current template; untested. |
mlx-community/Mistral-Nemo-Instruct-2407-4bit | 6.9 GB | Fits | Fits | No tools | mistral · json (default) | Confirmed: no chat template, so no tool calls in any test; on GitHub it invents a history instead. |
mlx-community/Mixtral-8x7B-Instruct-v0.1-4bit | 26.3 GB | Too big | Fits | Won't load | mixtral · json (default) | MoE, 13B active. Downloads and loads, but its chat template throws an error on even a plain prompt, so it can't answer in the app. |
mlx-community/Codestral-22B-v0.1-4bit | 12.5 GB | Tight | Fits | No tools | mistral · json (default) | No chat template, so the app falls back to plain text; in the capability probe it answered but never made a tool call. Code completion only. Non-production license. |
mlx-community/Ministral-3-8B-Instruct-2512-4bit | 5.6 GB | Fits | Fits | Won't load | mistral3 · mistral | Broken upstream: the index names 3 weight files, the repo has 2. The 5-, 6- and 8-bit and bf16 have the same problem. |
mlx-community/Ministral-3-14B-Instruct-2512-4bit | 8.4 GB | Fits | Fits | Won't load | mistral3 · mistral | Broken upstream, like the 8B. Use the MXFP4 conversion above. |
mlx-community/Ministral-3-3B-Reasoning-2512-4bit | 2.7 GB | Fits | Fits | Won't load | mistral3 · mistral | Broken upstream, like every quantized Reasoning repo (only the bf16 ones are intact). |
mlx-community/Ministral-3-8B-Reasoning-2512-4bit | 5.6 GB | Fits | Fits | Won't load | mistral3 · mistral | Broken upstream. |
mlx-community/Ministral-3-14B-Reasoning-2512-4bit | 8.4 GB | Fits | Fits | Won't load | mistral3 · mistral | Broken upstream. |
Granite
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/granite-4.0-h-tiny-4bit | 3.9 GB | Fits | Fits | Partial | granitemoehybrid · json | Calls tools, but picked get_file_contents and get_latest_release instead of the history tools, so half the answer was made up. 26 s on the Air. Retest with the tools named. |
mlx-community/granite-4.1-3b-4bit | 2.1 GB | Fits | Fits | Partial | granite · json | Only echo passed. On GitHub, HF and Context7 it called tools it hadn't been offered, so each turn failed; the capability probe's call was cut off. Not usable for tool work. |
mlx-community/granite-4.1-8b-4bit | 5.2 GB | Fits | Fits | Partial | granite · json | Much better than the 3B: echo and Context7 passed, and its GitHub answers had every release time right. But both runs garbled a commit hash and attached it to the wrong message, and its HF answers missed a fact. |
GLM
Zhipu AI's GLM models (MIT license). The GLM tool-call format has its own parser in the runtime, and LocalLM Lab 2.1.0 GA also reads GLM-4-0414's calls, which come without the usual markers. GLM 4.6V and 4.1V use a vision architecture (glm4v) the runtime doesn't support, GLM 5.2 and 5.3 use glm_moe_dsa (also unsupported, and over 400 GB), and GLM-OCR is a text-recognition model, not a chat model.
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/GLM-4-9B-0414-4bit | 5.3 GB | Fits | Fits | Partial | glm4 · glm4 | Needs 2.1.0 GA, which passes tool results in GLM's own observation role. Echo, HF and Context7 passed. On GitHub it described the real commits accurately but never fetched the releases, and answered in Chinese to an English prompt. |
mlx-community/GLM-Z1-9B-0414-4bit | 5.3 GB | Fits | Fits | No tools | glm4 · glm4 | No call ever dispatched: it writes GLM's markerless call (get_latest_release plus JSON) inside its reasoning, which the parser doesn't pick up. Shows its reasoning. |
mlx-community/GLM-4-32B-0414-4bit | 18.3 GB | Too big | Fits | Partial | glm4 · glm4 | Needs 2.1.0 GA, which passes tool results in GLM's own observation role. Echo, HF and Context7 passed. On GitHub it wrote a plan followed by two calls (list_commits, then list_releases) as text in one reply, which the parser didn't pick up, so nothing ran. |
mlx-community/GLM-4.7-Flash-4bit | 16.9 GB | Tight | Fits | Partial | glm4_moe_lite · glm4 | MoE. HF and Context7 passed, but on the echo test it wrote a garbled GLM call (<arg_value> tags with no tool name or key) that never dispatched, and the GitHub test produced nothing for 15 minutes and was stopped. Shows its reasoning. |
mlx-community/GLM-4.7-Flash-6bit | 24.3 GB | Too big | Fits | Reliable | glm4_moe_lite · glm4 | MoE. Unlike the 4-bit, all four tests passed. Its GitHub answer (27 s) cited real commits with correct times and all three releases, nothing invented. Shows its reasoning. Studio only. |
mlx-community/GLM-4.7-Flash-8bit | 31.8 GB | Too big | Fits | Reliable | glm4_moe_lite · glm4 | MoE. All four tests passed. Its GitHub answer (129 s, it read several pages) summarized the commits accurately and placed v1.0.0 correctly as the first release, nothing invented. Shows its reasoning. Like the 6-bit, unlike the 4-bit. |
Other families
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/NVIDIA-Nemotron-3-Nano-4B-4bit | 2.2 GB | Fits | Fits | Partial | nemotron_h · xml_function | Echo, HF and Context7 passed. Its GitHub answers are vague: one release named, two commits cited, and in an earlier run a commit table with a repeated hash and wrong times. Shows its reasoning. NVIDIA license. |
mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-4bit | 17.8 GB | Too big | Fits | Reliable | nemotron_h · xml_function | MoE, 3B active. Needs LocalLM Lab 2.2.0 GA. Tested in the app on 2.2.0 GA: calls tools, including the GitHub MCP server, like the 8-bit. The four scripted tool tests haven't been run. The comfortable Nemotron 3.5 choice for the 64 GB Studio. Shows its reasoning unless thinking is off. NVIDIA license. |
mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit | 33.6 GB | Too big | Tight | Reliable | nemotron_h · xml_function | MoE, 3B active. Needs LocalLM Lab 2.2.0 GA. Tested in the app on 2.2.0 GA: calls tools, including the GitHub MCP server. The four scripted tool tests haven't been run. Shows its reasoning unless thinking is off. NVIDIA license. |
rapid-mlx/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-MLX-3bit | 31.7 GB | Too big | Fits | Reliable | nemotron_h_puzzle · xml_function | MoE, 9B active. Needs LocalLM Lab 2.2.0 GA. Tested in the app on 2.2.0 GA: calls tools, including the GitHub MCP server. The four scripted tool tests haven't been run. About 9–12 tokens/s, 34.7 GB peak memory. Text only: the Bolt builds that take images (nemotron_h_omni) don't load. NVIDIA license. |
rapid-mlx/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-MLX-3bit | 42.7 GB | Too big | Tight | Reliable | nemotron_h · xml_function | MoE, 12B active. Needs LocalLM Lab 2.2.0 GA. Tested in the app on 2.2.0 GA: calls tools, including the GitHub MCP server. The four scripted tool tests haven't been run. Tight on the 64 GB Studio: close other large apps. Text only: this conversion drops the vision part, despite the name. NVIDIA license. |
Duckets/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-MLX-4bit | 43.1 GB | Too big | Tight | Won't load | nemotron_h_omni | MoE. On 2.2.0 GA it downloads, then fails to load: "Unsupported model type: nemotron_h_omni". This is the image-taking Bolt build, which the runtime doesn't support yet. Use the rapid-mlx 3-bit text build instead. |
txgsync/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-MLX | 24.1 GB | Too big | Fits | Won't load | nemotron_h_nano_omni | MoE. On 2.2.0 GA it fails to load: "Unsupported model type: nemotron_h_nano_omni", another image-taking variant the runtime doesn't support yet. |
nativ-community/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-mxfp4 | 40.8 GB | Too big | Tight | Won't load | nemotron_h_omni | MoE. On 2.2.0 GA the download fails its integrity check: model-00008-of-00008.safetensors doesn't match the hash Hugging Face reports, so it isn't kept. It's also the image-taking nemotron_h_omni build, so it wouldn't load even if it downloaded. |
hermitdave/Nemotron-3.5-Bolt-74B-A9B-MLX-mixed36 | 36.1 GB | Too big | Tight | Won't load | nemotron_h_puzzle | MoE. A mixed 3/6-bit conversion. On 2.2.0 GA it fails to load: the runtime can't read its per-layer quantization settings in config.json ("Type mismatch at 'quantization.method'"). |
mlx-community/LFM2.5-2.6B-4bit | 1.5 GB | Fits | Fits | Won't load | lfm2 · lfm2 | Fails to load: the runtime's LFM2 code expects weights this conversion doesn't have (operator_norm, feed_forward.w2). LFM license. |
mlx-community/LFM2.5-8B-A1B-MLX-4bit | 4.8 GB | Fits | Fits | Partial | lfm2_moe · lfm2 | MoE, 1B active. Echo and HF passed, quickly. The GitHub test looped through 16 calls without answering, and on Context7 it called a tool it wasn't offered (the turn fails cleanly). LFM license. |
LiquidAI/LFM2.5-8B-A1B-MLX-4bit | 4.8 GB | Fits | Fits | Reliable | lfm2_moe · lfm2 | MoE, 1B active. Liquid AI's own conversion. Tested in the app on 2.2.0 GA on the Studio: uses the GitHub MCP server's tools successfully. The four scripted tool tests haven't been run, and its speed on the Air isn't measured yet. LFM license. |
LiquidAI/LFM2.5-8B-A1B-MLX-8bit | 9.0 GB | Fits | Fits | Reliable | lfm2_moe · lfm2 | MoE, 1B active. Liquid AI's own 8-bit conversion. Tested in the app on 2.2.0 GA on the Studio: uses the GitHub MCP server's tools successfully, like the 4-bit. The four scripted tool tests haven't been run, and its speed on the Air isn't measured yet. LFM license. |
LiquidAI/LFM2.5-24B-A2B-MLX-8bit | 25.5 GB | Too big | Fits | Reliable | lfm2_moe · lfm2 | MoE, 2B active. Liquid AI's own conversion. Tested in the app on 2.2.0 GA on the Studio: uses the GitHub MCP server's tools successfully. The four scripted tool tests haven't been run. LFM license. |
mlx-community/Olmo-3-7B-Instruct-4bit | 4.1 GB | Fits | Fits | No tools | olmo3 · json | Never called a tool, in any test or the capability probe. On GitHub it wrote a "hypothetical" answer with invented dates and commit hashes. |
mlx-community/Olmo-3.1-32B-Instruct-4bit | 18.1 GB | Too big | Fits | No tools | olmo3 · json | No call ever dispatched. It tries (on echo its call was rejected as malformed) and on GitHub it describes the calls it would make without making them. Like OLMo 3 7B, its call format doesn't match what the runtime parses. |
mlx-community/Llama-3.1-8B-Instruct-4bit | 4.5 GB | Fits | Fits | Partial | llama · llama3 | Needs 2.1.0 GA, which keeps one tool call per turn for its template. Echo passed, but the model itself is weak at tools: its GitHub answer mixed up the latest commit with a release and called v1.0.0 the latest release, the HF test repeated the same lookup, and on Context7 it called the second tool before the first. |
mlx-community/MiMo-V2.6-Distill-Qwen-9B-OptiQ-4bit | 7.1 GB | Fits | Fits | Partial | qwen3_5 · xml_function | Downloads only with the 2.1.0 GA download fix (its repo has an optiq/ subfolder). A good GitHub answer (real commits, releases, a sound conclusion) and Context7 passed, but on the echo test it wrote the arguments as plain JSON instead of a call and then described a result it never got, and its HF answer missed the Gemma license. Shows its reasoning. |
mlx-community/Muse-Glimmer-30B-4bit | 19.4 GB | Too big | Fits | Reliable | muse_glimmer · atem | Dense 30B agent model from Meta (Apache-2.0). Needs LocalLM Lab 2.1.0 GA: 2.0 can't load it. On 2.1.0 GA all four tests passed; the GitHub answer was accurate, with full hashes and dates, but took 525 s over 15 tool calls (it reads every page). Too big for the Air at any quantization. -mxfp4 (18.5 GB) and -nvfp4 (19.4 GB) are the same size class. |
mlx-community/Muse-Glimmer-30B-8bit | 33.4 GB | Too big | Tight | Reliable | muse_glimmer · atem | Needs 2.1.0 GA. All four tests passed, with exact commit hashes and times, all matching the repository. One slip: it said development continued "more than 32 hours" after the last release (it was 12). Slow: 377 s on GitHub, 103 s on Context7. The 4-bit is faster with the same accuracy. |
mlx-community/gpt-oss-20b-MXFP4-Q4 | 11.2 GB | Fits | Fits | Partial | gpt_oss · harmony | On LocalLM Lab 2.0 its Harmony-format calls show up as raw text. On 2.1.0 GA calls dispatch; echo and Context7 passed. On GitHub it called the right tools and got every release time right, but attached the wrong messages to several commits (one hash three times). The HF test failed with "Failed to parse generated content". 26 s on GitHub. |
Can't use tools
We tested these and found they don't call tools in the app: they load and answer, but never use a connector or MCP server. Fine for plain chat. Other models with ❌ No tools are listed with their family above.
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/phi-4-4bit | 8.2 GB | Fits | Fits | No tools | phi3 · json | Its chat template has no tool support. Says so honestly instead of inventing an answer. |
mlx-community/Phi-4-mini-instruct-4bit | 2.2 GB | Fits | Fits | No tools | phi3 · json | Its template expects tools inside the system message, which the runtime doesn't do, so the model never sees them. |
mlx-community/SmolLM3-3B-4bit | 1.7 GB | Fits | Fits | No tools | smollm3 · json | Template expects xml_tools, which the runtime doesn't set. Then invents dates and counts. |
mlx-community/DeepSeek-R1-Distill-Qwen-14B-4bit | 8.3 GB | Fits | Fits | No tools | qwen2 · json | No working tool convention in the template. Invents a full commit and release history. |
mlx-community/DeepSeek-R1-Distill-Qwen-7B-4bit | 4.3 GB | Fits | Fits | No tools | qwen2 · json | As the 14B. |
mlx-community/DeepSeek-R1-Distill-Llama-8B-4bit | 4.5 GB | Fits | Fits | No tools | llama · llama3 | As the 14B, on a Llama base: the gap is DeepSeek's template, not the base. |
mlx-community/DeepSeek-V2-Lite-Chat-4bit-mlx | 8.8 GB | Fits | Fits | No tools | deepseek_v2 · json | Fastest run we measured (12 s), but no tool concept in its template. |
Won't run in the app
| Model | Size | Air 24 GB | Studio 64 GB | Tool use | Format | Notes |
|---|---|---|---|---|---|---|
mlx-community/Mistral-Small-4-119B-2603-OptiQ-2bit | 45.8 GB | Too big | Too big | Too big | mistral3 · mistral | MoE. Just over the Studio's preflight limit even at 2-bit; the 4-bit is 67.8 GB. |
mlx-community/Mistral-Medium-3.5-128B-4bit | 78.0 GB | Too big | Too big | Too big | mistral3 · mistral | Supported, too big for either Mac. |
mlx-community/Devstral-2-123B-Instruct-2512-4bit | 70.3 GB | Too big | Too big | Won't load | ministral3 | Architecture name not in the runtime, and too big anyway. |
mlx-community/Qwen3.8-Flash-Next-4bit | 111.5 GB | Too big | Too big | Won't load | qwen4_exp | Architecture not in the runtime, and too big for either Mac. |
mlx-community/Qwen3.8-27B-MTP-4bit | 0.2 GB | Fits | Fits | Won't load | qwen3_5_mtp | Not a model on its own: a multi-token-prediction head for Qwen3.8-27B. |
mlx-community/GLM-5.3-Flash-4bit | 204 GB | Too big | Too big | Won't load | glm5_next | Architecture not in the runtime. |
mlx-community/GLM-4.5-Air-4bit | 60.2 GB | Too big | Too big | Too big | glm4_moe · glm4 | Supported, but over the Studio's preflight limit despite the name. |
mlx-community/DeepSeek-V4-Flash-4bit | 489 GB | Too big | Too big | Too big | deepseek_v3 · json | Supported, far too big for any desktop Mac. |
Speed helpers and adapters
Pairs that ran end to end on the Air in a release build. Speed depends on the Mac and the pair, so measure yours.
| Model | Companion | Result |
|---|---|---|
mlx-community/Qwen3-4B-4bit | Speed helper mlx-community/Qwen3-0.6B-4bit, 2 tokens ahead | About 17–25% faster once warmed up. The SDK's reference app measured 30–40% on other hardware. |
mlx-community/Qwen2.5-1.5B-Instruct-4bit | Speed helper mlx-community/Qwen2.5-0.5B-Instruct-4bit | Loads and is used; speed not measured. |
mlx-community/Qwen3-4B-4bit | Speed helper mlx-community/Qwen2.5-0.5B-Instruct-4bit (a different family that shares Qwen's vocabulary) | Loads and is used; speed not measured. |
mlx-community/Qwen3-0.6B-bf16 | Adapter stbenjam/qwen3-0.6b-haiku-mlx-lora | Replies come back as haiku-style verse, the same each time at temperature 0. |
To try on the Studio: Qwen3-0.6B-4bit as a helper for Qwen3-8B-4bit and Qwen3-14B-4bit, and Qwen3.5-0.8B-4bit as a helper for Qwen3.8-27B-4bit (same qwen3_5 vocabulary — check before relying on it).
Test protocol
- Fit and load. Add the model by repo id in LocalLM Lab's Add Model sheet. Note the preflight result and whether it loads. A load failure with a missing weight file is usually the repo, not the app: compare its
model.safetensors.index.jsonwith its file list. - Tool use.
- Run the four tool tests below.
- Record the tools called and the elapsed time.
- Check every commit, release and fact the answer cites against the source.
- Treat any invented detail as a finding, even in an otherwise good answer.
- Speed. Run the Benchmark switch on the same pasted text for each model on a given Mac, and record time to first token and tokens per second from a warmed-up run.
- Record. Keep the full trace, then update the model's row here. Tried a model that isn't listed? Send us your results at neuron@thisbrain.ai.
The four tool tests
Each test is a single prompt with only the named tools turned on. GitHub times on this page are the GitHub test, start to answer.
- Echo: the local test MCP server's
echotool, asked to echo a marker. Checks that a tool call gets through at all. - GitHub: the GitHub MCP server with
list_commits,list_releasesand a few other read-only tools, and this prompt, which names no tool:Repository: humanizer. Owner: ancientcomputing. Use the GitHub MCP server. Look at the repository's recent commit history and its release history, and tell me: has this project been more active in development recently than its release cadence suggests, or vice versa? Support your answer with specific commits and release dates.
- HF: the Hugging Face MCP server's
hub_repo_details, asked for the license and task tag of two model repos. The answers are exact, so they're easy to check. - Context7:
resolve-library-idthenquery-docs, asked for code from a library's documentation. The second call needs the ID the first returns, so it checks chaining.