API Prompt de Chrome
(developer.chrome.com)- API native du navigateur permettant d’envoyer des requêtes en langage naturel au modèle Gemini Nano intégré à Chrome, avec inférence IA on-device sans aller-retour vers le serveur
- Permet de nombreux cas d’usage : recherche assistée par IA, flux personnalisés via classification des actualités, filtrage de contenu, création d’événements de calendrier, extraction de contacts, etc.
- Possibilité de choisir entre
prompt()pour une réponse en une fois oupromptStreaming()pour une réponse en streaming basée surReadableStream - Fournit des fonctions de contrôle de session fines : gestion du contexte par session, réponses en streaming, clonage de session, etc.
- Comme l’inférence IA se fait dans le navigateur sans aller-retour serveur, cela favorise la protection de la vie privée et la réduction de la latence
- Fonction multimodale intégrée prenant en charge non seulement le texte, mais aussi les entrées image et audio
- Audio :
AudioBuffer,ArrayBuffer,Blob, etc. - Image :
HTMLImageElement,HTMLCanvasElement,VideoFrame,Blob, etc.
- Audio :
- Il est possible de transmettre un schéma JSON dans le champ
responseConstraintafin de contraindre le format de sortie du modèle à unboolean, à une structure JSON précise, etc. initialPromptspermet d’injecter un prompt système et le contexte d’une conversation précédente, etappend()autorise aussi l’envoi préalable de contexte supplémentaire après la création de la session- En ajoutant
prefix: trueà un messageassistantfinal, on peut orienter le modèle pour qu’il commence sa réponse dans un format spécifique - Prise en charge de la gestion de la fenêtre de contexte par session : vérification de l’usage des tokens via
contextUsage/contextWindow, suppression automatique des premiers échanges en cas de dépassement (le prompt système est conservé) clone()permet de bifurquer une session,destroy()de libérer les ressources, etAbortSignald’annuler une session ou un prompt en coursexpectedInputs/expectedOutputspermettent de définir les formats d’entrée/sortie et la langue (en,ja,espris en charge actuellement)- Exigences matérielles : Windows 10+/macOS 13+/Linux/ChromeOS, au moins 22 Go d’espace de stockage, plus de 4 Go de VRAM GPU ou au moins 16 Go de RAM CPU + 4 cœurs minimum
- Pour les iframes cross-origin, l’accès peut être délégué via l’attribut
allow="language-model", et les web workers ne sont pas encore pris en charge - Disponible via Origin Trial à partir de Chrome 138
1 commentaires
Avis sur Hacker News
Cette API semble parfaitement correspondre à une idée de de-snarkifier à laquelle je réfléchis depuis longtemps
Les réseaux sociaux peuvent être intellectuellement stimulants et instructifs, mais il est facile de se laisser entraîner, même sans le vouloir, dans des joutes idéologiques et des flamewars. Se battre en ligne avec des inconnus au prix d’une dépense émotionnelle ressemble presque à un gaspillage de capital humain
Avec une API comme celle-ci, on pourrait imaginer une extension de navigateur qui adoucit uniquement les formulations agressives ou sarcastiques avant d’afficher un texte, tout en préservant les informations factuelles. On pourrait même aller plus loin et faire en sorte qu’un ton agressif paraisse plus ridicule ou incompétent
Ainsi, les lecteurs seraient protégés des attaques personnelles d’inconnus, et les auteurs n’auraient plus intérêt à être impolis. Si tout le monde utilisait ce genre de filtre, il n’y aurait plus de raison de rivaliser pour savoir qui peut être le plus odieux
Il y a toute la valeur nutritive, mais sans saveur particulière
Ce que je veux, c’est supprimer tous les titres putaclic et les pubs, et n’afficher que des titres factuels et austères
Pour n’importe quel sujet, un article principal et quelques commentaires utiles me suffisent, et je ne veux généralement pas voir le reste du bruit
L’état actuel des réseaux sociaux est tellement mauvais que je ne les utilise presque plus, à part HN, mais même ici cela semble évoluer dans la même direction avec la saturation par l’IA. Malgré tout, je finis encore par y perdre quelques heures une semaine sur deux, et j’aimerais m’en débarrasser complètement
Dans l’idéal, j’aimerais que 98 % du contenu soit filtré ou résumé jusqu’à disparaître, et qu’avec le temps Internet ne serve plus qu’aux recherches intentionnelles. En gros, je veux retirer la majeure partie de la dimension divertissante d’Internet pour réallouer mon temps et mon énergie au monde réel et à des sources de meilleure qualité comme les livres
Cette extension est un outil de réduction du sensationnalisme basé sur le crowdsourcing, même si je me demande si certains des principaux contributeurs ne sont pas des bots LLM
Mais ce genre de chose devient imprévisible au contact du réel, et même si cela fonctionne bien, il y a de fortes chances que cela opère d’une manière assez différente de ce qu’on imaginait au départ
Je n’ai pas pu résister et j’ai bricolé à la hâte un prototype Snarknada pour examiner à la fois les schémas à faible latence et ce qu’on pouvait espérer en matière de précision
C’est exactement pour ce type de cas d’usage que je pense que l’on-device est la bonne approche. Si on voulait adoucir un flux infini entier via une API cloud, le coût en tokens deviendrait ingérable pour les développeurs. Et il est tout à fait normal que les gens n’aient pas envie d’envoyer leur feed personnel ou leurs DM à un serveur tiers juste pour en lisser le ton
En déplaçant cela dans l’appareil, une Semantic Mutation à haute fréquence pourrait devenir réaliste pour la première fois, en termes de coûts comme de technique. Si quelqu’un développe quelque chose de plus sérieux que mon prototype PM un peu gadget et rencontre des points de friction concrets, j’aimerais vraiment en entendre parler. Cela aiderait à prioriser la roadmap
[1]: Si vous utilisez un agent de code (Cursor, Claude Code, etc.), je recommande de lui pointer https://www.npmjs.com/package/built-in-ai-skills-md-agent-md. Beaucoup de modèles ont été entraînés sur l’espace de noms
window.ai, désormais obsolète, et ce fichier de skills aide à utiliser correctement l’API actuelleJ’ai dirigé le travail de conception de cette API, et avant de partir à la retraite j’ai aussi écrit un billet récapitulant les considérations de conception associées
https://domenic.me/builtin-ai-api-design/
Je me demande aussi si, au moment de construire ce genre de chose, les navigateurs essaient au moins de se coordonner de manière pragmatique entre eux, même hors du cadre W3C. Après tout, ce secteur reste assez petit
Cela fonctionne réellement, et je l’ai déjà déployé pour du local inference
Pour des tâches LLM modestes comme la recherche, cela pouvait servir d’ollama du pauvre. Le plus gros avantage, c’est que c’est gratuit, respectueux de la vie privée, et que l’utilisateur n’a presque rien à faire, ce qui en fait un bon moyen d’apporter l’inférence locale à des utilisateurs non techniques
En revanche, l’expérience réelle n’est pas bonne. Le téléchargement du modèle est de plusieurs ordres de grandeur plus volumineux que le navigateur lui-même, et tout cela doit être terminé avant de recevoir le premier token
Cela semble difficile à résoudre tant que le système d’exploitation ne fournira pas de manière fiable des modèles préintégrés, auxquels ce type d’API pourra se connecter
Le plus gros problème, c’est que sur la plupart des PC grand public, le modèle est trop petit et trop lent. J’ai essayé de transformer en temps réel le texte d’une aventure textuelle Infocom, et aujourd’hui c’est trop lent sur beaucoup de machines pour être vraiment pratique
Un peu comme bittorrent récupère des morceaux de fichier depuis plusieurs hôtes. Il faudrait toujours télécharger les couches communes, mais le temps jusqu’au premier token pourrait alors être proportionnel à la taille active plutôt qu’à la taille totale
Bien sûr, ce ne serait plus de l’inférence totalement hors ligne, mais pour une fonctionnalité web dans le navigateur, ce n’est peut-être pas un critère central
Mais si le modèle est bien plus gros que le navigateur et qu’il faut le télécharger avant le premier token, je me demande si cela signifie qu’il est téléchargé à la demande. Si les premiers utilisateurs doivent attendre la fin de ce téléchargement au moment du premier appel, l’expérience utilisateur semble assez terrible
Je me demande aussi si Chrome affiche quelque chose comme une boîte de dialogue d’état du téléchargement pour limiter la confusion, et quelle quantité d’espace disque cela occupe
À première vue, cela semble utiliser Gemini Nano, mais les récents Gemma 4 E2B/E4B paraissent bien meilleurs, donc à court terme il serait peut-être préférable de distribuer une version quantifiée via une extension
Sources :
Si Gemma 4 ou son équivalent Gemini Nano n’est pas encore dans Chrome, je m’attendrais à ce qu’il y arrive bientôt
Et cet article a été mis à jour pour la dernière fois le 2025-09-21, et à ce moment-là on en était déjà à Gemini Nano 3
Il est écrit que la Prompt API envoie des requêtes en langage naturel à Gemini Nano dans le navigateur
Dans Edge, ce sera probablement Phi4
À première vue, cela semble aussi être un bon moyen pour des scripts JS malveillants de faire générer des tokens à des visiteurs qui n’y comprennent rien
Il serait intéressant de voir s’il est possible de répartir un grand prompt entre plusieurs navigateurs, chacun ne traitant qu’un petit fragment, afin de produire un résultat utile sous la forme d’un pattern de subagent ou d’une structure proche d’un RLM
L’infrastructure technique et commerciale deviendrait extrêmement complexe, et si l’objectif est vraiment de déporter les prompts vers les navigateurs des utilisateurs, autant utiliser correctement la Chrome API. Je doute même qu’il y ait beaucoup de cas réellement utiles où décharger des prompts côté serveur vers des modèles aussi modestes aurait un impact significatif
Et si c’est vraiment ce qu’on veut faire, WebGPU existe déjà depuis longtemps
Cela ressemble à un pas vers une véritable Model API, mais ce n’est encore qu’un petit pas
Cela fait aussi penser aux Foundation Models d’Apple
Beaucoup d’intégrations IA se concentrent sur la communication textuelle ou les styles de chat, alors qu’en réalité de nombreux logiciels pourraient bénéficier d’interfaces non textuelles
À terme, je pense que l’OS et le navigateur devraient fournir une API de gestion des modèles, afin que les applications puissent accéder à des modèles on-device et distants via une interface simple
Ce serait formidable si cela pouvait être standardisé en cross-platform, et comme cela devrait aussi inclure le mobile, ceux qui sont le mieux placés pour pousser cela dans la réalité sont probablement surtout Apple et Google. Meta pourrait suivre, ou au contraire bouger en premier
Le point essentiel, c’est que cela ne doit pas être réservé à un modèle promotionnel spécifique
Les applications doivent pouvoir interroger le système et choisir un modèle approprié
(1) https://developer.apple.com/documentation/foundationmodels
Bon, cela dit, on n’en est encore qu’au début
https://github.com/mozilla/standards-positions/issues/1067
Nous utilisons cela pour un résumé rétrospectif de hackday
https://remotehack.space/previous-hacks/
C’est un petit script qui lit un flux RSS et génère un résumé à partir du corps de texte, et cela fonctionne plutôt bien avec un site statique. J’aimerais un jour l’étendre pour poser d’autres questions sur le même contenu
Un LLM local accessible depuis le navigateur est intéressant du point de vue de la vie privée, mais si chaque navigateur met un modèle différent derrière cette API, le cauchemar des tests risque d’être encore pire qu’aujourd’hui
Comme la plupart des implémentations risquent de s’aligner sur Gemini Nano, je me demande aussi si cela ne va pas pousser encore davantage les utilisateurs vers Chrome
En pratique, les prompts ne sont pas agnostiques vis-à-vis des modèles, donc un prompt soigneusement optimisé pour Gemini Nano 3 v2025 peut discrètement perdre en qualité sur le modèle de Gecko. Or l’API ne fournit même pas de détection de capacités pour gérer ce genre de branchement
C’est pire que WebGL, où l’on pouvait au moins interroger la prise en charge des extensions. Livrer une fonctionnalité dépendant de la qualité des prompts d’un modèle caché derrière le navigateur, sans même connaître son nom ou sa version, revient presque à publier un logiciel dont le comportement dépend du dictionnaire que l’utilisateur a installé
Il me semble que Gemini Nano, contrairement à Gemma, n’a pas de poids open weight
À moins que quelqu’un l’ait déjà fait, j’aimerais bien essayer de dumper les poids du modèle