Model family← Models
LFM2.5-24B-A2B
Liquid AI's 24-billion-parameter agent model, with about 2.45 billion at work on each token. Fast and light on memory. On our tool test it reached for an offered tool every time, but it also wrote tool calls where none were offered, which sank its judging scores.
- Files tested
- 1
- Scored runs
- 30
Made by Liquid AI · LFM1.0
How this page was made. The tests run automatically on our Mac Studio, and every score here comes straight from those runs. This overview was written by Claude, an AI model, from the lab's own records: the run log, notes kept at the time, and the working sessions where each decision was made. Quotes are Alan's words, with spelling fixed. How these pages are made.
Why we tested it
Liquid AI released it in October 2026 for agent work and tool calling on your own device. It has about 24 billion parameters but uses about 2.45 billion for each token it writes. It is a different model from LFM2.5-8B-A1B, which we tested earlier.
Our scan of new releases on 23 October found it the strongest new candidate alongside Flint. Liquid AI's card compares it favourably with Qwen3.6-35B-A3B, our coding model, on agent and tool tests, for example 80.71 against 75.02 on ToolSandbox. Alan's go-ahead: "yes, follow new guidelines for benchmarking though".
What it took
Nothing unusual. llama.cpp already knew its design, and we ran it on the same build as Flint. We used Liquid AI's own 13.6 GB Q4_0, a checkpoint trained to work in that format, the one our Mac Studio decodes fastest.
The first run gave it four conversations at once, with 16K of context each; we keep it for reference. Then Alan set the rule our benchmarks now follow: "we should only have one slot running on any benchmark, once tested we decide context and slots if it's worth it". The run of record gave it one conversation at a time, with 64K.
What happened
- It reached for the tool in every case of our tool test. On our test of what makes a model reach for a tool it scored 100% (60 of 60), however the tool was framed, even when it was never mentioned. Choosing among many tools, 100% (40 of 40); picking and chaining them, 86.7% (13 of 15).
- It also wrote tool calls where no tools were offered. In three tests without tools, many answers contained its own tool-call markup, written out as text: 43 of 60 when judging another model's extractions, 30 of 48 when answering from a given document, 18 of 40 when weighing sources.
- That sank its judging scores. Judging extractions, it scored 25.0% (15 of 60); most answers held no verdict. Where it did give one, it was right 15 times in 19. We checked the test before believing the score: on the same cases Flint gave a well-formed verdict 60 times in 60.
- It trailed Flint on most tests. Run the same way, it scored lower on 11 of 15, higher on three tool tests, and tied on one. Saying a value isn't there, it scored 44.4% (32 of 72) against Flint's 70.8% (51 of 72); tagging conversations by fixed rules, 62.1% (149 of 240) against 82.1% (197 of 240).
- It was fast and light. It wrote 102.5 tokens a second and read 763.3 (medians, one conversation, other models loaded), against Flint's 74.2 and 345.2. It peaked at 13.9 GB with 64K of context allocated, and held 15.3 GB started at its full 128K. Only 10 of its 40 layers keep memory for each token of conversation, about 20 KB a token; the rest hold a fixed state.
- The reference run slipped less. With four conversations of 16K, it wrote stray tool calls in 23 of the 60 judging answers rather than 43, and scored 48.3% (29 of 60). One run each, so we can't say why.
What it taught us
- The same reflex can help and hurt. The habit that gave it 60 of 60 on our tool test put tool calls where no tool was offered. Flint, run the same way, was its mirror image: it seldom used a tool unless told to.
- Check the test before trusting a score that looks wrong. Here the fault was the model's.
Should you use it?
As a fast dispatcher in loops where calling a tool is always right, it may suit, and it is small: on our 64 GB Mac it fitted beside all our other models even at its full context. Check the smallest Mac for the file below.
Not as a judge, screener, tagger or extractor: for those, Flint did far better, run the same way. Where no tools are offered, check its answers for stray tool calls. Our tests ran it with its thinking turned off, and we haven't tested whether thinking, or a strict output format, stops them. Its licence is Liquid AI's own LFM1.0; read it before commercial use.
- LFM2.5-24B-A2B
The only file: Liquid AI's own Q4_0, trained for that format rather than rounded down to it. Run twice: four conversations at 16K for reference, then one at 64K, the run of record.
Benched 24 Oct 2026 · 13.6 GB · 30 scored runs · smallest Mac 24 GB
Decisions, in order
- 2026-10-23 21:41Z — download the QAD Q4_0 and bench beside Flint. Alan: "yes, follow new guidelines for benchmarking though". The QAD Q4_0 was picked from the vendor's GGUF set because Q4_0 is this box's fast format and the QAD build is trained for it. Pinned to revision
0912d33141f77e10705345a6732bfd83f0252fdc. - 2026-10-23 — pre-registered (Claude, before any run).
- Benches, server and comparators: the same as Flint (see Flint's family page, 2026-10-23 entry). The full gauntlet through
eval/swapseat_gauntlet.shwith-np 4 -c 65536 -ctk q4_0 -ctv q4_0 -fa on -ngl 999 --cache-ram 0 --jinja, extraction profile, on a localhost port beside the full fleet; then decide/1 and edgefill. Comparators: the kolibri-1 and sakura np4 gauntlets; qwen3.6-35b on grounding, nullschema and screening only (its toolcall row is void). - Expectations, each falsifiable:
- Single-stream decode faster than Flint's at the same context: smaller weights (13.6 vs 26.0 GB) and similar active parameters.
- Resident memory, measured by
footprint, under 17 GB at the gauntlet context. Only 10 of 40 layers hold a KV cache. - toolcall at or above qwen3.6-35b's last valid llama.cpp score. That score doesn't exist (the 2026-09-09 row is void), so this expectation can't be tested without a qwen3.6-35b re-run. It's recorded as a gap, not a prediction.
- On the 3 comparable suites, grounding ≥ 82.4 and screening ≥ 86.7 (qwen3.6-35b, 2026-08-27). nullschema is the risk: an always-thinking model may not take the profile's thinking-off request, and nullschema needs enforced schemas.
- Risk: "always thinks" may trip the harness's thinking-off precondition. A precondition failure is a harness result and is recorded as an incident, not a score.
- 2026-10-23 22:29Z — np4 gauntlet complete; expectations scored against it. 1 pending; 2 met on RSS (13.0 GB), though the
footprintmethod failed; 3 untestable; 4 missed (grounding 71.2, screening 48.3). Thinking-off held. kolibri-1-q4_0-np4-b11533 is not in the published run log under that label, so it wasn't used. - 2026-10-23 22:37Z — re-run single slot at 64K (Alan's rule). Alan: "hermes won't load a model with less than 64", then "we should only have one slot running on any benchmark, once tested we decide context and slots if it's worth it". New label
lfm2.5-24b-a2b-qad-q4_0-np1-c64k-b11846:-np 1 -c 65536, default f16 KV,PAR=1, 15 suites, beside the full fleet. The np4 run stays on record as the 16K measurement, not of record. - 2026-10-23 23:46Z — paused for Flint. Alan: "once that's done kick of flint". Paused after tagger, tagger_nullable, needle and grounding, and 34 of enrichment's 54 cases. Resumed 2026-10-24 02:03Z under the same label, after Flint.
- 2026-10-24 02:21Z — gauntlet of record complete; the pre-registered expectations, re-scored against it (kept beside the plan above).
- Decode faster than Flint: met. 102.5 vs 74.2 t/s median single-stream, both contended. Prefill 763 vs 345 t/s.
- Resident under 17 GB: met on RSS (13.9 GB peak at 64K f16 KV).
footprintcan't measure mmap'd weights. - toolcall vs qwen3.6-35b: untestable, as registered. LFM2.5 scored 100.0, but the comparator row is void.
- grounding ≥ 82.4 and screening ≥ 86.7: both missed. grounding 72.8. screening 25.0 is below chance, so a harness audit came first. The audit traced it to the model emitting tool-call syntax where no tools are offered; the harness is sound (Flint 60/60 well-formed on the same suite). nullschema 44.4 against qwen3.6-35b's 61.1. Thinking-off held on every suite.
What we learned, in the lab's words
From the gauntlet of record, lfm2.5-24b-a2b-qad-q4_0-np1-c64k-b11846 (single slot, 64K, f16 KV, extraction profile, 15 suites; coherence COHERENT), scored from the result files. Like-for-like comparator: Flint (flint-q4_1-np1-c64k-b11846, the same binary, flags and procedure). qwen3.6-35b's 2026-08-27 runs are shown where they exist; its slots aren't on record.
| suite | LFM2.5 | Flint | qwen3.6-35b |
|---|---|---|---|
| toolcall | 100.0 (60/60) | 55.0 | void |
| toolscale | 100.0 (40/40) | 95.0 | — |
| tools | 86.7 (13/15) | 100.0 | — |
| contract | 75.0 (36/48) | 60.4 | — |
| synthesis | 75.0 (45/60) | 78.3 | — |
| grounding | 72.8 (91/125) | 77.6 | 82.4 |
| epistemics | 70.8 (34/48) | 95.8 | — |
| tagger | 62.1 (149/240) | 82.1 | — |
| worldview | 55.0 (22/40) | 75.0 | — |
| needle (all 110) | 54.5 (60/110) | 60.0 | — |
| enrichment | 51.9 (28/54) | 77.8 | — |
| tagger_nullable | 50.0 (120/240) | 60.8 | — |
| nullschema | 44.4 (32/72) | 70.8 | 61.1 |
| screening | 25.0 (15/60) | 98.3 | 86.7 |
- A reflexive tool-caller. It calls tools in every toolcall arm, including when they're never mentioned (100), the mirror of Flint (55; 1/12 unmentioned).
- It also emits its native tool-call syntax in suites that offer no tools: 43/60 screening, 30/48 epistemics and 18/40 worldview responses.
- That sinks its judgement scores. Screening is 25% (below chance), with 15/19 on the responses that gave a verdict (from the audit).
- Fastest model measured that night: decode 102.5 t/s and prefill 763 t/s single-stream (contended), at 13.9 GB RSS beside the full fleet.
- Behind Flint on 10 of 14 suites, like for like. It leads only on the tool suites and contract.
- Read (Claude, from two runs): a fast dispatcher for tool-heavy loops, where calling a tool is always right. Not a judge, screener, tagger or extractor. Its tool-call reflex would need suppressing (no tools offered and a strict format), or a parser that rejects stray markup, before it could serve a no-tool role.
Why it was tested, in the lab's words
Found in the 2026-10-23 release scan as an agent/tool-calling MoE with ~2.5B active, the same profile as Flint. Its card claims it beats our coding driver, qwen3.6-35b, on tool benchmarks. It is benched with Flint against the same comparators. Alan's go-ahead: "yes, follow new guidelines for benchmarking though".
Open questions
- Whether llama.cpp honours the QAD Q4_0's
general.sampling.*metadata as the card says. The harness sets its own temperature, which may override it. - Whether thinking ON, the model's intended mode, changes the judgement suites or the tool-call reflex. The extraction profile turns it off.
- Whether serving with a strict response format (
response_format/ json_schema) suppresses the stray tool-call markup in no-tool roles. - decide/1 and edgefill are still to run.
The model in detail
| field | value |
|---|---|
| vendor | Liquid AI |
| upstream repos | LiquidAI/LFM2.5-24B-A2B (weights; base LiquidAI/LFM2.5-24B-A2B-Base), LiquidAI/LFM2.5-24B-A2B-GGUF |
| licence | Liquid's lfm1.0 licence (HF tag license:other) |
| architecture | 23,971,585,280 parameters (HF safetensors count), 2.45B active; 40 layers = 30 double-gated short-convolution blocks + 10 GQA attention layers; 64 experts per MoE block, top-4 routing; 131,072 context; 16 languages |
| reasoning | always thinks before answering (built-in thinking tokens) |
| released | 2026-10-12 (weights repo created; the GGUF repo is dated 2026-10-09) |
| llama.cpp support | the LFM2 MoE architecture is in llama.cpp; present in b11846 (src/llama-arch.cpp) |
| vendor-reported scores (unverified) | vs Qwen3.6-35B-A3B: LiveClaw 48.09 vs 38.19; ToolSandbox 80.71 vs 75.02; IFEval 96.75 vs 93.06 |