Aller au contenu

Benchmark de l’agent

SWE-bench Verified est un jeu public de 500 vraies issues GitHub tirées de 12 projets Python open source, chacune jugée par les tests du projet. Nous les avons toutes confiées, une fois chacune, à l’agent de myide, et laissé le harnais officiel de SWE-bench juger le résultat — sans tirage cette fois. Passage du 14 octobre 2026, 06:31 UTC au 15 octobre 2026, 14:53 UTC.

SWE-bench Verified : les 500 tâches

Version mesurée : le moteur d’agent du 14 octobre 2026 (dernière release « 20261014-preuves »), figé au départ et identique pour les 500 tâches. Les releases du 15 octobre 2026, en service sur myide.tech depuis — réponses coupées réparées, missions dans le cloud qui reprennent au lieu de s’arrêter — n’ont pas été mesurées ici.

Tâches résolues (harnais officiel)
346/50069,2 %
Intervalle de confiance à 95 %
65,0 % – 73,1 %
Durée médiane de l’agent par tâche
66 s
Coût du modèle par tâche (moyenne, borne haute)
$0.130

49 missions sur 500 se sont terminées inachevées, et 43 tâches touchées par la panne de DeepSeek du 15 octobre n’ont eu aucun essai de l’agent : elles ont été rejouées selon une règle écrite à l’avance. Méthode, incidents, résultats par dépôt et par difficulté, les 500 tâches une à une et l’échantillon du 13 octobre sont sur une page dédiée.

Coût selon le résultat

Calculs tirés des 500 tentatives déjà publiées, sans modifier leurs verdicts. Coûts fournisseur estimés, pas des prix de crédits ni une facture client.

GroupeNombreCoût moyen du modèle
Tentatives résolues346$0.0799
Tentatives non résolues154$0.2417
Missions inachevées (recoupent les deux groupes)49$0.3191

Dépense totale du banc divisée par le nombre de tâches résolues (échecs inclus dans la dépense) : $0.1875.

Campagne : swe-bench-verified-20261014-20261015. Les 500 résultats et leurs calculs (JSON).

Tous les résultats SWE-bench Verified →

Défauts connus

myide est un produit jeune. Voici les défauts trouvés en le mesurant et en examinant de vraies missions, avec ce que chacun est devenu.

  • Une étape ratée pouvait annuler toutes les modifications d’une mission · Corrigé

    Quand un outil échouait et que l’agent ne le dépassait pas (écriture hors du projet, chemin protégé, modification qui ne correspondait plus), la mission finissait en erreur et myide annulait toutes ses écritures. 3 des 50 tâches SWE-bench ont fini sans aucune modification pour cette raison, dont une où l’agent avait déjà modifié le bon fichier. Corrigé le 14 octobre 2026 : un chemin refusé ne bloque plus la mission, et les fichiers justes sont gardés ; seul un fichier laissé cassé est encore rétabli. Mesuré sur les 500 tâches : aucune mission n’a fini en erreur sur un chemin refusé ; 2 sur 500 ont fini en erreur — l’une coupée par un délai dépassé chez le fournisseur du modèle, l’autre arrêtée par le contrôle des imports décrit plus bas.

  • Le contrôle de syntaxe disait « en attente » des fichiers déjà écrits · Corrigé

    Après l’écriture d’un fichier, l’outil de contrôle disait encore qu’il « n’est pas encore sur le disque » : 214 contrôles de ce type sur 218 le 13 octobre 2026, un message trompeur sur lequel l’agent pouvait se fonder. Corrigé le 14 octobre 2026 : il ne le dit plus que si la version contrôlée n’est vraiment pas sur le disque. Sur les 500 tâches, le message apparaît 28 fois, dans 10 missions, dans les journaux conservés (les 300 derniers évènements de chaque mission), contre 218 fois dans les 50 missions du 13 octobre ; nous n’avons pas vérifié chacune des 28.

  • Des preuves justes lues comme absentes · Corrigé

    myide ne dit un résultat vérifié que si l’agent cite un fait exact d’un contrôle qu’il a lancé. Le premier passage complet des 500 tâches SWE-bench, lancé le 14 octobre 2026, a été arrêté après 23 tâches : 13 missions étaient marquées inachevées alors que la plupart des faits cités figuraient dans les sorties. Le contrôle ne lisait pas deux faits dans une même citation (« Ran 75 tests » et « OK ») ni un fait abrégé, et la réponse donnée après le rappel perdait souvent le résumé du travail. Corrigé le 14 octobre 2026 : sur ces 23 missions, 78 faits cités sur 84 sont désormais reconnus au lieu de 60, et le résumé est gardé. Le passage arrêté n’est pas compté ; les 500 tâches sont reparties de zéro. Sur ces 500 tâches, 24 missions ont encore conclu par un résumé avec au moins un point que l’agent n’a pas su prouver, et comptent comme inachevées ; 14 d’entre elles ont résolu la tâche.

  • Des missions qui s’arrêtent sans conclure · Toujours ouvert

    23 des 50 missions SWE-bench se sont arrêtées sans conclure : 9 après plusieurs tours sans progrès, souvent en 2 à 4 minutes sur leurs 30, dont 6 non résolues. Leurs modifications ont été gardées et jugées ; dans myide, il faut répondre « continue ». Depuis le 14 octobre 2026, l’agent est prévenu une fois et invité à changer d’approche avant l’arrêt. Mesuré sur les 500 tâches avec ce moteur : 49 missions sur 500 se sont terminées inachevées, dont 5 après des tours sans progrès ; sur les 50 mêmes tâches que le 13 octobre, 7 au lieu de 23. Sur les 49, 25 se sont arrêtées avant de conclure (réponses coupées plusieurs fois de suite 6, limite de tours 6, aucun progrès 5, vérification visuelle demandée non faite 4, limite de 30 minutes 3, erreurs restantes 1) et 24 ont conclu avec un point qu’elles n’ont pas su prouver ; 21 ont résolu la tâche malgré tout. Depuis le 15 octobre 2026, une mission dans le cloud reprend d’elle-même au lieu de s’arrêter, sauf blocage réel, garde-fou de coût ou crédits épuisés ; pas encore mesuré sur SWE-bench.

  • Le contrôle des imports ne voit pas les modules compilés · Toujours ouvert

    Avant qu’une mission conclue, myide vérifie que chaque import d’un fichier Python modifié pointe vers un module du projet. Un module qui n’existe que compilé (Cython, comme sklearn.utils.sparsefuncs_fast) ou qui est créé à l’import (six.moves) est déclaré introuvable : 43 fois dans 6 des 500 missions SWE-bench. Dans scikit-learn-9288, la mission a fini en erreur et ses modifications n’ont jamais été appliquées, alors que Python importait le fichier sans erreur ; les 5 autres missions l’ont dépassé et ont résolu leur tâche. Pas encore corrigé.

  • Des demandes de modification traitées en lecture seule · Corrigé

    Le 13 octobre 2026, sur un projet de carte 3D d’un utilisateur, « aide-moi à coder… », un signalement de bogue (« quand je clique sur play rien n’est animé ») et cinq « Continue » de suite sont partis en mode question, en lecture seule : l’agent ne pouvait que décrire le problème. Corrigé le 14 octobre 2026 : ces demandes atteignent désormais l’agent, et « continue » sous un bandeau « Reprendre » reprend la mission.

  • Des missions figées par un très gros fichier · Corrigé

    La lecture d’un fichier JSON de 23 Mo écrit sur une seule ligne rendait la ligne entière ; le journal de mission débordait et quatre missions sont restées « en cours » sans réponse. Corrigé le 14 octobre 2026 : une telle ligne est coupée, et l’agent apprend comment l’explorer.

  • Pas de vérification visuelle sur les pages 3D lourdes · Toujours ouvert

    Sur la même carte 3D, l’outil de capture a expiré ou perdu la page à chaque essai : l’agent a fini sans jamais voir son résultat — des arbres dessinés à 3 km de haut cachaient toute la ville, et la carte était en miroir.

  • Une exigence affirmée sans être vérifiée · Toujours ouvert

    La consigne excluait le bois de Boulogne et le bois de Vincennes ; l’agent a écrit dans son code que le découpage par arrondissement les retirait. Faux : les deux bois font partie d’arrondissements, et 688 de leurs bâtiments restaient sur la carte.

Tâches courantes : 12 octobre 2026, 8 tâches × 3 passages

Huit tâches comme on en confie à un agent de code — une page d’accueil avec formulaire de rendez-vous, un panier avec trois bogues signalés, deux fonctions dans une application de tâches, une application React + Vite avec tests, une API Node.js, un module Python, un bogue d’arrondi d’un centime, une classe Python — chacune jouée trois fois, puis jugée par nos propres vérificateurs, validés au préalable sur des solutions de référence. Les demandes étaient rédigées en français.

Passages réussis au contrôle indépendant
21/24
Même contrôle, série du matin avant le correctif
18/24
Durée médiane par passage
47 s
Coût moyen du modèle par passage
$0.043
Tâches courantes : 12 octobre 2026, 8 tâches × 3 passages
TâcheAvant le correctifAprès le correctif : durée par passageCoût du modèle (moyenne)Contrôle indépendant
Page d’accueil avec formulaire de rendez-vous validé0/380 s · 148 s · 74 s$0.0893/3
Page de panier avec trois bogues signalés3/382 s · 58 s · 60 s$0.0343/3
Deux fonctions dans une application de tâches existante2/366 s · 75 s · 74 s$0.0422/3
Application React + Vite + TypeScript de contacts, avec tests3/3476 s · 148 s · 75 s$0.0863/3
API Node.js de livres3/324 s · 32 s · 36 s$0.0283/3
Module Python slugify avec longueur maximale1/316 s · 19 s · 20 s$0.0161/3
Bogue d’arrondi de TVA d’un centime (ticket n° 142)3/328 s · 13 s · 15 s$0.0253/3
Historique et annulation dans une classe Python d’inventaire3/316 s · 20 s · 21 s$0.0223/3

Page d’accueil avec formulaire de rendez-vous validé — Le matin, à la demande de travailler « dans ce dossier vide », l’agent écrivait les trois fichiers dans un nouveau sous-dossier nommé « vide », 3 passages sur 3. La page d’accueil a ensuite été jouée 9 fois l’après-midi, à travers deux releases : 8 réussis — fichiers à la racine, mais 5 passages laissaient aussi un vide/index.html en trop — et 1 échec : ses réponses ont été coupées plusieurs fois de suite et ses modifications n’ont jamais été écrites sur le disque. Le tableau montre les 3 derniers passages (tous propres). Les trois finissent pourtant par « Non vérifié » sur des points que notre contrôle confirme — deux fois sur « 3 fichiers créés », les trois fichiers étant là.

Deux fonctions dans une application de tâches existante — Le passage 3 a échoué : le compteur affichait « 0 tâches restantes » là où la demande exigeait exactement « 0 tâche restante », et la liste vidée n’était pas enregistrée — l’agent avait pourtant déclaré la tâche vérifiée. Une erreur de raisonnement du modèle ; le même échec s’était produit une fois dans la série du matin.

Module Python slugify avec longueur maximale — Les passages 1 et 3 ont échoué sur un contrôle sur 19 : avec max_len 13, slugify rendait « un-deux » au lieu de « un-deux-trois », qui fait exactement 13 caractères — et l’agent avait déclaré les deux passages vérifiés. Une erreur de raisonnement du modèle (le même contrôle avait échoué deux fois dans la série du matin). slug.py et ses tests ont été écrits sur le disque dans les 6 passages de la journée.

Le verdict de l’agent lui-même : dans 11 passages sur 24, il a fini par « Non vérifié » sur au moins un point alors que notre contrôle passait ; dans 3 passages, il a déclaré la tâche vérifiée alors que notre contrôle échouait (les échecs de l’application de tâches et du module Python ci-dessus).

Comment nous avons mesuré le 12 octobre

  • Même moteur d’agent et même modèle inclus que myide.tech (DeepSeek Flash), dans un conteneur jetable, en mode « agent » : ni indice, ni nouvel essai, ni aide humaine.
  • Deux séries le même jour : 05:26–06:33 UTC, puis 16:49–17:38 UTC après la release « 20261012-corrections-banc », qui corrigeait ce que la série du matin avait trouvé (la page d’accueil aussi après une seconde release, « 20261012-dossier-courant »). Le tableau montre les deux ; les chiffres ci-dessus sont ceux de l’après-midi. Six passages de plus sur la page d’accueil, faits entre les deux releases, sont décrits sous cette tâche, pas cachés.
  • Coût du modèle : jetons comptés par myide × 0,28 / 0,42 $ le million (entrée / sortie), le tarif du compteur de consommation de myide.

Tâches courantes : 5 et 10 octobre 2026

Nous avons confié à l’agent de myide de vraies tâches de code — un site neuf, un bug caché derrière une demande sans rapport, une fonction dans une application existante, une API testée, un module Python — puis contrôlé chaque résultat nous-mêmes, hors de myide. Mesuré le 5 octobre 2026.

Passages réussis au contrôle indépendant
14/17
Durée médiane par tâche
22 s
Coût moyen du modèle par tâche
$0.017
Passages conclus par une ligne « Verified »
12/17

Résultats

Résultats
TâcheDurée par passageAppels d’outils par passageCoût du modèleContrôle indépendant
Site d’une page neuf, avec formulaire validé50 s · 47 s · 60 s26 · 25 · 21$0.025 · $0.0403/3 Navigateur sans tête : aucune erreur console ; une adresse e-mail invalide est refusée avec un message.
Fonction demandée sur une page qui plante au chargement26 s · 22 s · 34 s19 · 15 · 12$0.012 · $0.0233/3 Navigateur sans tête : aucune erreur console (le plantage d’origine devait être trouvé et corrigé) ; « Clear all » vide la liste.
Fonction dans une application to-do existante25 s · 83 s · 31 s16 · 25 · 12$0.017 · $0.0223/3 Navigateur sans tête : « Clear completed » retire la tâche cochée et garde l’autre.
API Node.js et son test, lancé dans le terminal10 s · 8 s · 15 s8 · 7 · 9$0.0049 · $0.0173/3 node --test rejoué par nous sur les fichiers produits, hors de myide.
Fonction Python et ses tests unitaires10 s · 8 s · 13 s · 16 s · 16 s7 · 6 · 7 · 10 · 9$0.0053 · $0.0048 · $0.017 · $0.0162/5 python -m unittest rejoué par nous, plus nos propres contrôles de slugify().

Site d’une page neuf, avec formulaire validé — Le troisième passage (60 s) a été joué sur myide.tech le 10 octobre 2026 : index.html, style.css et app.js ont été écrits ; une adresse invalide est refusée avec un message. La ligne « Verified » de l’agent a échoué sur un critère de dossier alors que les trois fichiers étaient là. Suivi : toujours présent le 12 octobre 2026, après la release du jour (voir « Ce que sont devenus les bogues du 10 octobre »).

Fonction demandée sur une page qui plante au chargement — Le troisième passage (34 s) a été joué sur myide.tech le 10 octobre 2026 : le plantage au chargement a été retiré et « Clear all » vide la liste. La ligne « Verified » de l’agent a échoué sur son critère de vidage alors que l’aperçu montrait Milk et Bread partis. Suivi : le même genre de « Non vérifié » à tort se voyait encore le 12 octobre 2026 (voir plus bas).

Fonction dans une application to-do existante — Le troisième passage (31 s) a été joué sur myide.tech le 10 octobre 2026 : « Clear completed » retire la tâche cochée, l’autre reste, et le compteur de restantes se met à jour.

API Node.js et son test, lancé dans le terminal — Le troisième passage (15 s) a été joué sur myide.tech le 10 octobre 2026 : node --test a réussi sur le VPS (2/2). La ligne « Verified » de l’agent a échoué sur un critère de dossier alors que les fichiers étaient là. Suivi : toujours présent le 12 octobre 2026 (voir plus bas).

Fonction Python et ses tests unitaires — Le passage 2 a échoué : le dossier demandé n’existait pas encore, et l’agent a travaillé dans le dossier au nom voisin laissé par le passage 1 — il l’a lui-même signalé ❌. Corrigé le jour même (un dossier nommé dans la demande est désormais créé), puis passage 3. Le 10 octobre 2026, deux passages sur myide.tech ont échoué : l’agent a contrôlé des fichiers en attente sans jamais écrire slug.py sur le disque. Suivi : pas corrigé à coup sûr — la même issue (modifications préparées, jamais écrites sur le disque) s’est revue une fois le 12 octobre 2026, sur un passage de la page d’accueil, mais ni dans les 6 passages Python de ce jour-là ni dans les 50 missions SWE-bench du 13 octobre (voir plus bas).

Ce que sont devenus les bogues du 10 octobre

  • Python : fichiers contrôlés encore en attente, jamais écrits sur le disque (2 passages sur myide.tech, le 10 octobre).

    Pas corrigé : revu le 12 octobre — Le 12 octobre, la tâche Python a écrit slug.py et ses tests sur le disque dans 6 passages sur 6. Mais un passage de la page d’accueil, après les releases du jour, a fini de la même façon : ses réponses ont été coupées plusieurs fois de suite et ses modifications sont restées en attente, jamais écrites sur le disque — 1 passage sur les 30 faits après les correctifs. Pas revu dans les 50 missions SWE-bench du 13 octobre.

  • Ligne « Verified » en échec sur un critère de dossier alors que les fichiers étaient là (landing, bugfix et API, le 10 octobre).

    Toujours présent le 12 octobre — Après la release du jour, 11 passages sur 24 finissaient encore par « Non vérifié » sur au moins un point alors que notre contrôle indépendant passait pour les 11 — deux fois sur « 3 fichiers créés » pour la page d’accueil, les trois fichiers étant là. Pas encore corrigé.

  • Bogue de dossier voisin, trouvé le 12 octobre : à la demande de travailler « dans ce dossier vide », l’agent créait un sous-dossier nommé « vide ».

    Corrigé le 12 octobre 2026 — Page d’accueil : 0 passage sur 3 avant les releases « 20261012-corrections-banc » et « 20261012-dossier-courant » (fichiers dans vide/). Ensuite, chaque passage qui a écrit ses fichiers les a mis à la racine ; 5 passages intermédiaires laissaient encore un vide/index.html en trop, les 3 derniers aucun.

Comment nous avons mesuré

  • Chaque tâche a été envoyée au moins deux fois à l’agent, en passages séparés, en mode « agent » avec le modèle inclus dans toutes les offres (DeepSeek), et rien d’autre : ni indice, ni nouvel essai, ni aide humaine.
  • La durée court de l’envoi de la demande à la réponse finale de l’agent, écritures, commandes, aperçus et vérifications dans le navigateur compris.
  • Le coût du modèle est celui qu’estime le compteur de consommation de myide pour la tâche, relevé une fois le compteur stabilisé (second passage).
  • Le contrôle est le nôtre, pas celui de l’agent : un navigateur sans tête ouvre le résultat et clique dedans, et les tests sont rejoués avec node --test et python -m unittest sur les fichiers produits. Une tâche n’est réussie que si ce contrôle passe.

Les limites, honnêtement

  • Deux passages par tâche : un modèle de langage varie d’un passage à l’autre — la même tâche a pris 25 s une fois et 83 s l’autre — ces chiffres sont typiques, pas une garantie.
  • 5 octobre 2026 : mesuré sur une machine de développement qui exécute le même code que myide.tech. 10 octobre 2026 en production (myide.tech) : landing 60 s, bugfix 34 s, to-do 31 s, API Node 15 s (les quatre réussis au contrôle indépendant) ; Python a échoué deux fois (fichiers en attente jamais écrits). La ligne « Verified » de l’agent a échoué sur un critère de dossier pour landing, bugfix et l’API alors que les fichiers étaient là. État des deux : des modifications jamais écrites se sont revues une fois le 12 octobre 2026 (1 passage sur les 30 faits après les correctifs du jour), et pas dans les 50 missions SWE-bench du 13 octobre ; le « Non vérifié » à tort était toujours présent le 12 octobre (11 passages sur 24).
  • Des tâches courtes et bien définies. Un projet plus gros prend plus de temps et peut demander plusieurs échanges.
  • Peu de passages par tâche : de 2 à 5 ici, 3 le 12 octobre. Davantage de passages fiabiliseraient les médianes ; nous ne les avons pas encore faits.
  • Aucun chiffre d’autres outils sur cette page. Les comparatifs donnent plutôt les différences documentées.

Les demandes exactes

Collez-en une dans myide pour rejouer le passage. Les chiffres ci-dessus viennent des passages mesurés (demandes en anglais). Les versions françaises sont là pour coller depuis cette page.

  1. Site d’une page neuf, avec formulaire validé

    Dans le dossier bench-landing/, crée un site d’une page pour une boulangerie (index.html, style.css, app.js) avec un formulaire de contact dont l’e-mail est validé en JavaScript : une adresse invalide affiche une erreur et le formulaire n’est pas envoyé. Puis vérifie-le dans l’aperçu.

  2. Fonction demandée sur une page qui plante au chargement

    Dans le dossier bench-bugfix/, ajoute un bouton « Clear all » qui vide la liste de courses, puis vérifie-le dans l’aperçu.

  3. Fonction dans une application to-do existante

    Dans l’application to-do de bench-feature/, ajoute un bouton « Clear completed » qui retire les tâches cochées, et affiche le nombre de tâches restantes. Vérifie-le dans l’aperçu.

  4. API Node.js et son test, lancé dans le terminal

    Dans le dossier bench-api/, crée un petit serveur HTTP Node.js sans dépendance (server.js) avec GET /health qui renvoie {"ok":true} en JSON, exporte une fonction pour le démarrer, et écris un test avec node:test (server.test.js) qui le lance sur un port libre et vérifie la réponse. Lance le test dans le terminal et assure-toi qu’il passe.

  5. Fonction Python et ses tests unitaires

    Dans le dossier bench-python/, écris un module Python slug.py avec une fonction slugify(text) qui met en minuscules, retire les accents, remplace les suites de caractères non alphanumériques par un seul tiret et coupe les tirets, plus des tests unitaires avec unittest dans test_slug.py (au moins 5 cas, dont « Crème brûlée ! » → « creme-brulee »). Lance les tests et assure-toi qu’ils passent.

Ouvre l’IDE et le banc qualitatif. Les chiffres ci-dessus restent les mesures officielles ; ils ne changent que si un nouveau passage est publié.