$ brimkern chat
Moteur d’inférence WebGPU & WGSL on-device
Un assistant de code dans votre terminal, sur votre propre GPU
Les mêmes kernels WGSL écrits à la main que le moteur du navigateur, pilotés depuis votre shell. Qwen 3 4B par défaut, sans Python, sans CUDA, sans serveur, sans clé d’API : votre code ne quitte jamais la machine.
Une vraie session
Capturée telle quelle depuis le terminal, couleurs comprises : le Markdown est rendu pendant le flux (gras, code, listes), et chaque réponse se termine par son temps et une estimation de ce qu’une API payante aurait facturé.
kern › give me 3 advantages of TypeScript as a list with bold titles, and one short code example Type Safety: Ensures that variables are used correctly by the compiler, reducing runtime errors. Better Tooling: Provides features like intellisense, refactoring support, and error detection during development. Maintainable Code: Enforces a structured approach to code organization and promotes cleaner, more readable code through interfaces and type annotations. Code Example: function greet(name: string): void { console.log(`Hello, ${name}!`); } greet("World"); ⏱ 10.67s · ~9.6 tok/s · 102 tokens · ≈ $0.0024 saved (session: $0.0024) (Dawn (Metal))
Enregistrée le 23/09/2026 sur un Mac série M, Qwen 3 4B (Dawn natif), cache chaud. Sortie non retouchée.
Installation
Sur macOS ou Linux, avec Node.js 20+ et git. Le script clone le dépôt dans ~/.brimkern, installe les dépendances, construit le moteur et ajoute une commande brimkern dans ~/.local/bin. Relancez-le pour mettre à jour.
Lancez ensuite brimkern chat dans n’importe quel dossier de projet. Le GPU est utilisé directement : Metal sur macOS, Vulkan sur Linux. Le premier lancement télécharge le modèle par défaut une fois (2,53 Go) ; les suivants le relisent depuis ~/.cache/brimkern (mesuré sur le modèle de 491 Mo : 35,4 s la première fois, 3,4 s la seconde).
Désinstaller : rm -rf ~/.brimkern ~/.local/bin/brimkern
Le REPL
Tapez / et les commandes correspondantes s’affichent sous le prompt pendant la frappe, la fin de la première en grisé : → ou Tab l’accepte. L’assistant sait dans quel projet vous êtes (il lit le README, la description du paquet et la branche git) : « à quoi sert ce projet ? » obtient une vraie réponse.
@path/file:10-40Injecte un fichier (ou une plage de lignes) dans le prompt. Tab complète les chemins./modelSélecteur interactif (↑/↓, Entrée) pour changer de modèle à chaud./mode code|plan|review|autoChange la manière dont l’assistant intervient./think off|auto|deepRaisonnement pas à pas, affiché dans son propre bloc./diff · /commitRevue de vos modifications git · propositions de messages de commit./review <file>Revue approfondie d’un fichier./copy · /acceptCopie la dernière réponse · extrait ses blocs de code./status · /statsÉtat de la session · tokens, vitesse, économies estimées./reset · /clearOublie la conversation · efface l’écran.!git statusExécute une commande shell sans quitter le REPL.Esc · Ctrl+CArrête la génération en cours (la session survit).Le chiffre d’économies est une estimation, présentée comme telle : tokens ≈ caractères / 4, l’historique compté à chaque tour comme le facturerait une API, à un tarif de référence de 3 $ / 15 $ par million de tokens en entrée / sortie ; BRIMKERN_PRICE_IN et BRIMKERN_PRICE_OUT pour mettre le vôtre.
Fichiers, git & shell
@file
Mentionnez un fichier, éventuellement avec une plage de lignes : il est lu sur le disque et inséré dans le prompt.
kern › explain the state handling in @src/app/Composer.tsx:10-60
/diff · /commit · /review
Lit vos modifications non commitées pour les relire ou proposer trois messages de commit conventionnels ; /review prend un fichier.
kern › /diff kern › /commit kern › /review src/lib/storage.ts
Pipes & scripts
L’entrée standard est lue automatiquement : Brimkern s’enchaîne avec les outils habituels. --raw ne garde que le texte du modèle sur stdout (ni en-tête, ni temps, ni couleurs), prêt à rediriger.
git diff | brimkern "Write a conventional commit title"
cat crash.log | brimkern "Find the root cause"
brimkern --raw "Write a .gitignore for a Next.js app" > .gitignoreModèles
Trois presets, classés à notre banc de code : cinq suites, 202 problèmes, décodage glouton, chaque réponse exécutée contre des tests. coder-max est à 2 problèmes de Claude Sonnet 5, mais demande une machine de 20 Go de mémoire ou plus.
| Modèle | HumanEval | HumanEval+ | MBPP+ | TypeScript | Réparation de bug | Total |
|---|---|---|---|---|---|---|
| coder-max | 41/41 | 38/40 | 35/40 | 36/40 | 34/41 | 184/202 |
| Claude Sonnet 5 | 41/41 | 36/40 | 33/40 | 36/40 | 40/41 | 186/202 |
| coder | 35/41 | 34/40 | 28/40 | 28/40 | 21/41 | 146/202 |
| super-coder | 33/41 | 30/40 | 29/40 | 27/40 | 26/41 | 145/202 |
HumanEval (41), HumanEval+ (EvalPlus, 40), MBPP+ (40), TypeScript (MultiPL-E, 40), réparation de bug (HumanEvalFix, 41), 25/09/2026. Problèmes résolus seulement : les temps dépendaient de l’état de la machine et ne sont pas comparés. Reproduire : node scripts/bench-code.mjs --suite=humaneval,heplus,mbppplus,ts,fix.
Sur votre GPU · mesuré, même banc
Claude · cloud · mesuré, même banc
GPT · cloud · annoncé par OpenAI, HumanEval complet (164), leur protocole, non mesuré ici
Voir en tableau
| Groupe | Modèle | pass@1 | Détail |
|---|---|---|---|
| Sur votre GPU | coder-max · Qwen 3.6 35B-A3B | 100.0 % | 41/41 |
| Sur votre GPU | coder · Qwen 3 4B | 85.4 % | 35/41 |
| Sur votre GPU | super-coder · Qwen 3.5 4B | 80.5 % | 33/41 |
| Claude | Claude Opus 5.5 | 100.0 % | 41/41 |
| Claude | Claude Sonnet 5 | 100.0 % | 41/41 |
| Claude | Claude Haiku 4.5 | 97.6 % | 40/41 |
| GPT | GPT-4.1 | 94.5 % | annoncé par OpenAI |
| GPT | GPT-4.1 mini | 93.8 % | annoncé par OpenAI |
| GPT | GPT-4o | 90.2 % | annoncé par OpenAI |
pass@1 sur 41 problèmes HumanEval (un sur quatre), 24/09/2026. Modèles locaux : Dawn natif sur Mac série M, décodage glouton. Claude : même prompt et mêmes tests via claude -p. Les scores GPT sont ceux d’OpenAI, sur le banc complet : montrés pour l’ordre de grandeur, pas comparables point à point. Reproduire : node scripts/bench-code.mjs.
Mélange d’experts : ~3 B de ses 19 B de paramètres travaillent par token. Spécialiste du code, 50 % des experts élagués.
Répond directement ; réflexion à la demande avec /think deep.
Hybride Gated DeltaNet + attention ; réfléchit toujours avant de répondre, d’où la lenteur.
Tout .gguf mono-fichier ou .brik fonctionne aussi, par URL ou chemin local (servi au moteur par plages HTTP, jamais chargé entier en RAM) :
brimkern --model=./models/custom.brik "Explain this code"
Options
-m, --model=<coder|coder-max|super-coder|url|path>string--mode=<code|plan|review|auto>string--think=<off|auto|deep>string--lang=<en|fr>string-s, --system=<prompt>string-n, --max-tokens=<n>number-t, --temperature=<value>number-q, --quietflag--jsonflagmcpcommand--rawflag--native · --chromiumflagchatcommandSous le capot
WGSL écrit à la main
Les compute shaders du moteur navigateur, compilés par le pilote WebGPU de la plateforme : Metal sur macOS, Vulkan sur Linux.
Dawn natif
Les modèles .brik tournent in-process via des bindings Node vers Google Dawn, sans lancer de navigateur.
Kernels auto-validés
Chaque kernel est comparé à une référence CPU au démarrage ; si un GPU se trompe, le moteur retombe sur un chemin portable.
Streamé une fois, en cache
Les poids arrivent par plages d’octets HTTP et restent sur le disque : le lancement suivant les relit en local.
Plus sur le moteur : comparaison mesurée avec WebLLM · le conteneur .brik.
Brimkern : moteur WebGPU open, conçu par Romain Khanoyan. IA locale, WebGPU, moteurs on-device.