Remix.run Logo
Show HN: Needle: We Distilled Gemini Tool Calling into a 26M Model(github.com)
102 points by HenryNdubuaku 3 hours ago | 25 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

Havoc 3 minutes ago | parent | next [-]

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

simonw an hour ago | parent | prev | next [-]

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!

quantumleaper 39 minutes ago | parent | next [-]

Should be quick and easy with WebGPU, too.

simonw 15 minutes ago | parent | next [-]

That's an even better idea, I bet this could run in Transformers.js.

ilaksh 28 minutes ago | parent | prev [-]

Good idea. Could you make that.

HenryNdubuaku an hour ago | parent | prev [-]

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.

giancarlostoro 44 minutes ago | parent [-]

Alternatively, record a video that showcases it.

HenryNdubuaku 43 minutes ago | parent [-]

Ok, will do that now!

kristopolous 18 minutes ago | parent | prev | next [-]

That M versus B is way too subtle. 0.026B is my suggestion

simonw an hour ago | parent | prev | next [-]

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.

HenryNdubuaku an hour ago | parent [-]

Fixed now, apologies!

simonw an hour ago | parent [-]

Thanks, works now: https://gisthost.github.io/?4ff455792651fe755265b467800f47f3

ilaksh an hour ago | parent | prev | next [-]

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`

HenryNdubuaku an hour ago | parent [-]

So Needle is trained for INT4, what you see in the playground is INT4, only 14MB, same challenge though.

ilaksh an hour ago | parent [-]

Oh gotcha. Fixed my comment.

murkt 36 minutes ago | parent | prev | next [-]

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.

cmrdporcupine an hour ago | parent | prev | next [-]

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.

Balinares 7 minutes ago | parent | next [-]

Man, I love that there are still people writing new MOO servers in 2026. Any game out there already running on mooR?

HenryNdubuaku an hour ago | parent | prev [-]

Thanks, let us know how it goes!

ac29 36 minutes ago | parent | prev [-]

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)."

Havoc 6 minutes ago | parent | next [-]

Yeah I think Google should shove that somewhere. They effectively distilled all the internet's knowledge into these models...without asking & without permission

ilaksh 30 minutes ago | parent | prev | next [-]

I think GLM 5.1 or Kimi 2.6 could substitute for this type of purpose.

ForHackernews 17 minutes ago | parent | prev | next [-]

So is copying all the books in the world.

vablings 34 minutes ago | parent | prev | next [-]

Oh no! They stole the model weights! Distillation "attacks" is such bullshit

xgulfie 11 minutes ago | parent | prev [-]

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