Skip to main content
Retour aux billets
Oct. 20267 min de lecture

Spare Thumbs : Gemma 4 répond à « on peut déplacer la réunion? » avec mes mots, à partir de mon vrai agenda, sans jamais me surbooker

Les clients déplacent leurs réunions le soir. Spare Thumbs, c'est Gemma 4 sur mon portable : il lit la demande dans Gmail, vérifie mon vrai Google Agenda, rédige la réponse avec mes mots et déplace l'événement quand le client confirme. Sur dix demandes dans une semaine chargée, Gemma 4 seul a proposé une heure prise dans 7 brouillons; Spare Thumbs, dans 0.

HacktoberfestDEV ChallengeGemma 4EmbeddingGemmaOllamaGmail APIGoogle CalendarLocal AIHackathon
J'ai écrit ce billet pour le DEV Hacktoberfest Open-Source AI Challenge, semaine 3 : Slow and Steady (octobre 2026), et j'ai bâti Spare Thumbs pour la même soumission. Il tourne sur mon propre portable, sur ma propre boîte de réception, alors il n'y a pas de version hébergée à essayer; la vidéo de démo montre le premier essai en direct. #hf26challenge
La revendication en une phrase : sur dix demandes de changement d'heure dans une semaine chargée, Gemma 4 sans mon agenda a proposé une heure où j'étais déjà pris dans 7 brouillons sur 10, et Spare Thumbs dans 0, corrigé par l'agenda lui-même, où une heure chevauche un événement ou non. La semaine des dix demandes est inventée pour que le test se répète; la démo tourne sur mon vrai agenda, et la question de savoir si ça sonne comme moi est jugée par un modèle, pas par des gens qui me connaissent.
Carte titre sur fond sombre : Spare Thumbs en gros caractères, puis « Clients move meetings at night. Gemma 4 answers in my words, from my real calendar, and never offers a time I'm already booked. » et, en orange, « Gemma 4 + EmbeddingGemma, running locally on Ollama ».
Spare Thumbs : Gemma 4 sur mon portable répond à « on peut déplacer la réunion? » avec mes mots, à partir de mon vrai Google Agenda.

Les clients déplacent leurs réunions le soir

« Il y a un imprévu jeudi, on pourrait faire vendredi 10 h à la place? » Pour répondre, j'ouvre mon agenda, je trouve un trou et je tape la même réponse que d'habitude. Ça arrive à peu près une fois par semaine, par courriel, WhatsApp et Discord, et ça coûte environ cinq minutes chaque fois : la réponse, puis revenir pour la confirmation et déplacer l'événement.

Spare Thumbs répond à ma place. Gemma 4 tourne sur mon portable et surveille mon Gmail. Quand un client demande de déplacer une réunion, il trouve la réunion, vérifie mon vrai Google Agenda et laisse une réponse en brouillon dans le fil Gmail. Si l'heure demandée est libre, il dit oui. Sinon, il propose des heures où je suis vraiment libre. Quand le client écrit « 11 h, ça marche », il déplace l'événement et rédige la confirmation. La partie paresseuse : j'appuie sur Envoyer.

Journal de terminal d'un essai en direct : Sam demande de déplacer la révision du site à vendredi 10 h; Gemma appelle find_meetings, puis check_calendar pour vendredi, qui montre 9 h 30 à 11 h occupé et 11 h à 18 h libre, puis draft_reply qui propose vendredi 11 h et 14 h, enregistré en brouillon dans le fil Gmail.
Essai en direct : Gemma 4 trouve la réunion, vérifie vendredi, voit que 10 h est pris et propose 11 h ou 14 h, qui sont vraiment libres.

Gemma 4 décide de chaque étape

gemma4:e4b tourne avec Ollama, avec l'appel de fonctions natif et cinq outils : find_meetings, check_calendar, draft_reply, move_event et hand_off. Pour chaque nouveau message, il choisit quel jour vérifier, lit ce qui est réservé, puis accepte, propose d'autres heures, pose une question ou me laisse le message. Quand le client répond, la même boucle repart avec ce qu'il avait proposé, et il choisit de déplacer l'événement et de confirmer. La boucle se termine quand Gemma arrête d'appeler des outils.

Fil Gmail intitulé Website review Thursday : le message de Sam qui demande de passer à vendredi 10 h et, en dessous, un brouillon de réponse non envoyé : « hey sam, sorry about that! 10h on friday is booked up for me. how about 11h or 14h instead? let me know if either works! thx », avec le bouton Envoyer.
La réponse arrive en brouillon dans mon fil Gmail, écrite comme j'écris. Rien ne se rend au client avant que j'appuie sur Envoyer.

Ma voix, sans réentraînement

J'ai 63 messages à moi sur WhatsApp et Discord, trop peu pour réentraîner un modèle et bien assez pour en retrouver. Pour chaque message reçu, EmbeddingGemma trouve les cinq réponses que j'ai écrites aux messages les plus semblables, et Gemma 4 les voit comme exemples, avec une courte fiche de style qu'il a rédigée à partir de toutes mes réponses. Chaque réponse que j'envoie s'ajoute, alors les brouillons que j'approuve enseignent le suivant. Les mots de passe, courriels, liens, numéros de téléphone, noms et noms d'entreprise sont caviardés avant d'atteindre une consigne, et les conversations brutes restent dans un dossier hors du dépôt.

Sortie de terminal intitulée « EmbeddingGemma -> the 5 replies I wrote to the messages most like this one, out of 36 », qui liste des paires de message client et de ma réponse avec des scores de similarité de 0,97, 0,70, 0,61 et 0,50, les noms remplacés par [NAME].
EmbeddingGemma retrouve mes propres réponses aux messages les plus semblables, dont une que j'ai envoyée avec lui plus tôt. Aucun réentraînement.
Journal de terminal : Sam écrit « 11h works, see you Friday! »; Gemma appelle move_event, déplacé au vendredi 30 octobre 11 h, puis draft_reply avec « hey sam, awesome! see you friday at 11h. thx! », enregistré en brouillon et déplacé dans Google Agenda de jeudi 14 h à vendredi 11 h.
Sam dit que 11 h lui convient. Gemma 4 appelle move_event de lui-même, puis rédige la confirmation.
Vue de jour de Google Agenda pour le vendredi 30 octobre 2026, avec l'événement Website review de 11 h à midi.
Mon vrai Google Agenda après l'essai : la révision du site est maintenant le vendredi à 11 h, déplacée par Gemma 4.

La consigne demande; le code s'en assure

La consigne demande à Gemma de proposer seulement des heures libres, mais une consigne ne garantit rien. Alors draft_reply et move_event refusent toute heure qui chevauche mon agenda, tombe la fin de semaine, sort de 9 h à 18 h ou est déjà passée. Ils refusent aussi une heure écrite dans la réponse qui n'a jamais été passée pour vérification (une première version écrivait « 17h » dans le texte et sautait la vérification), et des mots en français dans une réponse à un message en anglais. Un refus retourne à Gemma comme une erreur et il réessaie. Dans le test des dix demandes, la barrière a attrapé une plage occupée et un glissement vers le français avant qu'ils n'atteignent un brouillon.

Journal de terminal : le premier brouillon de Gemma propose 9 h ou 11 h vendredi, et une ligne rouge indique « BLOCKED: overlaps 'Return sink' 09:30-10:30 on Fri 30 Oct (sent back to Gemma to try again) ».
La barrière : Gemma a proposé 9 h, le code a vu que ça chevauche un vrai événement à 9 h 30, a bloqué le brouillon et l'a renvoyé pour un nouvel essai.

Sept sur dix, puis zéro

Gemma 4 seul accepte n'importe quoi. Je lui ai donné dix demandes « on peut déplacer? » dans une semaine chargée, une fois sans mon agenda et une fois comme Spare Thumbs, avec les mêmes exemples de voix les deux fois. Sans l'agenda, 7 des 10 brouillons proposaient une heure où j'étais déjà pris (11 des 14 heures proposées). Spare Thumbs : 0 brouillon sur 10, 0 heure sur 16. À qui demandait de passer de 10 h à 13 h, Gemma seul a écrit « no problem at all, 13h on monday works for me! » alors que 13 h, c'était l'expert en sinistre; Spare Thumbs a écrit « i can't do 13h cuz i have another meeting then, but i'm free at 14h30 or 15h. » L'essai est enregistré dans un fichier de résultats à côté du code et se relance en une commande.

Carte de résultats intitulée Ten reschedule requests, one busy week : une rangée de dix cases pour Gemma 4 sans mon agenda avec sept croix rouges, notée 7 sur 10 brouillons proposant une heure prise, et une rangée de dix crochets verts pour Spare Thumbs, notée 0 sur 10.
Dix demandes dans une semaine chargée : Gemma 4 sans mon agenda a proposé une heure prise dans 7 brouillons. Spare Thumbs : 0.

Est-ce que ça sonne comme moi?

Je ne voulais pas que le résultat attende que des amis remplissent un formulaire, alors un modèle d'une autre famille a joué l'ami. Qwen 3.5 (4B) a lu 8 de mes vrais messages, puis a vu un message, ma vraie réponse, la réponse de Gemma avec mes exemples et celle de Gemma sans eux, et a choisi celle que j'ai écrite. Chacun des 15 messages mis de côté a été posé dans les 6 ordres, alors un juge qui préfère « A » ne gagne rien. Il a choisi Spare Thumbs comme étant moi 56 % du temps, ma vraie réponse 33 % et Gemma seul 11 %. Un deuxième juge, Qwen 2.5 (7B), a choisi Gemma seul 53 %, Spare Thumbs 36 % et ma vraie réponse seulement 11 % : il préfère la réponse polie de l'IA à mes propres messages, donc il ne reconnaît pas ma façon d'écrire. Je le rapporte quand même.

Pourquoi il faut des poids ouverts

Les messages de mes clients, ce sont les affaires de mes clients. Je peux faire tourner ça parce que Gemma 4 et EmbeddingGemma sont des poids ouverts qui tournent sur mon propre portable : les courriels, l'agenda et mes 63 vraies réponses ne vont jamais à un modèle hébergé. Les poids ouverts rendent aussi la barrière possible. Je peux entourer le modèle de code qui refuse, réessaie et consigne chaque étape, et toute la boucle tient dans un fichier d'une centaine de lignes.

Ce qui n'est pas revendiqué

Le 7 sur 10 contre 0 sur 10 est corrigé par l'agenda, pas par moi, mais la semaine chargée derrière est inventée pour que le test se répète, et dix demandes, c'est un petit échantillon. La démo est le premier essai en direct sur mon vrai agenda, avec une deuxième adresse à moi qui joue le client : ses deux messages ont été placés dans ma boîte avec l'API Gmail parce que je ne pouvais pas envoyer depuis ce compte pendant le tournage. Le résultat sur la voix est le jugement d'un modèle, pas celui de gens qui me connaissent, et les deux juges ne s'entendent pas. Il ne fait que des brouillons : rien ne se rend à un client avant que j'appuie sur Envoyer. Il répond seulement dans Gmail et Google Agenda, et seulement aux expéditeurs d'une liste autorisée; mes messages WhatsApp et Discord lui ont appris ma voix, mais il n'y répond pas encore.

Projet associé

Spare Thumbs: Gemma 4 on my laptop answers "can we move the meeting?" in my words, from my real Google Calendar, and never offers a time I am already booked

Voir le projet