Show HN: Needle: We Distilled Gemini Tool Calling into a 26M Model
145 points by HenryNdubuaku 4 hours ago | 49 comments
Hey HN, Henry here from Cactus. We open-sourced Needle, a 26M parameter function-calling (tool use) model. It runs at 6000 tok/s prefill and 1200 tok/s decode on consumer devices.

We were always frustrated by the little effort made towards building agentic models that run on budget phones, so we conducted investigations that led to an observation: agentic experiences are built upon tool calling, and massive models are overkill for it. Tool calling is fundamentally retrieval-and-assembly (match query to tool name, extract argument values, emit JSON), not reasoning. Cross-attention is the right primitive for this, and FFN parameters are wasted at this scale.

Simple Attention Networks: the entire model is just attention and gating, no MLPs anywhere. Needle is an experimental run for single-shot function calling for consumer devices (phones, watches, glasses...).

Training: - Pretrained on 200B tokens across 16 TPU v6e (27 hours) - Post-trained on 2B tokens of synthesized function-calling data (45 minutes) - Dataset synthesized via Gemini with 15 tool categories (timers, messaging, navigation, smart home, etc.)

You can test it right now and finetune on your Mac/PC: https://github.com/cactus-compute/needle

The full writeup on the architecture is here: https://github.com/cactus-compute/needle/blob/main/docs/simp...

We found that the "no FFN" finding generalizes beyond function calling to any task where the model has access to external structured knowledge (RAG, tool use, retrieval-augmented generation). The model doesn't need to memorize facts in FFN weights if the facts are provided in the input. Experimental results to published.

While it beats FunctionGemma-270M, Qwen-0.6B, Granite-350M, LFM2.5-350M on single-shot function calling, those models have more scope/capacity and excel in conversational settings. We encourage you to test on your own tools via the playground and finetune accordingly.

This is part of our broader work on Cactus (https://github.com/cactus-compute/cactus), an inference engine built from scratch for mobile, wearables and custom hardware. We wrote about Cactus here previously: https://news.ycombinator.com/item?id=44524544

Everything is MIT licensed. Weights: https://huggingface.co/Cactus-Compute/needle GitHub: https://github.com/cactus-compute/needle


bityard 3 minutes ago
This is pretty much exactly what I want for Home Assistant. I yell out, "Computer! Lights!" and it toggles the lamp in the room on or off. (I mean I can do that now, I think, but probably with a much larger model.)

I haven't played with it yet, but does it ever return anything other than a tool call? What are the failure modes? What if it doesn't understand the request? Does it ever say it can't find a tool? Does it get confused if there are two similar (but different) tools? Can it chain tools together (e.g. one tool to look up and address and another to get directions to the address)?

I mean, I plan on downloading the model later tonight and finding out for myself, but since I'm stuck at work right now, I figured I'd ask anyway...

reply
simonw 2 hours ago
Suggestion: publish a live demo of the "needle playground". It's small enough that it should be pretty cheap to run this on a little VPS somewhere!
reply
quantumleaper 2 hours ago
Should be quick and easy with WebGPU, too.
reply
simonw 2 hours ago
That's an even better idea, I bet this could run in Transformers.js.
reply
ilaksh 2 hours ago
Good idea. Could you make that.
reply
HenryNdubuaku 2 hours ago
thanks, yeah, the problem is just handling scale, we don't have the infra ready to go, but anyone can do that. Its easy for people to run on their laptops straight up. Will try the VPS route.
reply
benob 54 minutes ago
Deployed it to a huggingface space: https://huggingface.co/spaces/benoitfavre/needle-playground

You can check the very simple docker file there.

reply
simonw 26 minutes ago
Here's the Dockerfile, it's delightfully simple https://huggingface.co/spaces/benoitfavre/needle-playground/...
reply
HenryNdubuaku 15 minutes ago
Thanks!
reply
giancarlostoro 2 hours ago
Alternatively, record a video that showcases it.
reply
HenryNdubuaku 2 hours ago
Ok, will do that now!
reply
giancarlostoro 23 minutes ago
I know we all think of bad things when we hear "short form video" but short demos can do a LOT for any project, shows the user how its used, what it looks like, what it solves, etc all in anywhere from 15 seconds to a couple of minutes, doesn't need to be ultra fancy, screen recording is fine. :)
reply
bityard 12 minutes ago
Since there is no GUI here, I feel like a simple plaintext chat transcript would be both 100x smaller and 100x easier to read. (Not to mention accessible.)
reply
giancarlostoro 4 minutes ago
Sure, and we've seen those terminal screen recorders that give you back a replayable demo, that could work too.
reply
HenryNdubuaku 14 minutes ago
Yes, a demo might be a good idea.
reply
rsolva 13 minutes ago
Can it summarize text it fetches?

Come to think of it, this could be a nice model to have as the first pass in a more complex agent system where Needle hands of the results of a tool call to a larger model.

I will defiantly play around with this!

reply
HenryNdubuaku 5 minutes ago
The codebase is fully open, feel free to play around!
reply
ilaksh 3 hours ago
Hmm.. this might make it feasible to build something like a command line program where you can optionally just specify the arguments in natural language. Although I know people will object to including an extra 14 MB and the computation for "parsing" and it could be pretty bad if everyone started doing that.

But it's really interesting to me that that may be possible now. You can include a fine-tuned model that understands how to use your program.

E.g. `> toolcli what can you do` runs `toolcli --help summary`, `toolcli add tom to teamfutz group` = `toolcli --gadd teamfutz tom`

reply
HenryNdubuaku 3 hours ago
So Needle is trained for INT4, what you see in the playground is INT4, only 14MB, same challenge though.
reply
ilaksh 2 hours ago
Oh gotcha. Fixed my comment.
reply
kristopolous 2 hours ago
That M versus B is way too subtle. 0.026B is my suggestion
reply
HenryNdubuaku 54 minutes ago
Haha, we were trying to not be hand-wavy too much :)
reply
zamalek 33 minutes ago
Is the idea here to add function calling to models that don't have it, or even improve function calling (qwen quirks)?
reply
HenryNdubuaku 14 minutes ago
So it’s a tiny model capable of function calling that could run locally on cheap devices.
reply
logdahl 52 minutes ago
I find this stuff super fascinating and been thinking about it myself. Maybe one could bootstrap tiny models on a rather 'pure' procedural data set. Neglecting [0] of course...

[0]: http://www.incompleteideas.net/IncIdeas/BitterLesson.html

reply
HenryNdubuaku 44 minutes ago
Sounds interesting, would love to see it too!
reply
simonw 3 hours ago
Looks like you need to open up access to https://huggingface.co/Cactus-Compute/datasets/needle-tokeni... - I get this error when trying to run the steps in your README:

> Repository Not Found for url: http s://huggingface.co/api/datasets/Cactus-Compute/needle-tokenizer/revision/main.

reply
HenryNdubuaku 3 hours ago
Fixed now, apologies!
reply
quadrature 31 minutes ago
Does the model have capacity for in context learning ?, if we give it examples of patterns can it follow them ?.
reply
HenryNdubuaku 13 minutes ago
Not yet, for now. But it’s in the works!
reply
Havoc 57 minutes ago
Sounds interesting.

Got a bunch of errors trying to run it on CPU though. Very likely connected to me running this in a container (unpriv LXC), but figured for 26M CPU would suffice.

https://pastebin.com/PYZJKTNk

reply
dakolli 52 minutes ago
It better, considering its purpose is to run on devices with no GPU.
reply
murkt 2 hours ago
Can this be a Siri-like core? Set me a timer, tell me what’s the weather, etc. Here is transcribed text and available list of tools for the model to call, and voice the output.
reply
HenryNdubuaku 54 minutes ago
That was the goal!
reply
deepsquirrelnet 53 minutes ago
This is really cool. Any plans to release the dataset?
reply
HenryNdubuaku 43 minutes ago
We include the dataset pipeline in the codebase so far, might release dataset.
reply
cmrdporcupine 2 hours ago
This is very cool I'm going to try to carve out some time to try building this into my MOO system ( https://codeberg.org/timbran/moor / https://timbran.org/moor.html ) as alternative command parser front end.
reply
Balinares 2 hours ago
Man, I love that there are still people writing new MOO servers in 2026. Any game out there already running on mooR?
reply
cmrdporcupine 2 minutes ago
Many people tease that they will, and start... but then kinda stop. But mostly just been building my own bespoke thing on my own bespoke platform, and kinda running out of steam because I need to make $$ instead.
reply
HenryNdubuaku 2 hours ago
Thanks, let us know how it goes!
reply
nhattruongadm 2 hours ago
[flagged]
reply
abhijithbabu 4 hours ago
[flagged]
reply
ac29 2 hours ago
FYI, distilling Gemini is explicitly against the ToS:

"You may not use the Services to develop models that compete with the Services (e.g., Gemini API or Google AI Studio). You also may not attempt to reverse engineer, extract or replicate any component of the Services, including the underlying data or models (e.g., parameter weights)."

reply
Havoc 60 minutes ago
Yeah I think Google should shove that somewhere. They effectively distilled all the internet's knowledge into these models...without asking & without permission
reply
HenryNdubuaku 51 minutes ago
Thanks, Needle doesn’t compete with those tools though and the distillation process did not access the weights.
reply
ilaksh 2 hours ago
I think GLM 5.1 or Kimi 2.6 could substitute for this type of purpose.
reply
iAMkenough 28 minutes ago
FYI, Gemini was developed using stolen copyrighted works without author consent. The double standard is striking.
reply
ForHackernews 2 hours ago
So is copying all the books in the world.
reply
xgulfie 2 hours ago
This is being downvoted but it's worth noting if only for the "be careful" aspect.

That said, we need more people distilling models IMO, just be ready for a C&D and a ban

reply
vablings 2 hours ago
Oh no! They stole the model weights! Distillation "attacks" is such bullshit
reply