
Cliquez sur un tag pour affiner votre recherche :
[ << Page précédente (50) ] [ Page suivante (3626) >> ]
Estimation de l'empreinte carbone de mon usage des IA génératives de textes
Je pense avoir entendu : « Une requête ChatGPT consomme l'équivalent de 10 recherches conventionnelles Google ! ».
Problème : je ne retrouve plus la source et cette comparaison me paraît manquer de rigueur. Par exemple, elle ne prend pas en compte le volume de tokens traités en entrée et en sortie.
Aujourd'hui, j'ai cherché à en savoir plus sur ce sujet et à vérifier cette déclaration.
J'ai d'abord cherché des informations sur l'émission de CO2 d'une recherche conventionnelle Google et j'ai trouvé ceci :
In 2009, The Guardian published an article about the carbon cost of Google search. Google had posted a rebuttal to the claim that every search emits 7 g of CO2 on their blog. What they claimed was that, in 2009, the energy cost was 0.0003 kWh per search, or 1 kJ. That corresponded to 0.2 g CO2, and I think that was indeed a closer estimate.
Si ma déclaration précédente est valide et qu'une recherche conventionnelle Google génère 0,2 g
de CO2, alors une requête sur une IA générative de texte devrait sans doute produire environ 2g de CO2.
Attention, ces chiffres datent de 2009 : Google a probablement gagné en efficacité énergétique, mais a probablement aussi complexifié son algorithme.
En attendant de trouver des données plus récentes, j'ai choisi de partir de cette estimation pour cette note.
Ensuite, je me suis lancé dans des recherches sur l'estimation de la consommation CO2 des IA génératives de texte. J'ai effectué des recherches sur arXiv et je suis tombé sur cet article "How Hungry is AI? Benchmarking Energy, Water, and Carbon Footprint of LLM Inference" qui date de mai 2025.
J'y ai trouvé ces graphes d'émission de CO2 par modèle en fonction du nombre de tokens en entrée et en sortie :

Pour Claude Sonnet 3.7 que j'ai fréquemment utilisé, je lis ceci :
- 100 in => 100 out : 0.4g
- 1k in => 1k out : 1g
- 10k in => 10k out : 2g
J'en conclus que l'ordre de grandeur de la déclaration que j'ai entendu semble réaliste.
(Mise à jour du 31 juillet : Mistral IA indique 1,14g pour 400 tokens pour Mistral Large 2)
En mai 2025, mes 299 threads ont consommé 19 129 tokens en entrée, soit 63 tokens par thread en moyenne. Mon usage d'IA générative de texte ce mois-là aurait généré approximativement 299 x 0,4g
= 119g
de CO2.
Pour mettre cela en perspective, j'ai estimé les émissions d'un trajet aller-retour Paris - Crest-Voland (Savoie) avec ma voiture :
- Trajet total :
620 km x 2
=1240 km
- Émissions constructeur (Dacia Sandero Stepway) : 140g CO2/km en WLTP en cycle mixte
Résultat : 1240km x 140g = 173 kg
de CO2 pour mes déplacements hivernaux en Savoie.
Un seul voyage correspond à 121 ans de mon utilisation mensuelle actuelle d'IA générative de texte.
Mise à jour de 31 juillet, voir aussi : Équivalence de l'empreinte carbone de l'entrainement de Mistral Large 2.
J'ai découvert la chaine YouTube Plantophage
Dans la vidéo "Le bio, c'est du 💩 ?" de L'Argumentarium, #JaiDécouvert une nouvelle Chaine YouTube : Plantophage.
Chaîne de vulgarisation scientifique sur les thèmes de l'agriculture, de l'agronomie et du jardinage.
Je précise que je n'ai pas encore regardé de contenu de cette chaîne, qui existe depuis le 21 mai 2023.
La première vidéo de cette chaine a été publiée le 21 mai 2023.
En parcourant la liste des vidéos, j'ai été particulièrement intrigué par "LIVE - Monsieur Phi et le spécisme " (3h34). C'est probablement par celle-ci que je vais commencer à découvrir cette chaîne.
Journal du vendredi 11 juillet 2025 à 23:11
Pendant mon apprentissage d'Observable, #JaiDécouvert les concepts de Wide data et Long data.
Je connaissais ces différentes façons d'organiser des données tabulaires, mais j'ignorais jusqu'à présent leurs noms, apparemment issus de l'article Tidy Data - Hadley Wickham - 12 septembre 2014 .
D'après ce que j'ai compris, les bibliothèques comme d3js ou Observable Plot privilégient le format Long data.
Il me semble que même si le format Wide data est plus intuitif pour les humains (présenté en tableau à plusieurs colonnes, plus lisible), il est généralement plus simple d'effectuer des opérations de traitement sur des données au format Long data.
J'ai découvert Kiln, un outil de gestion de secret basé sur Age
#JaiDécouvert dans ce thread Hacker News le projet kiln (https://kiln.sh/).
kiln is a secure environment variable management tool that encrypts your sensitive configuration data using age encryption. It provides a simple, offline-first alternative to centralized secret management services, with role-based access control and support for both age and SSH keys, making it perfect for team collaboration and enterprise environments.
Je n'ai pas encore testé kiln mais j'ai l'intuition qu'il pourrait remplacer le workflow que j'ai présenté il y a quelque mois dans cette note : "Workflow de gestion des secrets d'un projet basé sur Age et des clés ssh".
Voici les informations que j'ai identifiées au sujet de kiln :
- Ce projet est très jeune
- Écrit en Golang
- Supporte des clés age ou des clés ssh.
- « Team Collaboration: Fine-grained role-based access control for team members and groups »
- What happens if someone leaves the team?
La lecture de la faq m'a fait penser que je n'ai toujours pas pris le temps d'étudier SOPS 🫣.
J'ai hâte de tester kiln qui grâce à Age me semble plus simple que le workflow basé sur pass, que j'ai utilisé professionnellement de 2019 à 2023.
Une extension browser pour exporter ses threads Claude.ia et ChatGPT
Actuellement, et à ma connaissance, les APIs de Claude.ia et ChatGPT ne proposent pas de fonctionnalité d'export de l'historique des conversations de leur interface web de chat.
J'imagine deux approches pour réaliser cet export malgré tout : développer un script qui réalise une forme de Web Scraping ou intégrer cette fonctionnalité directement dans une extension navigateur plutôt que dans un script autonome. L'extension browser présente l'avantage de simplifier la gestion de l'authentification.
Après 30 minutes de recherche sur GitHub, du style "export chatgpt", j'ai trouvé claude-chatgpt-backup-extension
. Cette extension permet l'export d'une ou plusieurs conversations Claude.ia et une conversation à la fois ChatGPT.
Je l'ai testée, elle fonctionne correctement 🙂.
Je viens de proposer cette Pull Request pour ajouter le support de l'export ChatGPT en mode bulk : Add bulk export feature for ChatGPT conversations.
Cette extension pourrait me servir de base de travail pour l'idée de projet "Aggregator - Backup Numeric Conversation System".
Voici les prochaines issues d'amélioration que j'imagine pour un fork de cette extension :
- Affichage conditionnel des boutons d'export Claude.ia uniquement quand l'utilisateur est connecté sur https://claude.ai/ (même principe pour ChatGPT).
- Afficher une barre de progression lors des bulk exportations.
- Proposer une option d'export au format YAML, sous une forme plus facile à lire pour les humains, avec moins d'informations techniques que le format JSON natif proposé actuellement.
- Tenter un refactoring pour simplifier la base de code actuelle.
- Développer une option permettant l'export vers des services Object Storage qui implémentent l'API S3.
- Créer un mock serveur API REST et permettre l'export des données vers ce serveur.
Journal du mercredi 09 juillet 2025 à 09:36
Cette semaine, j'ai eu la chance d'échanger pendant presque 1h avec un des fondateurs de OpenStreetMap France et du projet Panoramax - une discussion passionnante.
J'ai ensuite écouté l'épisode "Une introduction au projet OpenStreetMap – C.Quest " du podcast Projets Libres.
Journal du mardi 08 juillet 2025 à 18:00
#JaiÉcouté l'épisode "Faut-il vraiment culpabiliser en regardant YouTube en 4K ?" de la Chaine YouTube Le Réveilleur.
Cette vidéo traite de l'impact climatique du numérique. Quelles sont les émissions de gaz à effet de serre dans le monde ? Et en France ? Comment ces émissions sont-elles réparties entre terminaux, réseaux et centres de données ? Quel est l'impact de l'audiovisuel ? Du streaming ? De cette chaîne YouTube en particulier ? Comment cet impact se compare à d'autres loisirs ?
Je recommande vivement !
Liens vers les sources de la vidéo :
#JaiLu :
Journal du lundi 07 juillet 2025 à 23:17
J'ai appris un nouveau mot : Exégète
Je ne suis pas historien, je suis exégète.
D'après ma compréhension, un exégète est quelqu'un qui se consacre à l'explication et à l'interprétation de textes, habituellement des textes sacrés tels que la Bible, le Coran, etc.
Dans le cas d'un exégète du roman national, il s'agirait probablement d'une personne qui :
- Dissèque le discours historique officiel
- Explicite comment il est construit
- Met au jour ses implicites et ses omissions
- Analyse ses dimensions idéologiques et politiques
Attention, néanmoins, cette vidéo de Histony rappelle que Pacôme Thiellement n'est pas historien de formation et qu'il développe sa propre version du roman national, orientée à gauche. Il me semble nécessaire de conserver un regard critique sur son contenu, tout comme il faut questionner la fiabilité d'Henri Guillemin, voir : Henri Guillemin est-il fiable.
Rocky Linux semble reproduire CentOS de manière plus fidèle que AlmaLinux
Hier, j'ai écrit la note "AlmaLinux ou Rocky Linux ?".
En ce moment, je suis en train d'approfondir mes connaissances sur le fonctionnement des différents network backend de QEMU et j'en ai profité pour comparer le comportement d'Ubuntu, AlmaLinux, Rocky Linux et CentOS.
J'ai lancé QEMU avec le paramètre qemu ... -nic user
avec chacune de ces distributions et voici les résultats de ip addr
dans chacune de ces VMs:
Ubuntu :
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic ens3
valid_lft 83314sec preferred_lft 83314sec
inet6 fec0::5054:ff:fe12:3456/64 scope site dynamic mngtmpaddr noprefixroute
valid_lft 86087sec preferred_lft 14087sec
inet6 fe80::5054:ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname enx525400123456
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute ens3
valid_lft 83596sec preferred_lft 83596sec
inet6 fec0::5054:ff:fe12:3456/64 scope site dynamic noprefixroute
valid_lft 86379sec preferred_lft 14379sec
inet6 fe80::5054:ff:fe12:3456/64 scope link noprefixroute
valid_lft forever preferred_lft forever
CentOS :
$ sudo ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname enx525400123456
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute ens3
valid_lft 86341sec preferred_lft 86341sec
inet6 fec0::5054:ff:fe12:3456/64 scope site dynamic noprefixroute
valid_lft 86342sec preferred_lft 14342sec
inet6 fe80::5054:ff:fe12:3456/64 scope link noprefixroute
valid_lft forever preferred_lft forever
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3
altname enx525400123456
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0
valid_lft 84221sec preferred_lft 84221sec
inet6 fec0::5054:ff:fe12:3456/64 scope site dynamic noprefixroute
valid_lft 86053sec preferred_lft 14053sec
inet6 fe80::5054:ff:fe12:3456/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Ce que j'observe :
- Rocky Linux et CentOS semblent se comporter de manière identique :
- une interface réseau nommée
ens3
qui signifie : ethernet slot 3 - et les noms alternatifs :
enp0s3
qui signifie : ethernet, PCI bus 0, slot 3enx525400123456
qui signifie : ethernet +x
+ la adresse MAC sans les:
- une interface réseau nommée
- Ubuntu :
- une interface réseau nommée
ens3
- et un nom alternatif :
enp0s3
- une interface réseau nommée
- AlmaLinux :
- une interface réseau nommée
eth0
- et les noms alternatifs :
ens3
enp0s3
enx525400123456
- une interface réseau nommée
Voici les configurations de GRUB_CMDLINE_LINUX_DEFAULT
:
Rocky Linux et CentOS :
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200n8 no_timer_check crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8 no_timer_check biosdevname=0 net.ifnames=0"
Ubuntu :
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Conclusion de cette analyse : il me semble que Rocky Linux cherche à reproduire CentOS de manière très fidèle, alors qu'AlmaLinux se permet davantage de libertés dans son approche.
De 2000 à 2016, j'ai essentiellement déployé la distribution Linux Debian sur mes serveurs et après cette date des Ubuntu LTS.
Depuis 2022, j'utilise une Fedora sur ma workstation. Distribution que je maitrise et que j'apprécie de plus en plus.
J'envisage peut-être d'utiliser une distribution de la famille Fedora sur mes serveurs personnels.
J'avais suivi de loin les événements autour de CentOS en décembre 2020 :
- 8 décembre 2020 : CentOS Project shifts focus to CentOS Stream
- 16 décembre 2020 : Rocky Linux: A CentOS replacement by the CentOS founder
J'ai enfin compris l'origine du nom Rocky Linux :
"Thinking back to early CentOS days... My cofounder was Rocky McGaugh. He is no longer with us, so as a H/T to him, who never got to see the success that CentOS came to be, I introduce to you...Rocky Linux"
J'aime beaucoup cet hommage 🤗 !
J'ai étudié AlmaLinux et il me semble que cette distribution est principalement développée par l'entreprise CloudLinux, une entreprise à but lucratif qui vend du support Linux.
Personnellement, je trouve le positionnement d'AlmaLinux peu "fair-play" envers Red Hat : Red Hat investit massivement dans le développement de Red Hat Enterprise Linux et AlmaLinux récupère ce travail gratuitement pour ensuite vendre du support commercial en concurrence directe.
À mon avis, si une entreprise souhaite un vrai support sur une distribution de la famille Red Hat, elle devrait se tourner vers Red Hat Enterprise Linux et acheter du support directement à Red Hat plutôt qu'à CloudLinux.
Suite à ce constat, j'ai décidé d'utiliser Rocky Linux plutôt qu'AlmaLinux.
21h30 : j'ai reçu le message suivant sur Mastodon :
@stephane_klein you have things quite backwards. AlmaLinux is a non-profit foundation while Rocky is owned 100% by Greg kurtzer and they have over $100M in venture capital funding.
AlmaLinux has a community-elected board.
Suite à ce message, j'ai essayé d'en savoir plus, mais il est difficile d'y voir clair.
Par exemple : I’m confused about the different organizational structure when it comes to Rocky and Alma.
La page "AlmaLinux OS Foundation " que j'ai consultée m'a particulièrement plu.
J'ai révisé ma position, j'ai décidé d'utiliser AlmaLinux plutôt que Rocky Linux.
Journal du dimanche 06 juillet 2025 à 10:14
Il m'arrive régulièrement de perdre du temps en tentant d'insérer des lignes de commentaires dans des commandes Bash multiline, par exemple comme ceci :
sudo qemu-system-x86_64 \
-m 8G \
-smp 4 \
-enable-kvm \
-drive file=ubuntu-working-layer.qcow2,format=qcow2 \
-drive file=cloud-init.img,format=raw \
-nographic \
\ # Folder sharing between the host system and the virtual machine:
-fsdev local,id=fsdev0,path=$(pwd)/shared/,security_model=mapped-file \
-device virtio-9p-pci,fsdev=fsdev0,mount_tag=host_share \
\ # Allows virtual machine to access the Internet
\ # and port forwarding to access virtual machine via ssh:
-nic user,ipv6-net=fd00::/64,hostfwd=tcp::2222-:22
Malheureusement, cette syntaxe n'est pas supportée par Bash et à ma connaissance, il n'existe aucune solution en Bash pour atteindre mon objectif.
Je suis ainsi contraint de diviser la documentation en deux parties : l'une pour l'exécution de la commande, l'autre pour expliquer les paramètres. Voici ce que cela donne :
sudo qemu-system-x86_64 \
-m 8G \
-smp 4 \
-enable-kvm \
-drive file=ubuntu-working-layer.qcow2,format=qcow2 \
-drive file=cloud-init.img,format=raw \
-nographic \
-fsdev local,id=fsdev0,path=$(pwd)/shared/,security_model=mapped-file \
-device virtio-9p-pci,fsdev=fsdev0,mount_tag=host_share \
-nic user,ipv6-net=fd00::/64,hostfwd=tcp::2222-:22
# Here are some explanations of the parameters used in this command
#
# Folder sharing between the host system and the virtual machine:
#
# ```
# -fsdev local,id=fsdev0,path=$(pwd)/shared/,security_model=mapped-file
# -device virtio-9p-pci,fsdev=fsdev0,mount_tag=host_share
# ```
#
# Allows virtual machine to access the Internet
# and port forwarding to access virtual machine via ssh:
#
# ```
# -nic user,ipv6-net=fd00::/64,hostfwd=tcp::2222-:22
# ```
Je me souviens d'avoir étudié Oils shell en octobre dernier et je me suis demandé si ce shell supporte ou non les commentaires sur des commandes multiline.
La réponse est oui : "multiline-command".
Exemple dans ce playground :
#!/usr/bin/env osh
... ls
-l
# comment 1
--all
# comment 2
--human-readable;
Chaque fois que je me plonge dans Oils, je trouve ce projet intéressant.
J'aimerais l'utiliser, mais je sais que c'est un projet de niche et qu'en contexte d'équipe, je rencontrerais sans doute des difficultés d'adoption. Je pense que je ferais face à des oppositions.
Je pense tout de même à l'utiliser dans mes projets personnels, mais j'ai peur de trop l'apprécier et d'être frustré ensuite si je ne peux pas l'utiliser en équipe 🤔.
Journal du samedi 05 juillet 2025 à 15:38
Je viens d'écouter la dernière vidéo de Monsieur Phi : Comment parler intelligemment d'intelligence ?.
Comme toujours avec Thibaut Giraud, une vidéo qui donne matière à pensée.
Ce qui m'a particulièrement intéressé, c'est d'en savoir plus au sujet de ARC-AGI et ARC-AGI-2. Benchmark que j'avais découvert en décembre 2024.
J'ai passé un peu de temps à analyser le leaderboard de ARC-AGI : https://arcprize.org/leaderboard.
Voici le sommaire de cette vidéo :
- 0:00 - Intro
- 0:50 - Sponso NordVPN
- 2:16 - Des étincelles d'intelligence générale dans GPT-4
- 6:40 - Nous sommes médiocres en tout (et c'est très fort)
- 9:21 - L'intelligence selon François Chollet
- 11:52 - Les benchmarks usuels ne testent que la mémorisation 14:51 - ARC-AGI : un test de QI pour IA
- 17:36 - Les LLM échouent lamentablement
- 20:04 - Les modèles de raisonnement font une percée
- 23:53 - Détour par d'autres benchmarks (Codeforces et Humanity's Last Exam)
- 27:29 - Des progrès en maths : FrontierMaths et AlphaEvolve
- 30:16 - Des CoT à n'en plus finir
- 32:55 - ARC-AGI-2 le retour
- 35:09 - Leaderboard actuel
- 37:55 - Conclusion + outro
Journal du vendredi 04 juillet 2025 à 16:14
En étudiant IPv6 et Linux bridge, j'ai découvert que le projet bridge-utils est déprécié. À la place, il faut utiliser iproute2.
Ce qui signifie que je ne dois plus utiliser la commande brctl
, chose que j'ignorais jusqu'à ce matin.
iproute2 remplace aussi le projet net-tools. Par exemple, les commandes suivantes sont aussi dépréciées :
ifconfig
remplacé parip addr
etip link
route
remplacé parip route
arp
remplacé parip neigh
brctl
remplacé parip link
iptunnel
remplacé parip tunnel
nameif
remplacé parip link set name
ipmaddr
remplacé parip maddr
Au-delà des aspects techniques — iproute2 utilise Netlink plutôt que ioctl — l'expérience utilisateur me semble plus cohérente.
J'ai une préférence pour une commande unique ip
accompagnée de sous-commandes plutôt que pour un ensemble de commandes disparates.
Cette logique de sous-commandes s'inscrit dans une tendance générale de l'écosystème Linux, et je pense que c'est une bonne direction.
Je pense notamment à systemctl
, timedatectl
, hostnamectl
, localectl
, loginctl
, apt
, etc.
Quand j'ai débuté sous Linux en 1999, j'ai été habitué à utiliser les commande ifup
et ifdown
qui sont en réalité des scripts bash qui appellent entre autre ifconfig
.
Ces scripts ont été abandonnés par les distributions Linux qui sont passées à systemd et NetworkManager.
En simplifiant, l'équivalent des commandes suivantes avec NetworkManager :
$ ifconfig
$ ifup eth0
$ ifdown eth0
est :
$ nmcli device status
$ nmcli connection up <nom_de_connexion>
$ nmcli connection down <nom_de_connexion>
Contrairement à mon intuition initiale, NetworkManager n'est pas un simple "wrapper" de la commande ip d'iproute2.
En fait, nmcli
fonctionne de manière totalement indépendante d'iproute2, il utilise l'interface Netlink comme l'illustre cet exemple de la commande nmcli device show
:
nmcli device show
↓ (Method call via D-Bus)
org.freedesktop.NetworkManager.Device.GetProperties()
↓ (NetworkManager traite la requête)
nl_send_simple(sock, RTM_GETLINK, ...)
↓ (Socket netlink vers kernel)
Kernel: netlink_rcv() → rtnetlink_rcv()
↓ (Retour des données)
RTM_NEWLINK response
↓ (libnl parse la réponse)
NetworkManager met à jour ses structures
↓ (Réponse D-Bus)
nmcli formate et affiche les données
Autre différence, contrairement à iproute2, les changements effectués par NetworkManager sont automatiquement persistants et il peut réagir à des événements, tel que le branchement d'un câble réseau et la présence d'un réseau WiFi connu.
Les paramètres de configuration de NetworkManager se trouvent dans les fichiers suivants :
- Fichiers de configuration globale de NetworkManager :
# Fichier principal
/etc/NetworkManager/NetworkManager.conf
# Fichiers de configuration additionnels
/etc/NetworkManager/conf.d/*.conf
- Fichiers de configuration des connexions NetworkManager :
# Configurations système (root)
/etc/NetworkManager/system-connections/
# Configurations utilisateur
~/.config/NetworkManager/user-connections/
Comme souvent, Ubuntu propose un outil "maison", nommé netplan qui propose un autre format de configuration. Mais je préfère utiliser nmcli qui est plus complet et a l'avantage d'être la solution mainstream supportée par toutes les distributions Linux.
Journal du vendredi 04 juillet 2025 à 14:46
En étudiant IPv6 et Linux bridge, j'ai découvert que Netlink a été introduit pour remplacer ioctl et procfs.
Netlink permet à des programmes user-land de communiquer avec le kernel via une API asynchrone. C'est une technologie de type inter-process communication (IPC).
La partie "Net" de "Netlink" s'explique par l'histoire : au départ, Netlink servait exclusivement à iproute2 pour la configuration réseau.
L'usage de Netlink s'est ensuite généralisé à d'autres aspects du kernel.
Journal du jeudi 03 juillet 2025 à 12:26
J'ai pu tester un endroit que m'a conseillé un collègue dans le secteur de Montparnasse : La Maison De L'indonésie.
Je pense que ce lieu est très bien pour déjeuner au calme ou même télétravailler.
Les produits semblent locaux, pour le moment, j'apprécie ma boisson au melon.
Journal du mardi 01 juillet 2025 à 12:25
#JaiDécouvert le mot et le concept d'Obeya :
J'ai participé à 2 Obeya.
Cela me donne l'impression que c'est comme un Standup Meeting géant, cross team.
Pour le moment, je ne suis pas convaincu de son efficience 🤔.
Idée d'application de réécriture de texte assistée par IA
En travaillant sur mon prompt de reformulation de paragraphes pour mon notes.sklein.xyz, j'ai réalisé que l'expérience utilisateur des chat IA ne semble pas optimale pour ce type d'activité.
Voici quelques idées #idée pour une application dédiée à cet usage :
- Utilisation de deux niveaux de prompt :
- Un niveau général sur le style personnel
- Un niveau spécifique à l'objectif particulier
- Interface à deux zones texte :
- Une zone repliée par défaut contenant le ou les prompts
- Une seconde zone pour le texte à modifier
- Sélection de mots alternatifs comme dans DeepL : une fois qu'un mot de remplacement est choisi, le reste de la phrase s'adapte automatiquement en conservant au maximum la structure originale.
- Sélection flexible : permettre de sélectionner non seulement un mot isolé, mais aussi plusieurs mots consécutifs ou des paragraphes entiers.
- Support parfait du markdown.
À ce jour, je n'ai pas croisé d'application de ce type, #JaimeraisUnJour investir plus de temps pour approfondir cette recherche.
Quelques idées pour implémenter cette application :
- Connecté à OpenRouter
- Utilisation de Svelte, SvelteKit, ProseMirror, PostgreSQL, bits-ui
- Utilisation de la fonctionnalité Structured Outputs with LLM (https://platform.openai.com/docs/guides/structured-outputs)
Journal du dimanche 29 juin 2025 à 17:08
Ma première rencontre avec Hegel et sa dialectique date probablement de 2005, quand j'ai lu "Karl Mark ou l'esprit du monde " de Jacques Attali.
Hier, je suis tombé sur une vidéo qui mentionnait encore ce concept, et je dois avouer que j'étais incapable de décrire ce qu'il représente. J'ai donc décidé de prendre du temps pour mieux le comprendre.
L'épisode Hegel - La dialectique de juin 2020 de la chaîne Le Précepteur me semble être une excellente ressource. L'audio fait 50 minutes, mais j'ai trouvé l'ensemble très accessible.
Journal du jeudi 26 juin 2025 à 12:07
J'ai appris un #NouveauMot : flagorneur qui signifie « Bassement, outrageusement flatteur. »
Le mois dernier, nous avions brièvement mentionné que OpenAI 4o était flagorneur, au point d’opiner sur des prompts relevant manifestement de l’épisode psychotique. Un utilisateur anonyme explore la même tendance à un moindre niveau Opus 4, et travaille à mesurer ça plus précisément. Il mentionne que ses résultats préliminaires montrent que les modèles plus avancés ont plus tendance à exhiber ce comportement.
Est-ce qu'une fonction Open WebUI peut importer une autre fonction Open WebUI ?
J'ai essayé de comprendre si une fonction Open WebUI pouvait importer le code d'une autre fonction Open WebUI.
La réponse est non. Je vais tenter dans cette note d'expliquer pourquoi.
(j'ai aussi publié une version de cette note en anglais dans la section "discussions" de Open WebUI)
Open WebUI propose de méthode pour créer ou mettre à jour une fonction Open WebUI sur une instance en production : via l'interface web d'administration, ou via l'API REST.
Une instance production fait référence à Open WebUI hébergé sur une Virtual machine ou un Cluster Kubernetes, par opposition à une instance locale lancée en mode développement.
Dans un premier temps, j'ai essayé d'importer dans Open WebUI les deux fichiers suivants :
# utils.py
def add(a, b):
return a + b
# hello_world.py
from pydantic import BaseModel, Field
from .utils import add
class Pipe:
class Valves(BaseModel):
pass
def __init__(self):
self.valves = self.Valves()
def pipe(self, body: dict):
print("body", body)
return f"Hello, World! {add(1, 2)}"
Le fichier hello_world.py
contient un import de utils.add
implémenté dans le premier fichier.
L'importation du premier fichier est refusée par Open WebUI parce que class Pipe:
est absent de utils.py
.
J'ai ensuite trompé Open WebUI en ajoutant une classe Pipe
fictive das le fichier utils.py
et l'importation a réussi.
Ensuite l'import de hello_world.py
a échoué parce que Open WebUI n'arrive pas a effectué l'import from .utils import add
. J'ai ensuite effectué plusieurs tentatives d'import absolut, par exemple from open_webui.utils import add
… mais sans succès.
J'ai pris un peu de temps pour étudier l'implémentation d'Open WebUI et j'ai identifié cette section de code :
module_name = f"tool_{tool_id}"
module = types.ModuleType(module_name)
sys.modules[module_name] = module
Ce code permet à Open WebUI de charger dynamiquement le code source des modules qui sont stockés dans la base de données.
Un esprit tordu pourrait en pratique importer une fonction chargé dynamiquement dans un autre module dynamique, par exemple :
from tool_utils import add
Mais cette méthode ne correspond pas à l'usage normal d'Open WebUI.
Pour implémenter des fonctions "modulaires", Open WebUI conseille d'utiliser la fonctionnalité "Pipelines" :
Welcome to Pipelines, an Open WebUI initiative. Pipelines bring modular, customizable workflows to any UI client supporting OpenAI API specs – and much more! Easily extend functionalities, integrate unique logic, and create dynamic workflows with just a few lines of code.
Pour les personnes qui souhaitent vraiment effectuer des imports dans des fonctions Open WebUI sans utiliser la fonction Pipelines, il existe tout de même une solution que j'ai implémentée dans la branche test-if-openwebui-function-support-import
.
Voici le contenu de /functions/hello_world.py
:
from pydantic import BaseModel, Field
from open_webui.shared.utils import add
class Pipe:
class Valves(BaseModel):
pass
def __init__(self):
self.valves = self.Valves()
def pipe(self, body: dict):
print("body", body)
return f"Hello, World! {add(1, 2)}"
Le contenu de /shared/utils.py
def add(a, b):
return a + b
Pour rendre accessible /shared/utils.py
dans l'instance d'Open WebUI lancé loculement, j'ai configuré de volume mounts suivante dans mon /docker-compose.yml
:
openwebui:
image: ghcr.io/open-webui/open-webui:0.6.15
restart: unless-stopped
volumes:
- ./shared/:/app/backend/open_webui/shared/
ports:
- "3000:8080"
Ensuite, si je souhaite pouvoir déployer en production cette fonction Open WebUI et le module utils.py
, il sera nécessaire de build une image Docker customisé d'Open WebUI pour y inclure le fichier /shared/utils.py
.
Cette méthode peut fonctionner, mais cela reste un "hack" non conseillé. Il est préférable d'utiliser la méthode "Pipelines".
Journal du mercredi 25 juin 2025 à 12:25
Alexandre m'a partagé le projet de keyboard layout QWERTY-Lafayette (https://qwerty-lafayette.org/).
Je ne connaissais pas ce projet, je découvre que la première version est sortie en 2010, soit 1 an après que j'ai commencé à utiliser le keyboard layout Bépo.
Je crois savoir que le projet de keyboard layout francophone "à la mode" ces dernières années est Ergo L.
J'aimerais bien migrer de Bépo à Ergo L, mais j'ai l'impression qu'à 46 ans, l'effort serait trop important pour moi. Peut-être que je m'amuserai à faire cette transition quand je serai à la retraite, c'est-à-dire vers 2044 😱.
En analysant le dépôt GitHub ErgoL, j'ai découvert qu'Ergo L semble être un fork de QWERTY-Lafayette.
J'ai découvert la méthode officielle de SvelteKit pour accéder aux variables d'environnement
Voici une nouvelle fonctionnalité qui illustre pourquoi j'apprécie l'expérience développeur (DX) de SvelteKit : la simplicité d'accès aux variables d'environnement !
Je commence avec un peu de contexte.
Comme je l'ai déjà dit dans une précédente note, je suis depuis 2015 les principes de The Twelve-Factors App.
Concrètement, quand je déploie un frontend web qui a besoin de paramètres de configuration, par exemple une URL pour accéder à une API, je déploie quelque chose qui ressemble à ceci :
# docker-compose.yml
services:
webapp:
image: ...
environment:
GRAPHQL_API: https://example.com/
De 2012 à 2022, quand ma doctrine était de produire des frontend web en SPA, j'avais recours à du boilerplate code à base de commande sed
dans un entrypoint.sh
, qui avait pour fonction d'attribuer des valeurs aux variables de configuration — comme dans cet exemple GRAPHQL_API
— au moment du lancement du container Docker, exemple : entreypoint.sh.
Ce système était peu élégant, difficile à expliquer et à maintenir.
Ce soir, j'ai découvert les fonctionnalités suivantes de SvelteKit :
J'ai publié ce playground sveltekit-environment-variable-playground
qui m'a permis de tester ces fonctionnalités dans un projet SSR avec hydration.
J'ai testé comment accéder à trois variables dans trois contextes différents (.envrc
) :
# Set at application build time
export PUBLIC_VERSION="0.1.0"
# Set at application startup time and accessible only on server side
export POSTGRESQL_URL="postgresql://myuser:mypassword123@localhost:5432/mydatabase"
# Set at application startup time and accessible on frontend side
export PUBLIC_GOATCOUNTER_ENDPOINT=https://example.com/count
Cela fonctionne parfaitement bien, c'est simple, pratique, un pur bonheur.
Pour plus de détails, je vous invite à regarder le playground et à tester par vous-même.
Merci aux développeurs de SvelteKit ❤️.
J'ai regardé ce que propose NextJS et je constate qu'il propose moins de fonctionnalités.
D'après ce que j'ai compris, NextJS propose l'équivalent de $env/dynamic/private
et $env/static/public
mais j'ai l'impression qu'il ne propose rien d'équivalent à $env/dynamic/public
.
Journal du lundi 23 juin 2025 à 13:34
#JaiDécouvert de nombreuses informations intéressantes au sujet de Cloud Nubo dans les slides Nubo - A French government sovereign cloud du FOSDEM 2025.
#JaiDécouvert la fondation OpenInfra qui gouverne, entre autres, le projet OpenStack.
#JaiDécouvert l'existance des projets : Airship, Starlingx, Zuul. Je ne les ai pas étudiés.
Journal du lundi 23 juin 2025 à 11:49
Dans la slide 18 de la conférence "Nubo: the French government sovereign cloud" du FOSDEM 2025, j'ai découvert l'article "Un logiciel libre est un produit et un projet" (https://bzg.fr/fr/logiciel-produit-projet/).
Je viens de réaliser une lecture active de cet article. Je l'ai trouvé très intéressant. Je vais garder à l'esprit cette distinction "produit / projet".
Voici quelques extraits de cet article.
La popularité de GitHub crée des attentes sur ce qu'est un logiciel « open source » (comme disent les jeunes) ou « libre » (comme disent les vrais). Il s'agit d'un dépôt de code avec une licence, une page de présentation (souvent nommée README), un endroit où remonter des problèmes (les issues), un autre où proposer corrections et évolutions (les pull requests) et, parfois, d'autres aspects : un espace de discussion, des actions lancées à chaque changement, un lien vers le site web officiel, etc.
Je trouve que ce paragraphe décrit très bien les fonctions remplies par un dépôt GitHub :
Pourquoi distinguer produit et projet ?
Cette distinction permet d'abord de décrire une tension inhérente à tout logiciel libre : d'un côté les coûts de distribution du produit sont quasi-nuls, mais de l'autre, l'énergie à dépenser pour maintenir le projet est élevée. Lorsque le nombre d'utilisateurs augmente, la valeur du produit augmente aussi, de même que la charge qui pèse sur le projet. C'est un peu comme l'amour et l'attention : le premier se multiplie facilement, mais le deuxième ne peut que se diviser.
Je partage cet avis 👍️.
C'est d'ailleurs cette tension qu'on trouve illustrée dans l'opposition entre les deux sens de fork. Dans le sens technique, forker un code source ne coûte rien. Dans le sens humain, forker un projet demande beaucoup d'effort : il faut recréer la structure porteuse, à la fois techniquement (hébergement du code, site web, etc.), juridiquement (éventuelle structure pour les droits, etc.) et humainement (attirer les utilisateurs et les contributeurs vers le projet forké.)
J'approuve 👍️.
Côté morale, il y a les principes et les valeurs. Les principes sont des règles que nous nous donnons pour les suivre ; les valeurs expriment ce qui nous tient à coeur. Les deux guident notre action.
Intéressant 🤔
Un logiciel libre est un produit qui suit un principe, celui d'octroyer aux utilisateurs les quatre libertés. Il est porté par un projet ayant des valeurs, dont voici des exemples : l'importance de ne pas utiliser des plateformes dont le code source n'est pas libre pour publier un code source libre, celle d'utiliser des outils libres pour communiquer, de produire un logiciel accessible et bien documenté, d'être à l'état de l'art technique, d'être inclusif dans les contributions recherchées, d'avoir des règles pour prendre des décisions collectivement, de contribuer à la paix dans le monde, etc.
Je trouve cela très bien exprimé 👍️.
Journal du dimanche 22 juin 2025 à 23:34
Un collègue m'a fait découvrir Vercel Chat SDK (https://github.com/vercel/ai-chatbot) :
Chat SDK is a free, open-source template built with NextJS and the AI SDK that helps you quickly build powerful chatbot applications.
#JaimeraisUnJour prendre le temps de le décliner vers SvelteKit.
Journal du dimanche 22 juin 2025 à 15:02
Je viens de découvrir les quatre premiers articles de la série "Nouvelle sur l'IA" sur LinuxFr :
- Nouvelles sur l’IA de février 2025
- Nouvelles sur l’IA de mars 2025
- Nouvelles sur l’IA d’avril 2025
- Nouvelles sur l’IA de mai 2025
L'auteur de ces articles indique en introduction :
Avertissement : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz.
Je viens d'ajouter ces deux feed à ma note "Mes sources de veille en IA".
Prise de note de lecture de : Nouvelles sur l’IA de février 2025
Je découvre la signification de l'acronyme STEM : Science, technology, engineering, and mathematics.
Une procédure standard lors de la divulgation d’un nouveau modèle (chez OpenAI en tout cas) est de présenter une "System Card", aka "à quel point notre modèle est dangereux ou inoffensif".
#JaiDécouvert le concept de System Card, concept qui semble avoir été introduit par Meta en février 2022 : « System Cards, a new resource for understanding how AI systems work » (je n'ai pas lu l'article).
#JaiDécouvert ChatGPT Deep Research.
Je retiens :
Derya Unutmaz, MD: J'ai demandé à Deep Researchh de m'aider sur deux cas de cancer plus tôt aujourd'hui. L'un était dans mon domaine d'expertise et l'autre légèrement en dehors. Les deux rapports étaient tout simplement impeccables, comme quelque chose que seul un médecin spécialiste pourrait écrire ! Il y a une raison pour laquelle j'ai dit que c'est un changement radical ! 🤯
Et
Je suis quelque peu déçu par Deep Research d'@OpenAI. @sama avait promis que c'était une avancée spectaculaire, alors j'y ai entré la plainte pour notre procès guidé par o1 contre @DCGco et d'autres, et lui ai demandé de prendre le rôle de Barry Silbert et de demander le rejet de l'affaire.
Malheureusement, bien que le modèle semble incroyablement intelligent, il a produit des arguments manifestement faibles car il a fini par utiliser des données sources de mauvaise qualité provenant de sites web médiocres. Il s'est appuyé sur des sources comme Reddit et ces articles résumés que les avocats écrivent pour générer du trafic vers leurs sites web et obtenir de nouveaux dossiers.
Les arguments pour le rejet étaient précis dans le contexte des sites web sur lesquels il s'est appuyé, mais après examen, j'ai constaté que ces sites simplifient souvent excessivement la loi et manquent des points essentiels des textes juridiques réels.
#JaiDécouvert qu'il est possible de configurer la durée de raisonnement de Clause Sonnet 3.7 :
Aujourd'hui, nous annonçons Claude Sonnet 3.7, notre modèle le plus intelligent à ce jour et le premier modèle de raisonnement hybride sur le marché. Claude 3.7 Sonnet peut produire des réponses quasi instantanées ou une réflexion approfondie, étape par étape, qui est rendue visible à l'utilisateur. Les utilisateurs de l'API ont également un contrôle précis sur la durée de réflexion accordée au modèle.
#JaiDécouvert que l'offre LLM par API de Google se nomme Vertex AI.
#JaiDécouvert que les System Prompt d'Anthropic sont publics : https://docs.anthropic.com/en/release-notes/system-prompts#feb-24th-2025
J'ai trouvé la section "Gradual Disempowerement" très intéressante. #JaimeraisUnJour prendre le temps de faire une lecture active de l'article : Gradual Disempowerment.
Je viens de consacrer 1h30 de lecture active de l'article de février 2025. Je le recommande fortement pour ceux qui s'intéressent au sujet. Merci énormément à son auteur Moonz.
Je vais publier cette note et ensuite commencer la lecture de l'article de mars 2025.
Journal du dimanche 22 juin 2025 à 12:43
Je viens de découvrir sur LMArena un nouveau LLM développé par Google : flamesong.
Pour le moment, ce thread est la seule information que j'ai trouvé à ce sujet : https://old.reddit.com/r/Bard/comments/1lg48l9/new_model_flaamesong/.
Toujours via LMArena, j'ai découvert le modèle MinMax-M1 développé par une équipe basé à Singapore.
Dans le cadre de ma mission à la DINUM, #JaiDécouvert les clouds internes dédiés aux services sensibles de l'État : π (Pi), Cloud Nubo.
Ce cloud interne se décline en deux offres :
- Nubo, opérée par la Direction générale des Finances publiques (DGFiP), adaptée à l’hébergement de données sensibles,
- π (Pi), opérée par le Ministère de l'Intérieur, adaptée à l’hébergement de données sensibles jusqu’au niveau Diffusion restreinte.
"Nubo" signifie "Nuage" en esperanto.
Cloud Nubo ne doit pas être confondu avec la coopérative Nubo qui propose, elle aussi, des offres de services "cloud".
En consultant le profil LinkedIn de Renaud Chaillat, je découvre que le projet Cloud Nubo a été lancé en 2015 et s'appuie sur une expérience de 14 ans dans ce domaine, débutée en 2001.
(source)
Ressources que j'ai trouvées intéressantes sur ce sujet :
#JaiDécouvert le référentiel SecNumCloud de l'ANSSI, qui définit les règles de sécurité que doivent respecter les Cloud providers pour obtenir le Visa de sécurité ANSSI.
Élaboré par l’Agence nationale de la sécurité des systèmes d’information (ANSSI), le référentiel SecNumCloud propose un ensemble de règles de sécurité à suivre garantissant un haut niveau d’exigence tant du point de vue technique, qu’opérationnel ou juridique.
... en conformité avec le droit européen.
Les solutions ayant passé avec succès la qualification obtiennent le Visa de sécurité ANSSI.
... L’obtention du Visa permet … de répondre aux exigences de la doctrine « cloud au centre » de l’État imposant aux administrations le recours à des solutions SecNumCloud pour l’hébergement de données qualifiées de sensibles.
Voici la documentation de ce référentiel : https://cyber.gouv.fr/sites/default/files/document/secnumcloud-referentiel-exigences-v3.2.pdf
J'ai consulté la liste des 8 prestataires SecNumCloud qualifiés. J'ai identifié Outscale, OVH (les offres OVH WMWare et OVH Bare Metal Pod), mais les 6 autres me sont totalement inconnues.
J'ai appris que le 8 janvier 2025, Scaleway a annoncé son entrée dans le processus de qualification SecNumCloud.
Voici la liste officielle des prestataires en cours de qualification.
Journal du samedi 21 juin 2025 à 13:21
Dans la page Models Overview de Mistral AI, j'ai été surpris de ne pas trouver de Mistral Large dans la liste des "Premier models" 🤔.
Tous les modèles "Large" sont dans la liste des modèles dépréciés :
Model | Deprecation on date | Retirement date | Alternative model |
---|---|---|---|
Mistral Large 24.02 | 2024/11/30 | 2025/06/16 | mistral-medium-latest |
Mistral Large 24.07 | 2024/11/30 | 2025/03/30 | mistral-medium-latest |
Mistral Large 24.11 | 2025/06/10 | 2025/11/30 | mistral-medium-latest |
Je me demande pourquoi il est remplacé par le modèle Mistral Medium 🤔.
Je découvre dans la note de release de Mistral Medium 3 :
Medium is the new large
Mistral Medium 3 delivers state-of-the-art performance at 8X lower cost with radically simplified enterprise deployments.
...
All the way from Mistral 7B, our models have consistently demonstrated performance of significantly higher-weight and more expensive models. And today, we are excited to announce Mistral Medium 3, pushing efficiency and usability of language models even further.
Je pense que Mistral Large sortie en juillet 2024 suis l'ancien paradigme « entraîner de plus gros modèle sur plus de données », alors que Mistral Medium sorti en mai 2025 suis le nouveau paradigme chain-of-thought (CoT) et que c'est pour cela que pour le moment Mistral AI ne propose plus de modèles très larges.
À titre de comparaison, j'ai lu que Mistral Large 2 avait une taille de 123 milliards de paramètres, alors que Mistral Medium 3 a une taille estimée de 50 milliards de paramètres.
Journal du samedi 21 juin 2025 à 12:45
Dans ce commentaire, #JaiDécouvert la page Models Table de LifeArchitect.ai d'Alan D. Thompson.
La page contient énormément d'information à propos des LLM !
Bien que je ne sois pas sûr de moi, pour le moment, je classe cette page dans la catégorie des leaderboard.
Journal du samedi 21 juin 2025 à 11:10
J'ai downgradé libinput de la version 1.18.1
version la version 1.17.1
(contexte : thread 1, thread 2).
Voici la méthode pour lock une version de package avec dnf version 5 :
$ sudo dnf versionlock add libinput
Ajout d'un versionlock "libinput = 1.27.1-1.fc42".
$ dnf versionlock list
# Ajouté par la commande 'versionlock add' 2025-06-21 11:22:11
Package name: libinput
evr = 1.27.1-1.fc42
Documentation officielle : Versionlock Command.
Aggregator - Backup Numeric Conversation System
Ce matin, j'ai eu l' #idée et l’envie de créer une appli d'archivage et de centralisation de toutes mes conversations numériques.
L'objectif ? Rassembler en un seul endroit, dans une interface web minimaliste, toutes mes discussions provenant de :
- ChatGPT
- Claude.ia
- Open WebUI
- Mes threads Mattermost
- Mes Mail
Le support des threads serait utile pour Mattermost et les mails. J'aimerais pouvoir sauvegarder tous ces messages au format brut original et en Markdown. Une fonction pour partager un message ou un thread serait aussi sympa.
Pour la persistance des données, je pense utiliser ElasticSearch avec son moteur vectoriel. Un LLM pourrait assigner automatiquement des tags à chaque conversation. J'aimerais que l'interface web soit minimaliste, orientée vitesse et exploration.
Pour la postérité, toutes ces données devraient être exportées en continu dans un Object Storage, sous un format YAML facilement compréhensible.
Je me demande si ce type d’application existe en Open source ou closed-source 🤔.
Journal du vendredi 20 juin 2025 à 17:28
#JaiDécouvert un autre leaderboard : Political Email Extraction Leaderboard (from).
Journal du vendredi 20 juin 2025 à 16:46
#JaiDécouvert le projet communautaire LLM-Stats.com (https://llm-stats.com/)
A comprehensive set of LLM benchmark scores and provider prices.
J'observe que LLM-Stats.com se base principalement sur le benchmark : A Graduate-Level Google-Proof Q&A Benchmark (GPQA).
En creusant le sujet, j'ai découvert cette page Wikipédia qui liste les principaux outils de LLM Benchmark : Language model benchmark.
Je pense avoir compris que le benchmark MMLU était populaire, utilisé par pratiquement tous les développeurs de LLM jusqu'en 2024, mais peu à peu remplacé par GPQA, qui est plus récent et plus compliqué.
Par exemple, GPQA est "Google-proof", ce qui signifie que les questions de GPQA sont difficiles à trouver en ligne, ce qui réduit le risque de contamination des données d'entraînement.
Journal du vendredi 20 juin 2025 à 16:37
#JaiDécouvert "Leaderboard des modèles de langage pour le français" : https://fr-gouv-coordination-ia-llm-leaderboard-fr.hf.space
C’est dans cette dynamique que la Coordination Nationale pour l’IA, le Ministère de l’Éducation nationale, Inria, le LNE et GENCI ont collaboré avec Hugging Face pour créer un leaderboard de référence dédié aux modèles de langage en français. Cet outil offre une évaluation de leurs performances, de leurs capacités et aussi de leurs limites.
Journal du vendredi 20 juin 2025 à 15:49
Il y a quelques mois, j'ai publié la note : J'ai découvert « Timeline of AI model releases in 2024 ».
Aujourd'hui, #JaiDécouvert le site The Road To AGI 2015 - 2025 (https://ai-timeline.org/).
Ce projet est Open source, voici son repository : jam3scampbell/ai-timeline
.
Il me permet d'avoir une d'ensemble des publications des 6 premiers mois de l'année 2025 :
Bien que la réalisation de ce site soit techniquement réussie, après utilisation, je trouve qu'une simple liste Wikipedia répond mieux à mes besoins : https://en.wikipedia.org/wiki/List_of_large_language_models
Journal du jeudi 19 juin 2025 à 12:25
J'ai découvert la semaine dernière, le concept de "Brouillard de la guerre" de Carl von Clausewitz. Depuis, je n'arrive plus à quitter ce concept de mon esprit.
Je vois dans ce concept énormément de points communs avec ce qu'il se passe dans les organisations de travail.
Je pense qu'à l'avenir je vais utiliser les termes "brouillard organisationnel" ou "brouillard corporate" pour décrire ces concepts.
Voici quelques éléments qui caractérisent de "Brouillard organisationnel" :
- L'opacité informationnelle - Les informations cruciales circulent de manière fragmentée, déformée ou retardée entre les différents niveaux hiérarchiques et départements.
- L'ambiguïté stratégique - Les objectifs réels de l'organisation, les priorités changeantes et les non-dits politiques créent une vision floue de la direction à prendre.
- La complexité relationnelle - Les jeux de pouvoir, les alliances informelles et les agendas cachés rendent difficile la compréhension des véritables enjeux et motivations.
- L'incertitude décisionnelle - Les processus de prise de décision opaques, les responsabilités diluées et les changements fréquents de cap génèrent confusion et stress.
Autres réflexions qui me viennent à l'esprit.
Pour les concepts de "brouillard de la guerre" et de "brouillard organisationnel", je vois des liens avec :
- avec les concepts décrients dans le livre Systemantics.
- le féodalisme managérial de David Graeber
Je me suis aidé de Claude Sonnet 4 pour la rédaction de cette note.
Journal du mercredi 18 juin 2025 à 17:23
Je viens de créer : Projet 31 - "Réaliser un POC d'une integration ProConnect dans un projet SvelteKit".
Journal du mercredi 18 juin 2025 à 08:34
Actuellement, un freelance qui fait plus de 34 000 € de chiffre d'affaires annuel est assujetti à la TVA (note en lien) et doit donc ajouter 20% de TVA à toutes ses factures.
Généralement, le montant de la TVA facturé par le freelance est transparent pour son client. Ce montant entre dans la catégorie de la TVA "déductible".
Si l'entreprise cliente du freelance est au régime réel normal de TVA, alors elle peut soustraire du montant de TVA encaissé auprès de ses propres clients (TVA collectée), la TVA qu'elle a payée sur ses achats professionnels (TVA déductible) — dont les factures freelances — pendant cette même période. Cela permet de ne verser à l'État que la différence entre ces deux montants.
Exemple : en janvier 2025, le client a collecté 20 000 € de TVA, le même mois, le client a payé une facture de prestation freelance de 1000 €, dont 200 € de TVA, le client devra verser 19 800 € (20 000 - 200 = 19 800) de TVA aux impôts.
Mi-avril 2025, j'ai pris conscience que la TVA n'était pas "transparente" pour tous les types de clients.
Les associations ou la plupart des structures étatiques ne collectent pas de TVA. En conséquence, si je propose des prestations freelances à une association ou à beta.gouv.fr, la TVA représente un surcoût direct de 20% supplémentaire par rapport à une personne employée.
Ensuite, j'ai pensé que la TVA représente aussi un surcoût par rapport à des salariés pour les entreprises de type "startup", qui dépensent beaucoup d'argent alors qu'elles n'ont pas ou peu de revenu et donc peu de TVA collectée.
Mais j'étais dans l'erreur, car j'ai découvert qu'une entreprise peut bénéficier d'un crédit de TVA qu'elle pourra déduire à l'avenir, quand elle pourra collecter de la TVA et même dans certains cas se la faire rembourser.
Toutefois, même avec un crédit de TVA, je pense que les 20% de surcoût de TVA des freelances peuvent avoir un impact sur la trésorerie de l'entreprise.
Je ne suis pas du tout expert dans ce domaine, si vous rencontrez des erreurs dans mon analyse, n'hésitez pas à m'en informer en m'écrivant à «contact@stephane-klein.info>.
J'ai lu le très bon billet d'Athoune sur Kloset, moteur de stockage de backup de Plakar
Il y a un an, Alexandre m'avait fait découvrir Kopia : Je découvre Kopia, une alternative à Restic.
Ma conclusion était :
Ma doctrine pour le moment : je vais rester sur restic.
En septembre 2024, j'ai découvert rustic, un clone de restic recodé en Rust. Pour le moment, je n'ai aucun avis sur rustic.
Il y a quelques semaines, Athoune m'a fait découvrir Plakar, mais je n'avais pas encore pris le temps d'étudier ce que cet outil de backup apportait de plus que restic que j'ai l'habitude d'utiliser.
Depuis, Athoune a eu la bonne idée d'écrire un article très détaillé sur Plakar, enfin, surtout son moteur de stockage avant-gardiste nommé Kloset : "Kloset sur la table de dissection" (au minimum 30 minutes de lecture).
Ce que je retiens, c'est que Kloset propose un système de déduplication plus performant que par exemple celui de restic qui est basé sur Rabin Fingerprints :
For creating a backup, restic scans the source directory for all files, sub-directories and other entries. The data from each file is split into variable length Blobs cut at offsets defined by a sliding window of 64 bytes. The implementation uses Rabin Fingerprints for implementing this Content Defined Chunking (CDC). An irreducible polynomial is selected at random and saved in the file config when a repository is initialized, so that watermark attacks are much harder.
Files smaller than 512 KiB are not split, Blobs are of 512 KiB to 8 MiB in size. The implementation aims for 1 MiB Blob size on average.
For modified files, only modified Blobs have to be saved in a subsequent backup. This even works if bytes are inserted or removed at arbitrary positions within the file.
Au moment où j'écris ces lignes, je n'ai aucune idée des différences ou des points communs entre l'algorithme Rolling hash dont parle l'article et Rabin Fingerprints qu'utilise restic.
Chose suprernante, je trouve très peu de citations de Plakar ou kloset sur Hacker News ou Lobster :
- Recherche avec "Plakar"
- Hacker News
- dans les stories
- Mars 2021 : March 2021: backups with Plakar – poolp.org : 0 commentaire
- Octobre 2024 : Open source distributed, versioned backups with encryption and deduplication : 0 commentaires
- Mars 2025 : CDC Attack Mitigation in Plakar : 0 commentaires
- dans les commentaires
- dans les stories
- Lobsters => rien
- Hacker News
- Recherche avec "Kloset"
- Hacker News :
- Lobsters => rien
Je tiens à remercier Athoune pour l'écriture, qui m'a permis de découvrir de nombreuses choses 🤗.
Journal du dimanche 15 juin 2025 à 11:02
En étudiant l'article Wikipedia "Base de données vectorielle", je découvre la liste de différents algorithmes Approximate Nearest Neighbor.
#JaiDécouvert feature extraction algorithms.
These feature vectors may be computed from the raw data using machine learning methods such as feature extraction algorithms, word embeddings or deep learning networks. The goal is that semantically similar data items receive feature vectors close to each other.
J'apprends :
Je lis :
Databases that use HNSW as search index include:
En interrogeant Claude Sonnet 4, j'apprends :
Benchmark indicatif (1M vecteurs 768D) :
Métrique Qdrant pgvector Elasticsearch Temps indexation 15 min 45 min 25 min Requête/sec 2000+ 500-800 800-1200 RAM utilisée 4 GB 6 GB 8 GB+ Précision @10 0.95 0.92 0.94 Date création 2021 2021 2022 (support HNSW) Langage Rust C Java Open Source Open Source Open Source
Journal du dimanche 15 juin 2025 à 09:43
Par sérendipité, je suis tombé sur la palette Wikipedia nommée "Apprentissage automatique et exploration de données".
Je pense que cette liste d'articles est une bonne porte d'entrée d'exploration de ces sujets. Elle me permet d'avoir une vue d'ensemble du domaine.
Quand j'aborde un nouveau domaine, j'aime recevoir ce type de présentation. C'est par exemple pour cela que j'aime beaucoup les "Developer Roadmaps" (https://roadmap.sh/).
Journal du samedi 14 juin 2025 à 00:06
#JaiDécouvert OmniPoly (https://github.com/kWeglinski/OmniPoly)
Welcome to a solution for translation and language enhancement tool. This project integrates LibreTranslate for accurate translations, LanguageTool for grammar and style checks, and AI Translation for modern touch of sentiment analysis and interesting sentences extraction.
Je souhaite intégrer cet outil au dépôt sklein-open-webui-instance
.
Comme ce projet ne sera plus exclusivement dédié à Open WebUI, il me semble qu'un changement de nom s'impose.
Journal du vendredi 13 juin 2025 à 22:32
Dans cette fonction filtre Open WebUI, #JaiDécouvert Detoxify (https://github.com/unitaryai/detoxify).
Trained models & code to predict toxic comments on 3 Jigsaw challenges: Toxic comment classification, Unintended Bias in Toxic comments, Multilingual toxic comment classification.
#JaimeraisUnJour prendre le temps de le tester.
Journal du vendredi 13 juin 2025 à 14:37
Je viens de découvrir la fonction inspect.cleandoc
de la librairie standard de Python.
Exemple :
# foobar.py
from inspect import cleandoc
def foobar(body):
print(body)
foobar(
body=cleandoc("""
My text, with indentation
- item 1
- item 1.1
- item 2
Last line
""")
)
$ python foobar.py
My text, with indentation
- item 1
- item 1.1
- item 2
Last line
Je trouve cela très pratique pour améliorer la lisibilité du code source sans générer des indentations qui ne devraient pas être présentes dans les données.
Voir aussi, string-dedent
, l'équivalent en Javascript : 2025-08-14_1120.
Journal du jeudi 12 juin 2025 à 23:56
La semaine dernière, j'ai fait des étapes de randonnée entre 15 et 21 km par jours.
Mon record de distance en randonnée, date du 11 avril 2024, 33 km avec 1075m de dénivelé positif cumulé, en 9h, soit 3,6 km/h de moyenne.
En ce moment, je m'intéresse au concept de brouillard de la guerre de Carl von Clausewitz et dans l'émission Radio France "Épisode 3/4 : Clausewitz a-t-il inventé la guerre absolue ?" j'ai appris (à partir de 17min) :
- Le régime de mobilité (capacité de déplacement quotidienne d'une armée) pendant la guerre de Sept Ans, 1756-1763 était de 25 km par jour
- Le régime de mobilité des armées napoléoniennes pouvait être de 40 km par jour !
40 km par jour avec l'équipement — chaussure, etc — du 19ᵉ siècle, je trouve cela énorme !
Un ami m'a partagé : La vitesse de César et de ses troupes durant les campagnes militaires en Occident
Journal du jeudi 12 juin 2025 à 21:38
Je me pose souvent des questions sur l'histoire des notations mathématiques. Quelle est l'origine d'une notation, pourquoi avoir fait ce choix, etc.
Comprendre comment une notation a émergé m'aide à la retenir.
Au cours de mes recherches par sérendipité sur ce sujet, #JaiDécouvert Florian Cajori :
Florian Cajori est un historien des mathématiques, véritable fondateur de cette discipline aux États-Unis, et auteur dans ce domaine d'ouvrages qui ont fait date.
Il a, entre autres, écrit le livre : "A History of Mathematical Notations".
Je suis ensuite tombé sur cette excellente page Wikipedia nommée "Table de symboles mathématiques", (et surtout sa version anglaise) que j'aurais adoré avoir quand je faisais mes études.
Autres ressources que j'ai croisées :
Alexandre m'a partagé le projet LocalAI (https://localai.io/).
Ce projet a été mentionné une fois sur Lobster dans un article intitulé Everything I’ve learned so far about running local LLMs, et quatre fois sur Hacker News (recherche pour "localai.io"), mais avec très peu de commentaires.
C’est sans doute pourquoi je n'ai jamais remarqué ce projet auparavant.
Pourtant, il ne s’agit pas d’un projet récent : son développement a débuté en mars 2023.
J'ai l'impression que LocalAI propose à la fois des interfaces web comme Open WebUI, mais qu'il est aussi une sorte de "wrapper" au-dessus de nombreux Inference Engines comme l'illustre cette longue liste.
Pour le moment, j'ai vraiment des difficultés à comprendre son positionnement dans l'écosystème.
LocalAI versus vLLM ou Ollama ? LocalAI versus Open WebUI ?, etc.
Je vais garder ce projet dans mon radar.