Synthèse, accueil

Projets

achi

Le compagnon de liseuse : un firmware Rust bas niveau pour l'ESP32-C3 embarqué, une app Android bâtie sur Crux, et une petite mascotte inspirée de Snoopy qui dit des choses gentilles, régulièrement et avec retenue : l'ami parfait, au sens Vipassana. Un petit LFM2.5 fine-tuné maison souffle les mots. Sur l'établi, bientôt public.

RustESP32CruxIA

Rôle
Concept, firmware, appli, entraînement du modèle.
Période
2026
Stack
Rust (esp-hal, Embassy), Crux, Jetpack Compose, llama.cpp, LFM2.5 (MLX)
Une planche de onze portraits d'Achi en 1 bit, un beagle de profil à la longue oreille noire et à la tache sur le flanc, rendus par le simulateur de bureau : calme, qui s'étire, sous un parapluie, concentré, plongé dans un livre, rêveur sous une bulle de pensée, qui frissonne, les yeux clos sous des étincelles, content, un peu ennuyé, en fête.

Le besoin

Achi est un compagnon numérique : un petit beagle dessiné qui affiche, quelques fois par jour, une phrase bienveillante. Il s’affiche sur le téléphone et sur une XTEInk X4, une liseuse de poche construite autour d’une puce ESP32-C3. J’ai commencé le projet le 21 juin 2026, avec un principe : la retenue.

Le dessin, en ligne claire, est un hommage original à Snoopy, et le nom vient d’Hachikō, le chien qui attendait son maître. Le projet s’inspire de la Vipassana de S. N. Goenka et de la notion de kalyāṇa-mitta, « l’ami pour le bien ».

À l'usage

L’expression d’Achi suit la journée. Le téléphone lui transmet l’heure, la météo d’Open-Meteo et la phase de la lune. À partir de 60 % de risque de pluie, Achi tient un parapluie ; à 3 °C, il grelotte. Le matin, il s’étire, les soirs de pleine lune, il rêve, et quand le téléphone revient à portée, il sourit.

Trois fois par jour, à 8 h, 13 h et 19 h, le téléphone prépare une pensée. Achi ferme alors les yeux sous une petite étincelle, jusqu’à ce que la personne appuie sur un bouton. La pensée part d’un fait du jour et tient en une ou deux phrases.

Le modèle tourne sur le téléphone, et toutes les données y restent. La liseuse reçoit le contexte et la pensée en Bluetooth.

Architecture

Le projet comprend trois espaces de travail Rust et une application Android. Des crates partagées définissent le format des messages, le moteur d’humeur, l’animation du visage et la génération du texte. Le même moteur d’humeur tourne dans le firmware, si bien que le téléphone et la liseuse affichent le même visage.

L’application suit l’architecture Crux : un noyau Rust décide quand rafraîchir l’écran, générer une pensée ou l’envoyer, et la couche Jetpack Compose exécute ces actions, y compris la génération par llama.cpp.

Le firmware est écrit en Rust et tourne directement sur la puce, avec le runtime asynchrone Embassy. Téléphone à portée, la liseuse est en veille légère ; hors de portée, en veille profonde, et l’encre électronique garde la dernière image avec une consommation nulle.

Décisions

Un seul moteur d’humeur. Le visage et la phrase utilisent les mêmes seuils, calculés par une fonction pure : ils décrivent toujours la même journée.

Un modèle entraîné pour Achi. J’ai fine-tuné LFM2.5-350M sur un Mac, d’abord par distillation : un modèle de 1,2 milliard de paramètres a répondu à 192 faits, filtrés par un juge de style au seuil de 0,70. Une passe d’optimisation par préférences, sur 154 paires, a ensuite gagné quatre comparaisons sur six, avec zéro régression.

Le plus petit modèle suffisant. Quantifié, le modèle pèse environ 217 Mo et se charge sur le téléphone à chaque pensée. Je retiens le plus petit modèle qui réussit une évaluation à l’aveugle.

La retenue. Une pensée par horaire, en mots simples.

Une restauration vérifiée avant tout flash. J’ai sauvegardé les 16 Mo de flash de la X4 et vérifié la restauration avant d’écrire le firmware. Les fusibles et le démarrage sécurisé, deux réglages irréversibles, restent d’origine.

Aujourd'hui

Le firmware tourne sur la X4, l’application s’y connecte automatiquement, et le modèle en est à sa troisième version. Achi sera bientôt public.

Un projet en tête ? Parlons-en