❌

Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Vibe Coding : Révolution du développement ou mirage technologique ?

Générer une application complète en quelques minutes à partir d’une simple description textuelle : c’est la promesse vertigineuse du « vibe coding« . L’intelligence artificielle prend le relais sur la syntaxe, vous laissant le seul rôle de chef d’orchestre. Mais derrière cette magie apparente se cachent des pièges redoutables et de véritables bombes à retardement pour la […]

Cet article Vibe Coding : Révolution du développement ou mirage technologique ? a été publié en premier sur Framboise 314, le Raspberry Pi à la sauce française..... - Framboise 314, le Raspberry Pi à la sauce française.... - La référence du Raspberry Pi en France - Par l'auteur du livre "Raspberry Pi 4" paru aux Edts. ENI

ArseneLupin - Le JEV Like d'Ibou qui décide au lieu de bavarder

Jev, je ne l'ai jamais utilisé mais Kev, en revanche, je l'ai branché dans mon outil de sélection de sujets de veille pour qu'il me dise notamment si un sujet correspond à ce qui me plaît ou pas. C'est en cours de test, donc je ne vais pas vous livrer de conclusion hâtive sur si ça fonctionne bien ou pas, mais si je vous en parle, c'est parce que Sylvain Peyronnet, le papa du moteur de recherche français Ibou , publie à son tour 3 modèles de la même famille, baptisés ArseneLupin, conçu également pour faire du décisionnel

Pour ceux qui ne suivent pas l'actualité IA, le nouveau truc à la mode en ce moment, c'est Jev, un modèle maison de TypeSafe qui est le premier de ce qu'ils appellent les modèles System One. Au lieu de générer du texte qu'il faut ensuite parser, ce reçoit un état (un texte, un ticket, un objet JSON) et des questions typées : oui ou non (noul), un choix parmi plusieurs options (choice) ou une note sur une échelle (score). Et il renvoie pour chacun de ces choix, des probabilités que votre code peut ensuite exploiter directement pour trier, faire du routage ou prendre des décisions. Par exemple, avec ça, on peut faire de la qualification de tickets de bug ou de l'anti-spam, ce genre de choses.

Alors forcément, suite à ça, des clones ouverts ont débarqué. Le premier que j'ai découvert, c'est Kev , de Jared Palmer, qui s'appuie sur Qwen3.5 et Qwen3.8, soit 0,8 à 27 milliards de paramètres, et laya qui part d'un encodeur ModernBERT-large pour 421 millions de paramètres au total.

Perso, avec Kev dans mon outil de veille, Pour le moment, j'ai un peu de mal à voir si c'est mieux qu'une décision prise par un Qwen 3.6 classique qui génère une réponse textuelle mais Kev a été entraîné sur des textes de 384 tokens au max, et les articles qui tombent dans ma veille dépassent largement ce gabarit...

ArseneLupin, c'est donc la version d'Ibou, annoncée par Sylvain la semaine dernière. Sa v1.1 repose donc sur Qwen3.5-4B, la mini sur Qwen3.5-0.8B et ArseneLupinstral sur Ministral 8B. Les poids sont sous licence Apache 2.0 et le code pour s'en servir et l'intégrer est fourni, mais pas le code d'entraînement ni les données.

C'est encore jeune, donc il n'y a pas eu de benchmark indépendant, mais Ibou en a fait et voici ce qu'ils obtiennent avec une classification d'intentions de recherche en dix catégories. Avec la 1.1, ils obtiennent 50,7 % de bonnes réponses, contre 39,7 % pour la mini et 43,9 % pour Jev 1.13.

Bref, ce sont leurs mesures, mais si elles sont justes, ça veut dire qu'Arsène Lupin est plus efficace que Jev.

Installer ArseneLupin v1.1

Alors pour ce tuto, j'ai pris la v1.1 qui est la plus "balèze".

À la fin de cette section, vous aurez donc un serveur local qui crache du JSON accessible sur le port 8000. Il vous faut Python 3.11 ou une version plus récente et une 10aine de Go libre puisque le modèle complet pèse 9,3 Go en bfloat16.

J'exclus au téléchargement le dossier gguf, qui contient la version 8 bits de 4,5 Go destinée à llama.cpp. Pour démarrer, il faut donc créer un environnement virtuel, puis récupèrer le modèle, et installe le code de service avec la version de transformers qui va bien, c'est à dire la 5.17.0 :

python3 -m venv lupin && source lupin/bin/activate
pip install -U huggingface_hub
hf download IBOU-SEARCH/ArseneLupin-v1.1 --local-dir arsenelupin-v1.1 --exclude "gguf/*"
cd arsenelupin-v1.1
pip install ./code "transformers==5.17.0"

Par défaut, le fichier serve.yaml envoie le modèle sur une carte NVIDIA (cuda:0). Sur un Mac, il faudra donc le basculer sur le GPU d'Apple (mps), et sur une machine sans GPU, ce sera cpu. Je pense que je ne vous apprends rien, vous avez l'habitude,

Ensuite, on lance le serveur. Notez juste que sous Linux, le sed s'écrit sans les deux apostrophes après le -i. :

sed -i '' 's/cuda:0/mps/' serve.yaml
python -m arsenelupin serve --config serve.yaml --calibration calibration/default.json --port 8000

Le serveur ArseneLupin v1.1 à l'écoute sur le port 8000, poids chargés

Au bout de quelques secondes, le serveur écoutera sur 127.0.0.1:8000. Quant à la version GGUF, vous pouvez, si vous voulez, le faire tourner dans un llama.cpp ou équivalent à condition d'en avoir un assez récent qui connait l'archi de Qwen3.5.

Poser vos premières questions

Pour tester, je me suis inspiré de mon outil de veille. On donne au modèle le titre et le résumé d'un sujet et on lui demande si ça parle d'un outil qu'on peut installer, dans quelle rubrique il faut le ranger et à quel point ça pourrait intéresser des gens comme vous, c'est à dire des lecteurs technophiles / bidouilleurs.

Placez donc ça dans un fichier nommé veille.json, dans le dossier du modèle :

{
 "state": {
 "titre": "ArseneLupin, trois modèles de décision publiés par Ibou",
 "resume": "Le moteur de recherche français Ibou publie sur Hugging Face trois modèles qui répondent par oui ou non, par un choix ou par une note, avec des probabilités. Les poids sont sous licence Apache 2.0 et le code de service est fourni."
 },
 "questions": {
 "installable": {"type": "noul",
 "instructions": "Le texte présente-t-il un outil que le lecteur peut installer lui-même ?"},
 "rubrique": {"type": "choice",
 "instructions": "Dans quelle rubrique ranger ce sujet ?",
 "criteria": {"ia": "Intelligence artificielle et modèles de langage",
 "dev": "Outils pour développeurs et infrastructure",
 "securite": "Sécurité informatique, failles et vie privée",
 "materiel": "Matériel, gadgets et bricolage électronique"}},
 "interet": {"type": "score",
 "instructions": "Ce sujet intéressera-t-il un lecteur technophile qui aime tester des outils ?",
 "criteria": ["Pas du tout", "Un peu", "Beaucoup"]}
 }
}

Puis dans un second terminal ouvert dans le même dossier, tapez la ligne de commande curl suivante pour lancer l'évaluation avec ArseneLupin.

curl -s http://127.0.0.1:8000/v1/systemone -H 'Content-Type: application/json' -d @veille.json | python3 -m json.tool

La réponse à la requête de veille : "ia" à 0,72, un oui/non hésitant à 0,53 et un score de 1,47

Comme vous pouvez le voir, pas une ligne de texte généré, chaque question revient avec ses probabilités. On voit donc que la rubrique "ia" l'emporte à 0,72, loin devant "dev" à 0,19, et le niveau "Beaucoup" ressort à 0,59 pour l'intérêt, ce qui donne un score moyen de 1,47 sur une échelle qui va de 0 à 2. Par contre, pour savoir si c'est un outil installable, le modèle hésite quand même un peu avec un timide 0,53 de probabilité pour le oui.

Il renvoie quand même une indication qui est plutôt importante à savoir là décision : "decision": true, car aucun seuil n'est appliqué côté serveur (c'est ce que dit le "decision_status": "unthresholded"). C'est donc à votre code de décider qu'en dessous de 0,7, par exemple, la décision revient à un humain plutôt que de partir dans la base de données automatiquement. Sur mon Mac Studio M4 Max, la requête a pris entre 2,4 et 2,8 secondes pour ces huit options.

J'ai fait un 2ème essai avec un commentaire de spam bien grossier : "Super article !!! Pour gagner 500 € par jour depuis chez vous, cliquez vite sur mon profil, places limitées." La v1.1 le classe en spam à 0,86 et lui colle un ton positif à 0,78, ce qui est vrai au premier degré. Et la version mini du modèle répond deux fois plus vite, en 0,8 seconde, mais descend à 0,76 sur le spam et hésite sur le ton... À voir donc si ça suffit pour vous d'utiliser le modèle mini ou pas, selon vos besoins.

Comment ArseneLupin prend ses décisions

Le code livré avec le modèle se lit facilement et la mécanique est plutôt simple à capter. En fait chaque option devient une question oui/non posée au Qwen affiné, du genre "ce candidat décrit-il la bonne réponse ?".

Ainsi, 4 catégories pour classer un contenu se résume en 4 questions sur le même texte accompagnée d'une petite tête de lecture (2 561 paramètres sur la v1.1) qui transforme le dernier état caché du modèle en score. Un softmax répartit ensuite ces scores en probabilités, et la confidence n'est rien d'autre que la plus forte d'entre elles...

Pour que ça reste rapide malgré toutes ces passes, le serveur lit une seule fois le texte commun aux options, puis calcule toutes les options simultanément.

En fait avec ArseneLupin, on reproduit le principe de Jev mais avec un LLM ouvert (Qwen) en ne lui faisant produire qu'un seul token, limité aux choix proposés. Ce qu'apporte Ibou, c'est donc un modèle LLM ultra affiné (Autant qu'un bon Saint Nectaire) pour ce type d'exercice de prise de décision.

Reste ensuite la confiance à accorder à ces probabilités. Dans le dossier calibration, vous verrez des températures ajustées selon les trois workflows d'exemple fournis par Ibou, et il y a également, dans le fichier default.json, une calibration par défaut. C'est celle-là qu'on a utilisée dans notre exemple, mais vous pouvez aussi régler vous-même votre propre température ajustée selon vos usages.

Maintenant, avant de lui confier quoi que ce soit, posez-vous un peu et donnez-lui une cinquantaine d'exemples que vous avez déjà classés à la main. Comme ça, vous pourrez comparer ArsèneLupin et le LLM que vous utilisez d'habitude pour savoir qui est le plus fiable. N'hésitez pas à y mettre aussi des textes plus ou moins longs parce que le serveur accepte jusqu'à 32 768 tokens par option. Ça tombe bien parce que ça me gênait un peu dans mon intégration avec Kev sur mon outil de veille. Donc je pense que je vais rapidement basculer sur ArsèneLupin pour ma veille en remplacement de Kev.

Et si vous venez de Jev, attention, la requête a la même forme mais pas la réponse !! Pour une question oui/non, Jev renvoie un champ noul là où ArseneLupin renvoie un p_yes, et pour une note, ArseneLupin range ses probabilités dans une liste quand Jev utilise un dictionnaire.

Cela veut dire qu'un client écrit pour l'API de TypeSafe ne lira pas du tout le résultat de ArseneLupin tel quel, donc prévoyez une petite couche de conversion avant de mettre les deux en concurrence sur vos data.

Votre vieux Nokia 6300 sait maintenant parler à Claude

J'sais pas si vous êtes de la team Dumbphone , mais quand Emir Karşıyakalı tape une recherche Google sur son vieux Nokia 6300 de 2007, il se fait gentiment envoyer chier vers une mise à jour de son browser. Alors, parce qu'il en avait marre de vivre 2026 comme s'il était resté bloqué en 2007, il a codé Claude S40 , un client Claude non officiel pour les Nokia Series 40 qui font tourner du Java.

Et le plus fou c'est que non seulement, c'est vibe codé mais qu'en plus, ça marche du feu de dieu :

Vous tapez votre question au clavier et la réponse s'affiche sur ce tout petit écran. Pour la météo ou l'actu, Claude fait sa recherche web côté serveur sans passer par le navigateur du Nokia. Il est même capable d'inscrire un rendez-vous pour vous dans l'agenda du téléphone.

Évidemment, le téléphone ne cause pas directement à l'API d'Anthropic. En fait, tout passe par un petit serveur écrit en Go, qui est proposé sous la forme d'une image Docker que vous devez héberger vous-même. Et c'est ce serveur qui conserve la clé API d'Anthropic, qui va donc découper les réponses que lui renvoie Claude pour les envoyer au téléphone qui ne lit pas plus de 8 Ko à la fois. Et ce serveur conserve les conversations durant 30 jours max.

Et c'est là que ce vieux Nokia rend la tâche difficile car il ne discute qu'en TLS 1.0 (Les boomers appellent ça "le petit cadenas"), n'envoie pas de SNI (le nom du site demandé) et ses certificats racines datent des années 90 et 2000 donc, autant dire que niveau dates de péremptions, c'est comme visiter la cave à conserves d'un survivaliste...

Le serveur est donc capable de discuter en HTTPS avec le web et de faire suivre la data chiffrée en HTTPS entre lui-même et le Nokia, grâce à un certificat auto-signé, dont la racine a été installée sur le téléphone.

Le code de Claude S40 est bien sûr libre, sous licence MIT, et côté hébergement, il suffit de mettre ça sur un petit VPS à quelques euros par mois et vous êtes tranquille. Ensuite, le reste se facture aux messages puisque chaque question, comme chaque recherche web, passe par votre clé API Claude... Donc, n'oubliez pas de mettre une petite limite de dépense dans votre console Anthropic, histoire de ne pas cramer votre compte en banque.

Par contre, l'appli n'a pour le moment été testée que sur le Nokia 6300 (RM-217) et il lui faut une carte SIM avec les données mobiles activées évidemment. Or le 6300 ne fait QUE du GSM, GPRS et EDGE , et Orange coupe progressivement sa 2G . En effet, depuis mars, 44 départements vont la perdre à partir du 6 octobre, et toute la métropole, hors zones blanches, sera sans 2G dès le 20 octobre 2026. Donc si vous êtes chez Orange, faut pas traîner pour tester car après, ça ne fonctionnera plus !! Sniiiif.

Mais rassurez-vous, Emir ne compte pas s'arrêter là puisqu'il est en train de reverser le firmware du téléphone pour contourner la couche Java et ensuite pouvoir lui faire faire ce qu'il veut. Voilà, si vous avez encore un 6300 dans un tiroir, c'est donc le bon moment de le ressortir, avant de passer à un dumbphone compatible 4G .

Source : Emir sur X

Floci - L'émulateur AWS open source qui tourne en local

Si vous développez pour AWS, il y a de bonnes chances que LocalStack tourne déjà quelque part dans votre docker-compose ou votre CI. C'est un peu l'outil incontournable pour tester ses buckets S3 et ses fonctions Lambda sans avoir à toucher au vrai cloud. Sauf que depuis mars dernier, ses nouvelles versions exigent un compte LocalStack et un jeton d'authentification, CI comprise, et surtout l'édition Community n'est plus prise en charge.

Ouin !

Et comme si ça ne suffisait pas, l'offre gratuite qui reste interdit totalement l'usage commercial. Donc si vous l'utilisez dans le cadre de votre travail, faudra passer à la caisse. Alors, oui, ne pas respecter la licence ou se figer sur une ancienne image reste possible, mais déjà, ça ne se fait pas, et ensuite, niveau faille de sécu, ce n'est pas top.

Mais c'est là qu'arrive en sauveur Floci, un émulateur AWS local sous licence MIT qui se présente comme un remplaçant direct de LocalStack, sans avoir besoin de se créer un compte ou un jeton et surtout sans offre payante planquée dedans.

Maintenant, le principe reste le même puisque vous pointez dessus l'AWS CLI (Floci écoute sur le port 4566), vos SDK, Terraform, OpenTofu ou le CDK, avec la région de votre choix et des identifiants bidon, et vos commandes habituelles tomberont sur votre machine au lieu de partir chez Amazon.

Le plus simple pour démarrer, c'est sa CLI qu'on peut déployer avec Homebrew (il y a aussi un script pour Linux et un pour Windows) :

brew install floci-io/floci/floci
floci start
eval $(floci env)
aws s3 mb s3://my-bucket

Ensuite, faites un floci start pour lancer l'émulateur dans un conteneur et lui monter le socket Docker de votre machine. Floci s'appuie sur de vrais conteneurs dès que la fidélité l'exige ce qui fait que Lambda tourne dans l'image d'exécution officielle d'AWS, RDS lance un vrai PostgreSQL, MySQL ou MariaDB, ElastiCache un Valkey, et c'est pareil pour ECS, EC2 ou EKS.

J'ai fait l'essai sur mon Mac avec un bucket S3, une table DynamoDB et une petite fonction Lambda en Python, et tout a répondu du premier coup à la CLI AWS. La Lambda a juste mis six secondes à répondre au premier appel, puis moins d'une seconde au suivant.

Pour voir ce qui se passe ensuite, une console web est dispo localhost:4566/_floci/ui, avec vos ressources rangées par service.

La console web de Floci sur localhost, après un essai sur S3, DynamoDB et Lambda

Notez aussi que si vous venez de LocalStack, la bascule se résume simplement dans le nom de l'image puisque Floci traduit tout seul les variables d'environnement de LocalStack, exécute sans modification les scripts d'init rangés dans /etc/localstack/init/ et répond même sur /_localstack/health. Cela veut dire qu'une CI qui attend ce signal ne voit pas la différence et ça c'est super cool pour migrer vite fait bien fait.

Et si vos scripts appellent aws ou boto3, prenez l'image floci/floci:latest-compat, qui embarque les deux.

Par contre, méfiez-vous du volume de données, car LocalStack range tout par défaut dans /var/lib/localstack et Floci dans /app/data. Donc dans le docker compose, pointez bien votre volume sur /app/data sinon, vous perdrez vos fichiers au premier restart du docker.

Après n'oubliez pas non plus que Floci imite le comportement d'AWS, et pas sa sécurité. En effet, par défaut, il n'applique aucune politique IAM, donc si vous voulez vérifier qu'un rôle trop resserré bloque bien une action, il faudra activer la variable FLOCI_SERVICES_IAM_ENFORCEMENT_ENABLED. Et certains services ne sont également que des façades. Par exemple Bedrock Runtime renvoie des réponses factices et Transcribe termine ses tâches aussitôt, sans jamais traiter l'audio, donc oui, votre code peut les appeler, mais le résultat ne sera pas au rendez-vous, ce qui est tout à fait normal.

Pour le reste, les données sont stockées en mémoire par défaut et s'effaceront à l'arrêt, ce qui est pile poil ce qu'on veut en CI. Vous pouvez quand même le paramétrer pour que ça s'écrive sur le disque si vous voulez...

Voilà, à essayer sur une branche de votre CI si vous voulez vous débarrasser de débrancher LocalStack pour de bon !

Source : Floci sur GitHub

❌