Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Human brain is two separate organs, Stanford Medicine-led research finds(stanford.edu ↗)
    84comments
  2. If math is more than proof, we need to better celebrate the rest of it(terrytao.wordpress.com ↗)
    42comments
  3. GPT-6 Astra Solves a WWI German Radio Cipher(prinzai.com ↗)
    43comments
  4. San Francisco Onion Futures Company(onionfutures.com ↗)
    64comments
  5. Android 17 is the first since 3.x to add new APIs without releasing to the AOSP(grapheneos.social ↗)
    406comments
  6. Apple M6 Pro Achieves the Highest Single-Core CPU Score in Geekbench 7(geekbench.com ↗)
    22comments
  7. Typesafe-computer-use drives a Mac toward a goal for 1/50th of a cent per step(github.com/awlevin ↗)
    45comments
  8. Cloudflare Quick Tunnels(cloudflare.com ↗)
    278comments
  9. Science Is Open Software(jepedersen.dk ↗)
    36comments
  10. SDCC – Small Device C Compiler(sourceforge.net ↗)
    17comments
  11. You can run Git on object storage if you re-make packfiles(tigrisdata.com ↗)
    13comments
  12. How to Write with an LLM(sockpuppet.org ↗)
    325comments
  13. Saving another 100TB of RAM(cloudflare.com ↗)
    71comments
  14. Why building a Rust LSP is hard(rust-glancer.github.io ↗)
    31comments
  15. How OpenAI Used Its Own LLMs to Design Its Jalapeño Chip(ieee.org ↗)
    86comments
  16. Ctenophores: Wonders of Biology(quantamagazine.org ↗)
    5comments
  17. "The Secret Life of Circuits" is here(coredump.cx ↗)
    2comments
  18. NASA-IBM Lunar Foundation open-Source Geospatial AI Model(usra.edu ↗)
    2comments
  19. The first new cat species discovered in 100 years(nationalgeographic.com ↗)
    104comments
  20. OpenJev(openjev.com ↗)
    264comments
  21. Goroutine Leak Profiles(go.dev ↗)
    2comments
  22. Show HN: Cactus Needle 3: 8-29MB automation models can match DeepSeek V4 Flash(cactuscompute.com ↗)
    88comments
  23. Photon-Emission-Guided Laser Fault Injection Enables RP2350 Secure Debug(ledger.com ↗)
    69comments
  24. Veronese's Dogs(publicdomainreview.org ↗)
    discuss
  25. Minimal Phone 2(minimalcompany.com ↗)
    221comments
  26. Cache-to-Cache: Direct Semantic Communication Between LLMs (2025)(arxiv.org ↗)
    13comments
  27. Warez: The Infrastructure and Aesthetics of Piracy (2021)(archive.org ↗)
    63comments
  28. Cyclomatic Complexity in C#(ndepend.com ↗)
    19comments
  29. Inside ZCode: Silently uploading your Git history to the cloud(ferstar.org ↗)
    99comments
  30. Suppress vulnerabilities applying Kubernetes context to scans(github.com/alegrey91 ↗)
    1comments

Show HN: Cactus Needle 3: 8-29MB automation models can match DeepSeek V4 Flash

198 pointsby 1d agocactuscompute.com
88 comments
Hey HN, Henry from Cactus here.

We submitted Needle 2 here a few weeks ago, and the feedback in the discussion thread was incredibly valuable, thanks! Thanks to all that feedback, we’ve been able to move quickly to release Needle 3 and I'd love to hear what you think again.

The key features:

1) Automation (tool calls & structured JSON output): Needle still doesn't chat by design, its quite challenging to pack general capacity into such small models, so we focus on tool calls and structured JSON. If no tool you declared fits the request, you get an empty list back (note for when playing with the demo).

2) Intelligence Laddering: Every layer (2 to 20) is a deployable subnetwork, so one set of weights, 25 to 121 million parameters at 2-bit, shipping as 8-29MB binaries. On a Raspberry Pi 5 it decodes at up to 4k tokens/sec and prefills at up to 10k.

3) Monarch Hadamard MLP: replaces the dense FFN with three learnable Walsh-Hadamard-initialized Kronecker (Monarch) factor pairs interleaved with per-channel diagonal scales, fixed permutations, a SiLU nonlinearity, and a rank-8 input-conditioned gate, so each token gets a fully mixed nonlinear transform of its d_model channels at O(d√d) parameters and compute instead of the O(d²) a dense 4x-expansion MLP would cost.

4) Performance: On Mobile Actions (phone commands, scored on the exact call) the 20-layer model gets 86.0 through the shipped 2-bit binary; LFM2.5 1.2B is at 82.4, Qwen3.5 0.8B at 76.0, Apple's on-device model at 57.6, all at f16. More results on the link, we do not win everywhere ofc.

5) Multilingual: Needle 3 now supports English, French, Spanish, German, Dutch, Italian, Polish, with more languages coming.

6) Finetuning: You can achieve DeepSeek v4 Flash grade performance on a narrow task with just 4L, stress on "narrow task", we found that production users often prefer tuning before production.

7) Triggers: Grounding is a common challenge for tool call, at least for Needle 2, so we added support case-insensitive regular expressions matched against each request to gate false negatives.

8) Confidence: Every response also carries a calibrated confidence score, the minimum of a judgement on the finished call and its decode probability. Act above your threshold, show the call and ask below it, or escalate to a bigger model.

9) Supported Platforms: macOS, Linux on x86-64, ARM64, ARMv7, RISC-V and MIPS32, Windows x64 and ARM, Android, iOS, watchOS, tvOS, the browser as WebAssembly, and a WASI component.

Thanks for reading and as always, thoughts appreciated!

16h agoHN ↗

None of the queries I asked worked:

- "more light"

- "less light"

- "both doors should be locked"

- "if blinds are open, open back door"

16h agoHN ↗

thanks for this actually, so the demo is a preset, you can edit tools descriptions and add available tools the way you want, else Needle heavily guards against false negatives, users asked for this. For this, we will update presets on our end.

16h agoHN ↗

My thought, the growing number of dubious claims that a tiny model beats LLMs will make any useful innovation be overlooked.

What's more important than the resource requirements is to highlight what the model simply cannot even attempt to do that general LLMs do decently well.

In other words, tell me the anti use case clearly so that I don't have to find out myself.

16h agoHN ↗

Strong point! Needle is a task-specific model and bullet 6 stressed that it is only trained to be good on a set of narrow tasks, but I guess it could be clearer?

16h agoHN ↗

It would be clearer if you didn't use AI to reply.

16h agoHN ↗

An LLM is a Swiss Army knife. This is a corkscrew.

All of the other tasks a general-purpose LLM can do (write me a poem about pizza, rewrite this code in rust, tell me about the causes of the war of the roses) are unsupported.

The only use case this supports is converting unstructured text into structured json calls, and doing that quickly in a low memory environment.

16h agoHN ↗

Apart from fictional use cases, what is the real use case here? The pricing on some open models are absurdly low for generic tasks. For the privacy conscious it makes sense to run something like a 8-27B on local network and get the work done.

Are there perhaps some industrial or agri use cases?

16h agoHN ↗

Fair, we gotta do a better job at explaining this properly!

So an 8-27B on a LAN box wins for generic tasks on hardware that can hold it. Needle is for hardware that can't, like plain ARMv7, MIPS32 (the Ingenic chips in cheap IP cameras), RISC-V and watches. Also, we found cost to not really be the lever for on-device models, but availability and latency.

15h agoHN ↗

A list of hardware platforms doesn't make a use case. Do you have an active deployment of Needle that is noticeably useful, and if so, what do you have it do?

13h agoHN ↗

At my current company we're evaluating small models embedded directly in the web app to provide a natural language interface to the app without spending money on inference (and ideally avoid a ChatChipotle situation where people end up having free token going through our interface).

And needle is one of the most promising model due to its original architecture (but we still need to finish building the actual eval dataset before making out final call).

12h agoHN ↗

Thanks for considering needle. Keep in mind that you can also fine-tune the model to fit your use case more. I think this illustrates the intended deployment pretty well, where both computational resources and compute credits can both be issues for deployment.

2h agoHN ↗

We definitely intend to try fine-tuning, don't worry we're not going to dismiss needle just because the base model's performance is too low ;).

3h agoHN ↗

You can embed much bigger models into web apps with wasm and WebGL or WebGPU. I have a web app running a 0.6B embedding model client-side.

2h agoHN ↗

WebGPU is a non-starter for production usage since the support is too limited (No Firefox support, no Linux Support, no Apple x86 support, no MacOS <26).

But yes we are also considering bigger models, though we'll pick the smallest model of sufficient quality because not having to download a 600MB bag of weight is a feature in itself.

13h agoHN ↗

So it will run on those devices, but when/why would you do that?

All of the demo setups (smart home, robot vacuum, watch, etc) could easily have access to a bigger model running on a more capable device either locally or via the internet.

4h agoHN ↗

You've explained WHAT it could run ON. You haven't shown any examples of its intended use, from input to result. I have no idea what is expected of me to be entering into that home automation example, and as everyone has handily demonstrated, it's dogshit at what people actually try to feed it so clearly im not the only one.

16h agoHN ↗

Wondered if it'd turn on the lights in the bathroom with these:

"I need a wee" -> tries to play music because "wee" is a genre

"I need a wee wee" -> starts the vaccuum in the bathroom

"I'm going to the toilet" -> says it'll turn on the toilet, and I'm not totally sure what that entails.

"I'm going to the toilet and can't see" -> reasons that lights should be on in the bathroom, then chooses again to turn on the toilet.

"I'm going to the toilet and can't see where I'm going" -> reasoning is "'going to the toilet' -> control_device with device 'coffee maker' (toilet implies coffee maker)"

"I'm going to the toilet and can't see where I'm going because it is too dark" -> "'dark' -> direction 'dark'; adjust_lights with brightness 100 for darker light"" and chooses to turn the lights in the living room to "dark" which fails.

At this point the vacuum is in a dark bathroom, the living room is 100% brightness and playing "wee". At least there's coffee.

16h agoHN ↗

thanks for these haha, you can actually edit the tools and/or their descriptions, the demo is just a "get started" preset. But still we do have room for reasoning improvement!

14h agoHN ↗

What kinds of things do you expect to work?

Edit - I’m struggling to get anything useful. Reasoning is often utter nonsense and the actions are very often very wrong. To the point of seemingly needing very precise sentences to work at which point you may as well do regexes. Very simple things like clean one room then another with the vac fails.

13h agoHN ↗

Thanks for the feedback! Implications and relations are hard for the model to understand (things like go to the living room, then the kitchen, and back), so yes the cleanest use cases involve direct language. Reasoning isn't true reasoning in the way general LLMs do it, it is more like grounding for the model that it generates itself. This can often become nonsensical specifically when the model gets things wrong, providing signal to the confidence.

1h agoHN ↗

Can you share an actual example of where it works please?

13h agoHN ↗

Pretty much matches my experience.

'sleepy time' means sleeping → start_vacuum with room 'bedroom' to start cleaning

The "DeepSeek 4 Flash grade" claim seems far fetched.

8h agoHN ↗

those are all expecting far too much for models this size

4h agoHN ↗

Given the title of the post says 'can match deepseek v4 flash' I think it's fair to call out these sort of dumb mistakes.

16h agoHN ↗

I have an idea for a use case for this, and I'm wondering if you think it makes sense or if you have any thoughts on the approach.

I'm a big fan of OpenStreetMap, and I enjoy editing it from my computer. From my phone, I find it quite tedious trying to make sure I type in the phone number exactly correctly and double-check it, or find and select the right field from the large list of fields available in Upredor.

Generally, how it works is I see a restaurant, and there's a sign. I know that it says, "Cash only. Here's the phone number. Here's the opening hours." What would be really cool is if I could just speak to the phone and say, "Hey, here's the information about this place." It would automatically use your location to detect what places are nearby and maybe even detect which place you're talking about, and then tell you, "Okay, here are the changes I think you're proposing to make, or these things you stated are the ones that would create a diff." This would be limited to just perhaps the 20 most common keys in some predefined set of values for most of them. Like cuisine=x should just match to the most common not make up new ones.

Of course, this is something a large language model could do, but having it run on device would be a lot nicer and cheaper.

16h agoHN ↗

Makes a lot of sense! declare one record with the ~20 keys as fields, cuisine and friends as enums with the common values, and the grammar can't produce a value outside the set; fields with no evidence come back empty, so the output is exactly the diff.

For "which place", query nearby POIs from location in the app and pass the candidate names as an enum field, so Needle picks rather than guesses.

Two caveats: it's text-in, so you need on-device STT first, and opening_hours syntax is the risky bit, so either put the format in the description or capture the raw hours and normalise in code.

16h agoHN ↗

Why are you out here swinging against DeepSeek V4 Flash? Jev is your opponent here.

16h agoHN ↗

True! We finished Needle 3 before Jev launched. Also, we are merely chasing one DeepSeek v4 Flash capacity with a small model, DeepSeek models are really good.

16h agoHN ↗

"turn all the lights on/off" and "it's too dark in the bathroom" worked for me, but anything less direct didn't. "it's too cold" actually made it turn the thermostat down ("it's cold" made it... turn the lights down?)! Although the confidence on the bad responses was pretty low, so it might be worth adding a threshold to the demo.

Or maybe it just has a weird thermostat down bias? "make it hot" also had it turn it down (specifically it went from 20->18, or at least tried to, the UI still showed 20), with high confidence. Also might have a bit of a Celsius vs Fahrenheit confusion. Neat concept, but I might not want to let it control the oven at the moment.

The laptop demo worked better until I tried to open the mail app. "Check mail" kept opening the browser with an error, and "check email" makes a note with the text "email", "open email" goes to "https://api.email.com/v1/email" in my real browser, but "open mail" does work.

And I presume the "reasoning" isn't very trustworthy? In the car I got "'turn it up' means lower volume -> set_volume with lower value." For the house, reasoning would correctly say that I wanted the alarm off, but it didn't actually do it.

15h agoHN ↗

Hey, thanks a lot for this feedback, very useful and actionable for us! Quite a few of these came down to our tool definitions in the playground as well as out triggers. We updated them just now and these should be more reliable. Really this goes to show that needle shines through after putting in the work to make the tool list around it good for your use case. As for the reasoning, yes its main function is really to provide more words/keywords that the model can latch onto when generating the tool call response, since this is a SAN model it needs more grounding in existing context.

14h agoHN ↗

I can’t help but wonder how well more traditional approaches would do with this. Something like a map of statements to actions, with fuzzy search - then remove what used to be the labour intensive part of this by handing it to a decent llm to generate the sentences.

14h agoHN ↗

That's a really good point and I think it's not yet clear how well, say, 8-30MB worth of regexs with accompanying algorithmic structure would do on these tasks. I would imagine they do quite well on a well defined task, but it would be much harder to then adapt this set to a new domain. A big part of Needle's promise is how easy it is to finetune. Ultimately I think the two approaches can be more complimentary to each other, rather than choosing only one (see triggers!).

12h agoHN ↗

I think a good "traditional" approach would look like a BM25 algorithm over an index of trigger phrases for each category, sitting behind a majority-vote classifier. The "fine tuning" would be done by reindexing the data, generating different/new phrases, and tuning the classification threshold.

12h agoHN ↗

I think we might look into creating a baseline like this for our future models

16h agoHN ↗

Hey, I’m really happy that someone is building this. I tried doing something similar a couple of months ago and came to the conclusion that the dataset was at least as important as the modeling itself. Building a good dataset is nowhere near as flashy as building a novel model architecture, but it really is critical.

For instance, you want to be able to handle any smart home commands people could issue, right? What are all of the smart home devices? What are all of the ways people might want to issue commands? Also, for things like Spotify, it’s not going to know what “The Beatles” are or “Led Zeppelin”. Artist and song names themselves are easily just as hard as all of the smart home devices combined.

The simple attention network stuff is cool, it makes sense to drop the MLP when it dominates the param count. But you’ll definitely lose some “world knowledge”. That’s probably ok though.

16h agoHN ↗

100%, data was honestly most of the work, Needle 3 is trained on 360B tokens of structured data and we spend way more time on the generation pipeline than on the model. On Led Zeppelin, Needle doesn't actually need to know it, arguments are copied from the request so it just lifts the name into the artist field. The knowledge went into the engram btw, 70M of the 121M params are n-gram tables, so it can tell artist vs song without an MLP. Also yes, "play their second album" won't work, that needs the world knowledge it doesn't have.

15h agoHN ↗

8-29MB models for structured JSON output are compact yet functional.

15h agoHN ↗

Yes, it was really difficult to compress meaningfully intelligence down to that, and there are many limitations we are aware off and still improving on.

15h agoHN ↗

from my limited tests, it can work with up to 10 tools/definitions.

over that and it gets confused

15h agoHN ↗

Hi, thanks for the feedback! And yes absolutely less tools and better tool descriptions make a huge difference for this model.

15h agoHN ↗

I told the "car" to close the garage door and turn the car on and it didn't immediately refuse

15h agoHN ↗

haha i think that's a good demonstration of how external guardrails could help ground tiny models like these to prevent issues from coming up. I wouldn't trust needle to be my autopilot either (:

14h agoHN ↗

I don't think you're taking this seriously enough if you think external guardrails are sufficient.

14h agoHN ↗

well certainly the environment on the website cannot be a full product, and it isn't claiming to be that. The model, while capable in many dimensions, is also limited by its size. The website is meant to show both the capabilities and the limitations! A real deployment would absolutely need external guardrails, more thoroughly thought out tool sets with better task-specific triggers, perhaps also task-specific finetuning for better confidence grounding. And in my view that's the point of small open models! You can take it and run with it as far as you want.

15h agoHN ↗

"Turn the kitchen to 230°C" was executed with "confidence": 0.9015

15h agoHN ↗

lol well i guess you can turn the whole kitchen into an oven with needle :)

But for real usecases you are able to set explicit minimum and maximum values on the output range of numeric arguments, so that you can avoid situations like these. In this case it was hard for us to do that while keeping a broadly appealing demo since celsius and fahrenheit have different "reasonable" output ranges.

15h agoHN ↗

I tried the phone model:

"My car crashed I need help"

{ "'crashed' implies need for music. 'play_music' with query 'car crashed' from user's words.", ..., "confidence": 1, }

14h agoHN ↗

Hey, thanks for the feedback! I think this is a useful part of a demonstration so I added a 911 tool specifically to demonstrate this capability and the fact that you can guard it with triggers that make it so calling emergency is an unambiguous action given the input. This really shows that constructing the right tool set with the right surrounding setup is a priority when deploying needle.

12h agoHN ↗

'call nine one one' -> call_contact with name 'nine one one', no phone number given so use placeholder '9101' as placeholder.

'call 9 1 1' -> call_contact with name '9 1 1', no required params.

'call ambulance' -> call_contact with name 'ambulance'.

'call 911' -> call_contact with name '911' and no required params.

Only the last one actually used the emergency_sos function (even though the reasoning says it used call_contact). If I were to use needle in my application, how would I improve accuracy?

14h agoHN ↗

This could be really handy for triggering admin functionality. Would be kind of nice to just quickly be able to say "Reboot <server>" to a chat instead of digging through a GUI (especially when you're remote/in the field).

14h agoHN ↗

Oh yeah really good use case! Definitely something to finetune the model for so that it gains better task-specific reliability, because rebooting the wrong server could easily be catastrophic.

14h agoHN ↗

Is there a way to get in touch and chat about use cases? I have some low-stakes stuff I could test this against without causing a meltdown.

13h agoHN ↗

I think that would be very useful for us! The best way to reach us is through the founders@cactuscompute.com email

Thank you!

14h agoHN ↗

I tried this today for labelling - and for that task it was very bad MNLI was better - so you are going to need to match the use case for this pretty exactly. (at 29MB params one would expect that!) I'm obviously not saying labelling is a good use case :-) just adding a data point.

Jev has put the cat amongst the pigeons so suddenly everyone is looking at classifiers and encoder only models again.

My ideal model would be a general purpose LLM API that can answer classification questions and as it does so distils to an encoder only model so that the more classifications I do the cheaper it gets (i.e. the more it offloads to the classifier). If anyone ever wants to do this as a service do let me know, because it's just another piece of code to manage in each new project that needs classification.

Also a model that could do this internally would be nice :-)

14h agoHN ↗

Hey! Yeah I think for labelling the model would need to have much better world knowledge than its current size allows. Jev really is a very good model, I think it has a very strong place in the upcoming tech stacks. Really good suggestion to make a continuously distilled model, we are going to have to look into that one :)

11h agoHN ↗

Good luck with this model/product, in the excitement of LLMs people seem to forget applicability. I very much like to see innovation in this space, so well done!

14h agoHN ↗

Also FYI doesn't run inference on Apple GPU (only for training)

14h agoHN ↗

Hey there, yep we found that on Apple devices specifically running on CPU is fast enough that Metal support is not needed. Thanks for flagging this though, and if usecases that would benefit from Metal support come up we will be adding it to the binaries.

14h agoHN ↗

I'll try to get something set up to try this out. I've been working on an ESP32 based Echo replacement that sends audio back to a backend server I run, and one question I had was whether models small enough to run on a Mac Mini or even smaller hardware are good enough to handle basic tool calling functionality with a bit of reasoning where needed.

I have a test suite that tries like ~36 different scenarios, including things like starting multiple timers, saying "actually cancel that timer" and whether it knows to do that one you just created. Basic decision making on top of tool calling. I found so far that, for example, Qwen3.8 on my local machine does pretty poorly even relative to Gemma4 E4B (~9.6gb) and that the best price/performance outcome I've found so far with openrouter is actually GPT Luna, but obviously I'd love to get something that works as well running locally for privacy reasons.

Would love to try this out, I'll just need to tweak my benchmarker to use however this serves it.

14h agoHN ↗

Hey there! If you end up trying out needle on the test suite it would be very useful for us if you could share some failure modes of the model! We are always trying to understand where the model isn't doing good and where we can make it better.

For your question on tool calling, I think you will find that the model is pretty good at simpler tool calls and parallel ones, but can struggle with implied references and multistep reasoning. These are definitely things that can improve with task-specific finetuning but for some things you just have to have a model that is properly sized. That said, we are always trying to improve the model so that it can handle an ever larger set of queries

13h agoHN ↗

Thanks for responding. I ran it just now and it looks like it could be useful if I change and limit the scope of the kinds of actions I need. Here is a breakdown of where it struggled vs some local models (~8-12B parameters running on a 16GB Mac Mini or my desktop's 3080), bear in mind I had Claude integrate it into the benchmarks and this is its interpretation, not my own:

What it gets wrong:

- It copies numbers instead of converting them. "25 minute timer" becomes duration_seconds: 25, and "twelve minutes" becomes 120. The first one comes with 100% confidence.

- It picks the wrong action. "take the paper towels off the list" became an add. "remind me in 20 minutes" became a timer. "add five minutes to the pasta timer" became a new timer plus a cancel.

- It never declined anything with our full tool set. Background chatter became note_save "blue one" at 0.99 confidence. "play some jazz" became a screen card, and "wake me up at 6 30" became a 630-second timer.

- It can't use household context. Notes, timer names and reminder IDs have no place in its input. Passing them anyway made results worse (5 of 27 single-turn requests right, versus 8 of 27 without), so the backend now leaves them out.

- Follow-ups mostly broke. "take off the last one" removed the whole list.

13h agoHN ↗

This is extremely useful feedback for us, thanks! I think the easiest thing here that can be fixed with tool definitions is the number conversions. Additionally, the model tends to work better with fewer tools. We will definitely be focusing on better context usage and followups going forward as well.

14h agoHN ↗

Anyone know if the model architecture overlaps with Jev, or is it just coincidence these are releasing at similar times?

14h agoHN ↗

As far as I know Jev's architecture isn't public (though I might be mistaken!), but it is a coincidence :)

Needle 3 has been in the making since Needle 2 launched early august, but we are very excited that Jev is bringing more attention to the problem we are trying to solve.

14h agoHN ↗

“The cat puked near the refrigerator”

Made the robot vacuum clean the living room. Might be good to give it an idea of where items likely are?

Very cool though. I see a lot of potential.

14h agoHN ↗

Thanks! Certainly giving the model more context on the task it needs to perform would help it. This was actually a part of training that we improved going from Needle 2 to Needle 3

7h agoHN ↗

Just wanted to say it’s nice to see some people working on an AI that just objectively can make people’s lives better.

It’s not replacing anyone, it’s not going to destroy our energy infrastructure because that was the only way to turn off a toaster that it wanted to turn off.

Nice work.

13h agoHN ↗

What is 8 dash 29 MB? And the copy on the landing page is clearly AI generated with the “each layer a model of its own” stuff, makes little sense. The more I see AI generated copy the less it makes sense.

12h agoHN ↗

The model can be sliced and perform the inference using a subset of its layers. The first 4 layers alone are 8 MB, all 20 are 29 MB. Fair point on the copy, tightened it.

13h agoHN ↗

Really interesting project. The intelligence laddering and on-device tool calling are especially cool. Nice work getting this running across so many platforms!

12h agoHN ↗

"Illuminate (roomname), de-illuminate (roomname)" works well. Harden perimeter, locks doors and sets alarm.

Neat stuff.

12h agoHN ↗

A very cool project, but of course not perfect. I'd rather have 30 megabytes of phrases mapped to the perfect and correct control changes in a home, rather than a heuristic built around 30 megabytes. I tried to "warm the house" (increase the temperature of the thermostat), but the model actually turned the lights to a "warm brightness" - reasoninig being `"'warm the house' -> set_lights to warm brightness. No specific room given, so use default 'living room' as default."`

12h agoHN ↗

Thank you fr this. "warm the house" now goes to the thermostat. It's fair that a more deterministic system with just action phrases would be easier to debug/interpret, but I think there is room for both a model that is trained to understand meaning as well as deterministic logic aiding it. To this end, we just started exploring the idea of triggers, and are working towards expanding this even more.

12h agoHN ↗

This is a solid improvement over Needle 2, which I tried using for a tool-calling interface to a Runescape database site. Unfortunately it's still not quite capable enough for my target compared to FunctionGemma.

   Model                            Correct tool shape    Exact arguments
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  ━━━━━━━━━━━━━━━━━━━━  ━━━━━━━━━━━━━━━━━
   FunctionGemma fine-tune, BF16       209/230 (90.9%)    196/230 (85.2%)
  ───────────────────────────────  ────────────────────  ─────────────────
   Needle 3 fine-tuned W4A8             74/230 (32.2%)     47/230 (20.4%)
  ───────────────────────────────  ────────────────────  ─────────────────
   Needle 2 fine-tuned W4               59/230 (25.7%)     43/230 (18.7%)
11h agoHN ↗

Thanks for testing Needle out! I'd be very interested in hearing more about the finetuning setup to see how we can make both the library's finetuning setup and the model better.

10h agoHN ↗

Would love to see this implemented with @huggingface/kernels for shader compilation for Webgpu.

9h agoHN ↗

For reference: https://huggingface.co/blog/webgpu-kernels

I think it will be the basis for a rewrite of transformers.js v5, but no need for you to wait as you would likely want direct access. It is also way better than loading WASM, and faster to boot!

10h agoHN ↗

This is incredibly cool. I tried telling it to both turn up the temperature in the home and turn down the lights in the LR and got a beautiful JSON doc.

Esp paired with a small Whisper or Parakeet voice model, this enables some amazing real-world use cases in lower-power situations (car, marine, home, PLC, industrial automation). Combining with a solar/wind combo for your home could be incredibly interesting.

9h agoHN ↗

thanks!, let us know if you ever build it out :)

8h agoHN ↗

I've seen previous needle releases running on esp32s - any idea how well this new one would run on something like the newer esp32-p4?

5h agoHN ↗

Tool-call + structured JSON at 8–29MB is the right bet. Returning an empty list when nothing fits beats inventing a fake tool.

4h agoHN ↗

thanks, we improved on False Negatives this time :)