Needle 3 : le mini-modèle IA de 8 à 29 Mo qui tourne 100 % hors ligne — et taquine des modèles 10× plus gros
Un modèle assez petit pour tenir dans une icône d’application, capable d’appeler vos outils, d’extraire des données structurées et de créer des embeddings… sans jamais toucher un serveur. Décryptage sans hype de la pépite signée Cactus Compute.
🧵 Needle 3 en 30 secondes
Imaginez un fichier de 8 Mo au minimum, 29 Mo au maximum — plus léger que certaines photos — qui embarque un modèle d’IA complet. Un modèle qui tourne entièrement sur votre téléphone, votre montre, votre hub domotique ou même un microcontrôleur, sans aucune connexion internet, à aucun moment. C’est la promesse de Needle 3, la troisième génération du modèle on-device de Cactus Compute, avec une affirmation qui fait lever un sourcil : battre des modèles dix fois plus gros que lui sur des tâches réelles.
Dans cet article, on décortique ce que Needle 3 est vraiment, comment son architecture en « échelle d’intelligence » fonctionne, ce que les benchmarks disent réellement (spoiler : les titres racoleurs méritent un peu de nuance), et à qui ce modèle s’adresse — ou pas.
🌵 Cactus Compute & la saga Needle
Cactus Compute est une startup de San Francisco passée par Y Combinator (promotion S25), fondée en 2025 par Henry Ndubuaku et Roman Shemet. Son credo tient en une phrase : l’IA doit tourner là où se trouve votre main — pas dans un datacenter. Pourquoi ? Parce que les modèles cloud exigent une connexion, coûtent de l’argent à chaque appel, et envoient vos données ailleurs avant de vous répondre. Cactus construit donc des modèles et un moteur d’infusion pensés pour court-circuiter tout ça.
Et Needle 3 n’arrive pas de nulle part : c’est le troisième acte d’une histoire déjà bien écrite.
Needle 1 — 26 M paramètres
Présenté comme une version distillée des capacités de tool calling de Gemini, assez petite pour tourner sur un téléphone d’entrée de gamme. Open source dès le jour 1 (licence MIT).
Needle 2 — 45 M paramètres, 14 Mo
Toujours minuscule : un binaire de 14 Mo, ~28 Mo de mémoire en session, grâce à une fenêtre de contexte glissante de 256 tokens avec les outils « épinglés » comme points de référence fixes. Un spécialiste assumé : pas de longs dialogues, pas de dissertations — juste le bon fonction, avec les bons arguments.
Needle 3 — l’échelle d’intelligence
Un saut qualitatif : un seul jeu de poids entraînés dont chaque profondeur, de 2 à 20 couches, est un modèle déployable. C’est LE tour de magie de cette release, on y revient juste après.
🤝 Un projet déjà bien installé (et déjà dans un vrai produit)
Avant de juger sur fiche technique, regardons les signaux de santé du projet. Le dépôt GitHub de Needle affiche environ 11 300 stars, plus de 700 forks et des dizaines de contributeurs actifs. La licence est récemment passée de MIT à Apache 2.0, et l’historique de commits montre des correctifs du moteur et des mises à jour de gestion d’état interne… dans les derniers jours. Bref : un projet vivant, pas un coup d’éclat sans lendemain.
🧰 Trois métiers, zéro cloud
Needle 3 ne prétend pas tout faire. Il fait trois choses, entièrement sur l’appareil — rien n’est envoyé à un serveur, rien n’attend une connexion.
1 · Tool calling
Vous donnez à Needle une liste de fonctions et leur description ; il lit la demande de l’utilisateur et décide quelle(s) fonction(s) appeler, avec quels arguments. Deux demandes dans une phrase ? Deux appels, dans le bon ordre. Aucune fonction adaptée ? Il renvoie une liste vide plutôt que d’inventer — l’app sait qu’il ne faut rien faire.
2 · Extraction structurée
Vous fournissez un schéma (vendor, total, date d’échéance…) et un texte brut (facture, confirmation de réservation, notification) ; Needle rend un objet propre et typé. Une grammaire de décodage contraint la génération token par token : la sortie correspond au schéma, garanti. Bonus : cette approche se généralise bien aux tâches de classification.
3 · Embeddings de texte
Le même modèle transforme une phrase en vecteur — son empreinte numérique de sens. Résultat : recherche, matching et routage 100 % locaux. Retrouver LA bonne note parmi des centaines, choisir l’outil le plus proche d’une demande floue, ou fusionner deux alertes qui disent la même chose — précieux sur une montre où l’attention est rare.
Pourquoi c’est notable : ces trois métiers sont souvent assurés par trois modèles spécialisés différents… ou par un gros modèle cloud. Needle 3 propose un seul petit modèle local pour les trois — une vraie simplification pour qui construit ce type d’app.
🪜 L’« intelligence ladder » : un jeu de poids, toutes les tailles
Le problème classique : une montre, un Raspberry Pi et un téléphone flagship ne veulent pas du même modèle. La solution habituelle ? Entraîner un modèle par taille — donc multiplier les entraînements et les fine-tunings. Cactus a pris l’autre route : entraîner un seul jeu de poids où chaque profondeur, de 2 à 20 couches, est un modèle complet et utilisable, chaque échelon étant réellement plus capable que le précédent. Les profondeurs ayant été entraînées ensemble, chaque sous-réseau hérite de tout l’entraînement — et reste fine-tunable indépendamment.
L’échelle en un coup d’œil (mêmes poids, profondeur au choix)
Sur un Raspberry Pi 5 : ~4 000 tokens/s en décodage à 2 couches, ~400 à 20 couches (prefill : ~10 000 → ~1 000 tokens/s). Entraînement : 360 Md de tokens de données structurées propriétaires.
Les briques qui rendent ça possible
L’astuce la plus contre-intuitive : l’essentiel des paramètres vit dans l’engram, une mémoire de motifs mémorisés plutôt que calculés. Résultat : le modèle de 121 M params fait l’arithmétique d’un 50 M. Au total, Cactus annonce plus de 2× moins d’opérations flottantes par token qu’un transformeur de configuration équivalente — donc moins de batterie brûlée et moins de chaleur sur un petit appareil.
📊 Benchmarks : ce que les nombres disent vraiment
Cactus a évalué Needle 3 sur des suites dédiées au tool calling et à l’extraction structurée, en exact-match ou field-F1 sur les splits de test complets :
| Suite | Type | Taille | Métrique |
|---|---|---|---|
| Mobile Actions | Tool calling | 961 lignes | commandes téléphone → intents Android, appel exact |
| DroidCall | Tool calling | 200 lignes | requêtes dont certaines exigent 2 appels dans l’ordre |
| BFCL v4 | Tool calling | 3 641 lignes | Berkeley Function Calling, AST match + aucun appel si hors sujet |
| DSTC8 | Extraction | 1 813 tours | slots de dialogue → schéma, field F1 |
| SNIPS gold | Extraction | 700 lignes | slot filling avec schéma fourni, field F1 |
| SNIPS 7-way | Extraction | 700 lignes | choisir le schéma parmi 7, puis le remplir |
Un protocole volontairement « réaliste »
Detail qui compte : les sous-réseaux Needle (20, 16, 8 et 4 couches) ont été testés via le binaire CQ2-bit réellement livré aux développeurs, tandis que les modèles de référence tournaient en précision f16 sous vLLM, et que DeepSeek V4 Flash était interrogé via son API cloud. Autrement dit : Needle est mesuré dans sa forme la plus compressée (celle qui tournera chez vous), face à des concurrents dans leur forme la plus forte. C’est une manière honnête de répondre à « qu’aurai-je si je déploie aujourd’hui ? » — mais ce n’est pas une comparaison « à armes égales » au sens strict, et c’est bien de le dire.
👩 Le workflow développeur : simple comme un décorateur
L’installation est un pip install classique ; le modèle est téléchargé une fois depuis Hugging Face puis mis en cache localement. Ensuite, le moyen le plus simple de donner un outil à Needle est de décorer une fonction Python : la signature déclare les types attendus, et le docstring devient la description que lit le modèle. Un seul appel à run() gère toute la boucle : Needle choisit l’outil, exécute votre fonction, réinjecte le résultat et renvoie la réponse finale.
# pip install cactus-needle
from needle import tool, run
@tool
def regler_lumieres(piece: str, niveau: int): """Baisse ou monte les lumières d'une pièce."""
...
reponse = run("Baisse la chambre à 30 % et verrouille la porte.")Les triggers, filet de sécurité. Quand une description ne suffit pas à couvrir toutes les formulations utilisateurs, on peut attacher des expressions régulières à un outil : si ça matche, le décodage est restreint à cet outil et l’appel est garanti — même si la confiance est sous le seuil. Parfait pour « allume les lumières » qui doit aboutir à chaque fois.
Extraction : le même principe, à l’envers. On déclare la forme voulue avec un modèle Pydantic, on appelle extract() avec le texte brut, et on récupère un objet entièrement typé — zéro parsing manuel.
from pydantic import BaseModel
from needle import extract
class Facture(BaseModel):
fournisseur: str
total: float
echeance: str
resultat = extract(texte_brut, Facture) # objet typé, champs remplisChaque réponse — appel d’outil ou extraction — revient sous forme d’un seul objet JSON cohérent : les appels effectués, un fil de raisonnement écrit, un score de confiance calibré (issu d’une tête dédiée), et des métriques utiles (vitesse prefill/decode, mémoire pic). Et ce score n’est pas décoratif :
Confiance haute → exécutez l’action immédiatement, sans demander.
Montrez à l’utilisateur ce que le modèle veut faire, demandez confirmation.
Sous le plancher de 0,1, l’appel part dans suppressed_calls ; rien du tout = refus poli du modèle.
Et pour aller plus loin ? Le fine-tuning passe par une CLI simple : entraînement LoRA sur le modèle de base 20 couches gelé, puis export quantisé à la profondeur de votre choix sur l’échelle — du 20 couches complet au petit sous-réseau pour appareil contraint.
📱 Une couverture plateforme rarement vue à cette taille
Chaque cible embarque un moteur précompilé de moins de 1 Mo qui charge les poids needle3.cact au démarrage, à 20 couches ou à n’importe quelle profondeur inférieure. La liste donne presque le vertige :
💶 Open source… et un vrai modèle économique
Needle 3 est totalement ouvert : poids sur Hugging Face, code et moteur sur GitHub (Apache 2.0), téléchargeables et utilisables gratuitement. La partie payante, elle, vit un étage au-dessus : la Cactus Platform, qui donne accès aux jeux de données curatés de Cactus, au processus de quantization CQ2, aux outils de conception et suivi d’évaluations, et à l’infrastructure de fine-tuning complète. Un schéma « open core » classique et sain : le modèle gratuit est un excellent point de départ, la plateforme payante sert à qui veut le mouler sur son produit sans construire tout un pipeline d’entraînement. C’est aussi ce qui donne à Cactus une vraie raison de maintenir Needle sur la durée — un signal de pérennité plus fort que n’importe quel benchmark.
⚖️ Forces, limites & pour qui ?
💚 Où Needle 3 brille
- Action sur commande vocale ou texte court, 100 % offline : domotique, wearables, robots, embarqué contraint.
- Trois métiers en un seul binaire minuscule (tool calling, extraction, embeddings) — moins de complexité côté app.
- L’intelligence ladder : on choisit exactement la taille qu’autorise chaque appareil, depuis les mêmes poids.
- Confiance calibrée, triggers, grammaire de décodage : des garde-fous pensés pour la production.
- Déjà éprouvé en production chez Pebble ; communauté GitHub active ; licence Apache 2.0.
🚧 Là où il ne faut pas l’emmener
- Ce n’est pas un assistant conversationnel généraliste : ni longs dialogues, ni questions ouvertes, ni création textuelle. Cactus ne l’a jamais prétendu.
- Les benchmarks, excellents sur tool calling/extraction, ne disent rien d’une capacité de raisonnement plus large.
- Écosystème encore jeune : projet plus récent et plus petit que certains vétérans de l’on-device — à peser si la fiabilité long terme est critique.
- Les suites de test sont en partie choisies par le fabricant : gardez un œil critique.
En une phrase : Needle 3 n’est pas « un petit GPT » — c’est un spécialiste de l’action locale, remarquablement bien engineered, qui résout un problème précis (l’IA fiable sans réseau) que les modèles généralistes n’ont jamais été conçus pour résoudre. Et dans cette lane étroite, il mérite vraiment votre attention.
🎬 La vidéo originale & son sommaire cliquable
Cet article s’appuie sur le breakdown complet de la chaîne Panda Making Money. Cliquez sur la miniature pour lancer la vidéo, ou sur un chapitre pour arriver directement au bon moment sur YouTube. 👇
🔎 Vérification des faits & corrections de la retranscription
La retranscription audio de la vidéo a été recoupée avec les sources officielles (page de release Cactus Compute, dépôt GitHub, fiche Hugging Face, blog Cactus, annuaire Y Combinator, site Pebble). Corrections et précisions apportées :
- « Eric Mijikovski » → Eric Migicovsky, fondateur de Pebble ; l’anneau cité est le Pebble Index 01 (bouton + micro, sans écran).
- « DSDC8 » → DSTC8 (Schema-Guided Dialogue, 1 813 tours, field F1) ; « Snips Gold / SNIPS 7way » → SNIPS gold / SNIPS 7-way (700 lignes chacun).
- « Laura training » → LoRA ; « pyandic » → Pydantic ; « mgabytes » / « floatingoint » → megaoctets / floating-point (MFLOPs).
- « Monarch » seul → Monarch Hadamard MLP (bloc remplaçant le FFN) ; complété par : attention GQA + taps convolutifs causaux, engram (mémoire n-grams lue par gather), hyper-connexions multi-lanes.
- Tailles précisées : binaires CQ2-bit 8–29 MB ; échelons 2L = 25 M, 4L = 29 M, 8L = 52 M, 16L = 98 M, 20L = 121 M params ; fichier
needle3.cact20 couches = 29 MB. - Protocole de comparaison précisé : baselines en f16 sous vLLM, DeepSeek V4 Flash via son API cloud, Needle via le binaire CQ2-bit réellement livré.
- Compléments vérifiés : vitesses RPi 5 (decode ~4 000 → ~400 tok/s, prefill ~10 000 → ~1 000 tok/s) ; Cactus Compute = YC S25, fondée en 2025 par Henry Ndubuaku & Roman Shemet ; entraînement sur 360 Md de tokens structurés propriétaires ; Needle 1 = 26 M params (MIT), Needle 2 = 45 M params / 14 MB / ~28 MB RAM.
📎 Sources officielles
- GitHub — cactus-compute/needle (Apache 2.0, ~11,3k ★)
- Hugging Face — poids Needle 3
- Page de release officielle — cactuscompute.com/needle
- Blog Cactus — appareils supportés & vitesses
- Y Combinator — fiche Cactus Compute (S25)
- Pebble — blog Index 01 (fonctionnement offline)
- Vidéo source — « Needle 3 AI Model: The Tiny Model Nobody’s Talking About Yet! » (Panda Making Money)
