Overview
Needle 3 is Cactus Compute's automation foundation model, published on September 17, 2026 under Apache-2.0. It gives up general chat capacity on purpose and keeps three jobs that it runs entirely on the device: picking and filling tool calls from the functions an app exposes, pulling typed fields out of messy text against a declared shape, and returning a sentence embedding so an app can search, match and route locally.
The whole model is a single file of 8 to 29 MB. Cactus calls the architecture a Laddered Simple Attention Network: a Monarch Hadamard MLP replaces the FFN, attention is GQA with causal conv taps, and an engram n-gram memory holds most of the parameters, so the 121M model does the arithmetic of a 50M one. It is trained so that every depth from 2 to 20 layers is itself a deployable model, and the weights are compressed to CQ2-bit with Cactus Quants at 2.125 bits per weight.
Outputs are constrained rather than hoped for: a byte-level grammar compiled from the caller's schemas gates every token, so extraction output parses by construction, and each response carries a calibrated confidence score from a learned head. A request no tool covers returns an empty list instead of a guess. The repo ships the 20-layer needle3.cact, the needle3.safetensors checkpoint for fine-tuning, and a sub-1 MB engine per platform covering macOS, Linux (x86_64, ARM64, ARMv7, RISC-V64, MIPSEL), Windows, Android, iOS, tvOS, watchOS and WebAssembly.
| Released | 2026-09-17 |
|---|---|
| License | Apache-2.0 |
| Weights | Open weights |
| Parameters | 121M at 20 layers; every depth from 2 to 20 layers ships as a deployable subnetwork (29M at 4 layers) |
| Architecture | Laddered Simple Attention Network — Monarch Hadamard MLP in place of the FFN, GQA attention with causal conv taps, engram n-gram memory read by gather, and multi-lane hyper-connections |
| Modalities | Text |
| Status | Generally available |
Benchmarks
Needle 3 at 20 layers (121M) against the baselines Cactus published, on six tool-calling and extraction benchmarks
| Benchmark | DeepSeek V4 Flash | Needle 3 (20L · 121M) | LFM2.5 1.2B | Qwen3.5 0.8B | LFM2.5 350M | LFM2.5 230M | FunctionGemma 270M | Apple FM (3.0B) |
|---|---|---|---|---|---|---|---|---|
| Mobile Actions (exact call) | 88.4% | 86% | 82.4% | 76% | 72.8% | 69.3% | 65.1% | 57.6% |
| DroidCall (exact calls in order) | 60.5% | 47% | 35.5% | 28% | 32.5% | 11.5% | 16.5% | — |
| BFCL v4 (AST match) | 77.2% | 50.2% | 62% | 56.8% | 59.1% | 46.3% | 46.6% | — |
| DSTC8 (field F1) | 80% | 40.7% | 48% | 49% | 20% | 53% | 27% | — |
| SNIPS gold (field F1) | 69.4% | 30.2% | 43% | 35% | 34% | 27% | 29% | — |
| SNIPS 7-way (field F1) | 66.7% | 24.7% | 38% | 34% | 29% | 22% | 14% | — |
This model's scores
- Mobile Actions (exact call, 961 rows)86%
- BFCL v4 (AST match, 3,641 rows)50.2%
- DroidCall (exact calls in order, 200 rows)47%
- DSTC8 (field F1, 1,813 turns)40.7%
- SNIPS gold (field F1, 700 rows)30.2%
- SNIPS 7-way (field F1, 700 rows)24.7%
Scores on a 0–100 scale (25-point gridlines); higher is better. Each benchmark links to its published source.
Strengths
- 86.0% exact-call accuracy on Mobile Actions at 121M parameters, against 88.4% for the cloud-hosted DeepSeek V4 Flash
- Ships as one 8–29 MB file with a sub-1 MB engine per platform, down to RISC-V and MIPSEL microcontrollers
- Byte-level decode grammar compiled from the caller's schemas, so structured output parses by construction
- Calibrated per-response confidence score, and an empty call list rather than a guess when no tool fits
- Ladder training: any depth from 2 to 20 layers is deployable, and LoRA fine-tuning on DroidCall lifts every subnetwork by 18 to 36 points
Best for
- Reach for it when an app has to turn speech or text into tool calls on a phone, wearable or smart-home hub with no network round trip.
- Reach for it when you need typed JSON out of messy text — an invoice, a booking, a notification — and the output must parse every time.
- Reach for it when local search or routing needs embeddings from the same binary that already does the tool calling.
- Reach for it when one product's tool set is narrow enough to fine-tune a 2–8 layer subnetwork onto very small hardware.
FAQ
How big is Needle 3 and what hardware does it run on?
Needle 3 ships as a single file of 8 to 29 MB, depending on how many of its 2-to-20 layers you deploy, with a separate engine under 1 MB per platform. Cactus publishes engines for macOS ARM64, Linux (x86_64, ARM64, ARMv7, RISC-V64, MIPSEL), Windows (x86_64, ARM64), Android, iOS, tvOS, watchOS and WebAssembly.
What can Needle 3 actually do?
Three things, all on the device: it picks tool calls from the functions your app exposes and fills their arguments, it extracts typed fields from messy text against a schema you declare, and it returns text embeddings for local search and routing. It deliberately has no general chat capability.
How does Needle 3 score against larger models?
On Cactus Compute's published benchmarks, the 20-layer 121M Needle 3 reaches 86.0% exact-call accuracy on Mobile Actions against 88.4% for the cloud-hosted DeepSeek V4 Flash, 82.4% for LFM2.5 1.2B and 57.6% for Apple FM. On BFCL v4 it scores 50.2% against 62.0% for LFM2.5 1.2B, and on DSTC8 field F1 it scores 40.7%.
Is Needle 3 open weights?
Yes. The needle3.cact binary and the needle3.safetensors fine-tuning checkpoint are published on Hugging Face under Apache-2.0, and the Python package installs with pip install cactus-needle.
