read first
Last updated
LFM3-1.7B: a 1.1 GB agent model on a Mac
Where a 2B model takes a 9B model's seat
LFM3-1.7B handles text among six 2B-class models. The 4-bit file is 1.1 GB, so a Mac or a phone runs it, and filling 128K of context costs 1.6 GB of cache. It trades blows with 9B models on tool use and long tasks, but coding and knowledge lag.
Why a 2B model aims at a 9B seat
Liquid AI published LFM3-1.7B on October 27. Six 2B-class models branch from one backbone, and this one handles text: text goes in, answers and tool calls1 come out.
The way it saves size is the story. Of 24 layers, 13 are short convolutions that read only the last few tokens2, 5 are sliding-window attention3 with a 256-token window, and only 6 are global attention, so long context costs far less.
Pre-training used 22T tokens, and the final 3.5T was a mid-training stage weighted toward agentic traces and tool calls, which is why a 2B model scores this high on tool use.
| Model | Size | What it does |
|---|---|---|
| LFM3-1.7B | 1.7B | Text and tool calls |
| LFM3-VL-2B | 1.9B | Image and video understanding |
| LFM3-Audio-2B | 2B | Speech recognition, synthesis and dialogue |
| LFM3-Omni-2B | 2.2B | Sees, listens and speaks |
| d1-2B, d1-Omni-2B | 2B | Specialised for decisions |

Start from the file and the memory
Start with the file you download: at 4 bits it is a little over 1 GB, so a phone or a Raspberry Pi 5 runs it.
The window opens to 256K, and filling 128K costs 1.6 GB of KV cache4 where Qwen3.5-4B needs 4.3 GB and MiniCPM5-2B 5.6 GB, so the gap shows in long-context work.
Add 1.1 GB of weights to 1.6 GB of cache and you stay under 3 GB, which leaves room on an 8 GB Mac to keep the model loaded while you work.
| File name | File size | When to use |
|---|---|---|
| Q4_K_M | 1.1GB | The default first download |
| Q8_0 | 1.85GB | When you want a little more quality |
| BF16 | 3.47GB | For conversion and checks |

Serve it with llama.cpp
Pull the GGUF5 and open it with llama-server to get an OpenAI-style API6. Set the window with --ctx-size and put the whole model on the GPU7 on a Mac with --n-gpu-layers 99.
hf download LiquidAI/LFM3-1.7B-GGUF LFM3-1.7B-Q4_K_M.gguf --local-dir ./lfm3
llama-server -m ./lfm3/LFM3-1.7B-Q4_K_M.gguf \
--ctx-size 32768 --n-gpu-layers 99 --jinja \
--temp 0.1 --top-k 50 --repeat-penalty 1.1 \
--port 8080Sampling is temperature 0.1, top_k 50 and repetition penalty 1.1 for chat and tool use, and temperature 1.0, top_p 0.95, top_k 20 for maths and science.
Tool calling under llama.cpp needs --jinja, because the chat template shipped with the model is what injects the schemas and lets the response be read back as a call. If memory runs short, lower --n-gpu-layers and offload8 part of the model at the cost of slower decoding9, so decide first whether to cut context or layers.
Wire it into an agent
Pass function schemas through tools and the template emits XML-style calls. Append the result as a tool message and keep sending the schemas on later requests.
With thousands of tools, defer_loading keeps their definitions out of the prompt10 until a search tool returns the names. Even a 256K window fills fast if every schema rides along.
Post-training had harnesses such as Hermes Agent, Pi and OpenClaw in mind, and matching the tool-result shape your harness expects is what keeps the loop stable.

Numbers measured on macOS
MacPaw compared the two on 65 everyday tasks inside real macOS environments: LFM3-1.7B reached 64 percent task success against 48 percent for Qwen3.5-2B, used 58 percent fewer tokens per task, and got stuck in under 1 percent of attempts where the comparison model hit 15 percent.
On-device speed came from llama.cpp at Q4_0 with a 32K window: 1.8 to 2.8 times faster decoding than the next model, with the smallest memory footprint, across two phones, a Raspberry Pi 5, an M4 Max and Ryzen AI.
These are vendor and partner measurements. Matching them locally means matching the quantization11 and the window, and a different harness moves the success rate.
Where it falls short
It is not recommended for agentic coding or complex multi-step reasoning; the model card says so, and SWE-bench Verified lands at 43.40 against 51.20 for Qwen3.5-9B.
Knowledge is narrow too: Humanity's Last Exam scores 7.17 without tools and 13.90 with search, so fill knowledge by retrieval and let the model judge and call.
The licence is the LFM Open License v1.0, which is not an open-source licence, so read the commercial terms yourself.
Scroll sideways to compare all columns.
| Benchmark | LFM3-1.7B | LFM2.5-2.6B | Qwen3.5-9B |
|---|---|---|---|
| LiveClaw (agent) | 45.60 | 14.70 | 35.77 |
| BFCL V4 (tool use) | 71.39 | 55.89 | 62.83 |
| SWE-bench Verified | 43.40 | 18.00 | 51.20 |
| AA-LCR (long context) | 52.83 | 6.00 | 62.00 |
Terminology notes
Tool call — A structured request from a model for an external function such as reading a file, searching, or running a command. The agent runtime and its permission settings decide whether the request is actually executed.
Back to the textToken — A unit into which a model divides input or output for processing.
Back to the textAttention — A neural-network operation that calculates relationships between input tokens and combines information from each position into the current representation.
Back to the textKV cache — Memory that stores attention keys and values from earlier tokens for reuse during later token generation. Its size depends on context length and batch size.
Back to the textGGUF — A file format for model data, widely used by llama.cpp-based tools.
Back to the textAPI — A defined interface that lets other code call a program’s functions.
Back to the textGPU — A processor designed to handle many calculations in parallel. It performs model computations during AI inference.
Back to the textOffloading — Moving some model data from GPU memory to system RAM or storage when capacity is limited. This adds data transfer.
Back to the textToken decoding — The stage that generates successive output tokens using the input and the response produced so far.
Back to the textPrompt — The input text sent to a model. For generative models it describes the desired result and strongly shapes the output.
Back to the textQuantization — A way to represent model weights or values with fewer bits, reducing storage and memory use. The coarser representation can also affect accuracy.
Back to the text
Frequently asked questions
- What should you check first in this article?
- LFM3-1.7B handles text among six 2B-class models. The 4-bit file is 1.1 GB, so a Mac or a phone runs it, and filling 128K of context costs 1.6 GB of cache. It trades blows with 9B models on tool use and long tasks, but coding and knowledge lag.
- How much memory does it need?
- Add 1.1 GB of weights to 1.6 GB of cache and you stay under 3 GB, which leaves room on an 8 GB Mac to keep the model loaded while you work.
- When is it better not to choose this?
- It is not recommended for agentic coding or complex multi-step reasoning; the model card says so, and SWE-bench Verified lands at 43.40 against 51.20 for Qwen3.5-9B.
- Where can you check the conditions and sources?
- The licence is the LFM Open License v1.0, which is not an open-source licence, so read the commercial terms yourself.
