Aller au contenu

← Benchmark de l’agent

SWE-bench Verified : les 500 tâches

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.

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

Par dépôt

Par dépôt
DépôtRésoluesTâchesTaux
django/django17023174 %
sympy/sympy487564 %
sphinx-doc/sphinx284464 %
matplotlib/matplotlib223465 %
scikit-learn/scikit-learn263281 %
astropy/astropy132259 %
pydata/xarray152268 %
pytest-dev/pytest161984 %
pylint-dev/pylint31030 %
psf/requests4850 %
mwaskom/seaborn020 %
pallets/flask11100 %

Par difficulté

Par difficulté
Temps qu’il faudrait à un développeur (estimation des annotateurs de SWE-bench)RésoluesTâchesTaux
Moins de 15 minutes16319484 %
15 minutes à 1 heure17126166 %
1 à 4 heures124229 %
Plus de 4 heures030 %
Afficher les 500 tâches

Deux incidents, et la règle fixée avant de rejouer

  • Le 15 octobre, l’API de DeepSeek a été partiellement indisponible de 00:11 à 05:04 UTC, d’après la page de statut de DeepSeek et son avis aux clients de l’API. 43 tâches lancées entre 00:27 et 03:58 UTC se sont terminées sans qu’un seul appel au modèle aboutisse — l’agent n’a jamais pu y travailler. Nous avons mis le passage en pause à 03:58 UTC.
  • Avant de rejouer quoi que ce soit, nous avons écrit la règle : une tâche dont la mission n’a obtenu aucun appel au modèle, ou dont l’agent n’a jamais démarré, n’est pas un essai — son dossier est mis de côté, jamais effacé, et la tâche est rejouée. Toute tâche qui a obtenu au moins un appel compte telle quelle, même si la panne l’a coupée en route : 3 tâches comptées tournaient dans la fenêtre de la panne avec des réponses du modèle : sphinx-doc__sphinx-9229 (non résolue), astropy__astropy-13398 (non résolue), sympy__sympy-22714 (résolue).
  • Pendant la pause, le ménage nocturne des images de notre serveur a supprimé l’image d’exécution de l’agent, qu’aucun conteneur n’utilisait à ce moment-là. À la reprise, à 05:03 UTC, les 5 premières tâches rejouées se sont arrêtées avant le départ de l’agent (« No such image ») ; selon la même règle, elles ont été mises de côté et rejouées encore. À partir de 05:18 UTC, l’agent a tourné sur une image reconstruite avec les mêmes package.json et package-lock, Node 22.23.3 et Playwright 1.59.1 ; le moteur lui-même est la source figée, inchangée.
  • En tout, 48 passages ont été mis de côté pour 43 tâches distinctes, tous conservés sur notre serveur et comptés nulle part. Chacune de ces 43 tâches compte une fois dans les 346/500, avec le résultat de sa reprise : 31 résolues. Elles sont signalées dans la liste ci-dessous. 402 tâches comptées ont tourné sur la première image, 98 sur l’image reconstruite.
  • Un premier passage complet, lancé le 14 octobre avec le moteur précédent, a été arrêté après 23 tâches (voir « Des preuves justes lues comme absentes » plus bas). Il n’est pas compté : les 500 tâches sont reparties de zéro.

La page de statut de DeepSeek pour cet incident

Comment nous avons mesuré

  • Le jeu entier : les 500 tâches du split test de Verified, sans tirage. Avant la première exécution, elles ont été triées par identifiant puis mélangées avec une graine fixe (20261014), et jouées dans cet ordre, deux à la fois.
  • Agent : le moteur d’agent du 14 octobre 2026, en mode « agent » avec le modèle inclus (DeepSeek Flash, modèle d’API deepseek-flash (DeepSeek-V4.1-Flash), raisonnement désactivé). Une mission par tâche, 30 minutes au plus, le texte de l’issue pour seule consigne : ni indice, ni nouvel essai, ni aide humaine.
  • Même moteur pour les 500 tâches : sa source a été figée au départ et montée telle quelle dans le conteneur de chaque tâche. Image d’exécution e7975b96e00c, puis fcb54cbe1f84 après l’incident décrit plus haut.
  • Environnement et jugement comme pour l’échantillon du 13 octobre : l’image Docker officielle de SWE-bench pour chaque tâche, réseau limité à l’API du modèle, et les modifications de l’agent (git diff, sans les notes que le moteur tient pour lui-même) jugées telles quelles par le harnais officiel (swebench 5.0.2, run_evaluation).
  • Coût : 64,87 $ pour les 500 tâches — les jetons comptés à chaque appel du modèle (323,4 millions en entrée, 5,7 millions en sortie), au tarif publié par DeepSeek pour l’heure de l’appel, toute l’entrée comptée hors cache. La facture réelle est plus basse.

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).

Les limites de ce passage

  • Une mission par tâche, et un modèle de langage varie : sur les 50 tâches communes avec l’échantillon du 13 octobre, 6 n’ont été résolues que cette fois et 5 que la première. Avec 500 tâches, l’intervalle de confiance à 95 % va de 65,0 % à 73,1 %.
  • Dans myide, vous pouvez répondre « continue » à une mission ; ici chaque tâche a eu une seule mission de 30 minutes au plus (3 ont atteint la limite). 49 missions sur 500 se sont terminées inachevées : 25 se sont arrêtées avant de conclure et 24 ont conclu avec un point qu’elles n’ont pas su prouver. Leurs modifications ont été jugées quand même ; 21 ont résolu la tâche.
  • 9 tâches se sont terminées sans aucune modification du dépôt (3 sur 50 le 13 octobre) ; le harnais a refusé 1 correctif qui ne s’appliquait pas et n’a pas pu évaluer 1 tâche. Toutes comptent comme des échecs.
  • Python seulement, 12 projets : SWE-bench ne dit rien des interfaces web, des autres langages ni de votre propre code. Les tâches courantes ci-dessous en couvrent une partie.

Les défauts trouvés en mesurant, et ce qu’ils sont devenus

Point de repère

DeepSeek annonce 73,7 % (raisonnement désactivé) et 79,0 % (raisonnement maximal) sur les 500 mêmes tâches pour DeepSeek-V4-Flash — auto-déclaré, avec un harnais qu’il ne décrit pas (fiche du modèle, consultée le 13 octobre 2026). Pas directement comparable : myide appelle DeepSeek-V4.1-Flash par son propre agent, raisonnement désactivé, une mission par tâche et 30 minutes au plus. Nous ne publions ici le score d’aucun autre outil : aucun n’a été mesuré dans ces conditions. Fiche du modèle DeepSeek-V4-Flash

SWE-bench Verified, 13 octobre 2026 : un échantillon de 50 tâches

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 en avons tiré 50 au hasard, confié chaque issue une fois à l’agent de myide, et laissé le harnais officiel de SWE-bench juger le résultat. Mesuré le 13 octobre 2026.

Tâches résolues (harnais officiel)
32/5064 %
Intervalle de confiance à 95 %
50 % – 76 %
Durée médiane de l’agent par tâche
58 s
Coût du modèle par tâche (moyenne, borne haute)
$0.078

Les 50 mêmes tâches ont été rejouées dans le passage complet, par le moteur du 14 octobre : 33 résolues au lieu de 32 (27 les deux fois, 6 seulement la seconde, 5 seulement la première), et 7 missions inachevées au lieu de 23. Un écart d’une tâche sur 50 ne signifie rien à lui seul ; moins de missions inachevées, c’est ce que visaient les correctifs du 14 octobre.

Afficher les tableaux, la méthode, les limites et les 50 tâches de l’échantillon

Par dépôt

Par dépôt
DépôtRésoluesTâches tirées
django/django1523
sympy/sympy68
sphinx-doc/sphinx35
matplotlib/matplotlib23
scikit-learn/scikit-learn23
astropy/astropy12
pydata/xarray02
pytest-dev/pytest22
psf/requests11
pylint-dev/pylint01

Par difficulté

Par difficulté
Temps qu’il faudrait à un développeur (estimation des annotateurs de SWE-bench)RésoluesTâches tirées
Moins de 15 minutes1722
15 minutes à 1 heure1524
1 à 4 heures03
Plus de 4 heures01

Les 50 tâches, échecs compris

Les 50 tâches, échecs compris
Tâche (lien vers le correctif d’origine)DifficultéRésultatDurée de l’agentCoût du modèle
astropy__astropy-1459815 minutes à 1 heureNon résolue · arrêtée sans conclure136 s$0.114
astropy__astropy-767115 minutes à 1 heureRésolue71 s$0.058
django__django-1179015 minutes à 1 heureNon résolue · arrêtée sans conclure183 s$0.212
django__django-11951Moins de 15 minutesNon résolue19 s$0.012
django__django-1315815 minutes à 1 heureNon résolue126 s$0.141
django__django-132121 à 4 heuresNon résolue · arrêtée sans conclure37 s$0.031
django__django-1331515 minutes à 1 heureAucune modification77 s$0.055
django__django-13406Moins de 15 minutesNon résolue · arrêtée sans conclure237 s$0.260
django__django-13410Moins de 15 minutesRésolue15 s$0.010
django__django-138371 à 4 heuresNon résolue · arrêtée sans conclure36 s$0.025
django__django-13933Moins de 15 minutesRésolue24 s$0.011
django__django-1415515 minutes à 1 heureNon résolue · arrêtée sans conclure36 s$0.024
django__django-14373Moins de 15 minutesRésolue · arrêtée sans conclure17 s$0.011
django__django-14493Moins de 15 minutesRésolue · arrêtée sans conclure24 s$0.013
django__django-14580Moins de 15 minutesRésolue43 s$0.033
django__django-14999Moins de 15 minutesRésolue · arrêtée sans conclure59 s$0.046
django__django-15277Moins de 15 minutesRésolue · arrêtée sans conclure26 s$0.011
django__django-1552515 minutes à 1 heureRésolue · arrêtée sans conclure64 s$0.056
django__django-15863Moins de 15 minutesRésolue27 s$0.010
django__django-1613615 minutes à 1 heureRésolue · arrêtée sans conclure40 s$0.021
django__django-16333Moins de 15 minutesRésolue50 s$0.014
django__django-1648515 minutes à 1 heureRésolue24 s$0.016
django__django-1649315 minutes à 1 heureRésolue23 s$0.013
django__django-1695015 minutes à 1 heureRésolue121 s$0.058
django__django-753015 minutes à 1 heureRésolue · arrêtée sans conclure40 s$0.025
matplotlib__matplotlib-2341215 minutes à 1 heureRésolue62 s$0.040
matplotlib__matplotlib-23476Moins de 15 minutesAucune modification142 s$0.076
matplotlib__matplotlib-2596015 minutes à 1 heureRésolue · arrêtée sans conclure368 s$0.172
psf__requests-1921Moins de 15 minutesRésolue67 s$0.014
pydata__xarray-468715 minutes à 1 heureNon résolue · arrêtée sans conclure302 s$0.329
pydata__xarray-6992Plus de 4 heuresNon résolue91 s$0.019
pylint-dev__pylint-708015 minutes à 1 heureAucune modification104 s$0.112
pytest-dev__pytest-732415 minutes à 1 heureRésolue · arrêtée sans conclure139 s$0.068
pytest-dev__pytest-7982Moins de 15 minutesRésolue · arrêtée sans conclure47 s$0.033
scikit-learn__scikit-learn-13328Moins de 15 minutesRésolue13 s$0.0088
scikit-learn__scikit-learn-14496Moins de 15 minutesRésolue24 s$0.0097
scikit-learn__scikit-learn-14983Moins de 15 minutesNon résolue169 s$0.212
sphinx-doc__sphinx-774815 minutes à 1 heureNon résolue · arrêtée sans conclure240 s$0.268
sphinx-doc__sphinx-7910Moins de 15 minutesRésolue18 s$0.012
sphinx-doc__sphinx-798515 minutes à 1 heureNon résolue · arrêtée sans conclure412 s$0.475
sphinx-doc__sphinx-8459Moins de 15 minutesRésolue · arrêtée sans conclure119 s$0.131
sphinx-doc__sphinx-9281Moins de 15 minutesRésolue · arrêtée sans conclure30 s$0.027
sympy__sympy-1241915 minutes à 1 heureRésolue · arrêtée sans conclure233 s$0.190
sympy__sympy-13372Moins de 15 minutesRésolue56 s$0.021
sympy__sympy-1355115 minutes à 1 heureRésolue334 s$0.238
sympy__sympy-1364715 minutes à 1 heureRésolue60 s$0.037
sympy__sympy-15017Moins de 15 minutesNon résolue22 s$0.015
sympy__sympy-1534915 minutes à 1 heureRésolue109 s$0.058
sympy__sympy-181991 à 4 heuresNon résolue · arrêtée sans conclure30 s$0.015
sympy__sympy-2382415 minutes à 1 heureRésolue30 s$0.018

Comment nous avons mesuré SWE-bench

  • Échantillon : 50 des 500 tâches, stratifiées par dépôt selon leur part dans le jeu (Django 23, SymPy 8, Sphinx 5…), tirées avec une graine fixe (20261013) avant la première exécution. Aucune tâche retirée ni rejouée après coup.
  • Agent : le moteur d’agent en service sur myide.tech ce jour-là, en mode « agent » avec le modèle inclus (DeepSeek Flash, modèle d’API deepseek-flash (DeepSeek-V4.1-Flash), raisonnement désactivé). Une mission par tâche, 30 minutes au plus, le texte de l’issue pour seule consigne : ni indice, ni nouvel essai, ni aide humaine.
  • Environnement : l’image Docker officielle de SWE-bench pour chaque tâche, avec l’environnement Python du projet déjà installé. L’agent ne pouvait joindre que l’API du modèle : ni GitHub, ni moteur de recherche, ni index de paquets. Toute référence Git postérieure au commit de la tâche aurait été retirée avant la mission ; les images officielles n’en avaient aucune.
  • Jugement : les modifications de l’agent (git diff) sont parties telles quelles au harnais officiel (swebench 5.0.2, run_evaluation). Une tâche n’est résolue que si les tests qui ont validé la correction en amont passent et que les tests existants du projet passent toujours.
  • Coût : les jetons comptés par myide à chaque appel du modèle, au tarif publié par DeepSeek pour l’heure de l’appel, toute l’entrée comptée hors cache — la facture réelle est plus basse.

Les limites de cet échantillon

  • Un échantillon, pas le benchmark complet : 50 tâches sur 500. Avec 50 tâches, l’intervalle de confiance à 95 % va de 50 % à 76 % — le score n’est pas plus précis que cela.
  • Une mission par tâche : un modèle de langage varie, un autre passage résoudrait un ensemble un peu différent.
  • Dans myide, une mission peut durer 60 minutes et vous pouvez répondre « continue » ; ici chaque tâche a eu une seule mission de 30 minutes au plus (la plus longue a pris 7 minutes). 23 missions sur 50 se sont arrêtées sans conclure, après plusieurs tours sans progrès ; leurs modifications ont été jugées quand même.
  • 3 tâches se sont terminées sans aucune modification : l’agent a buté sur une erreur qu’il n’a pas dépassée (écriture hors du projet, chemin protégé, modification qui ne correspondait plus au fichier), et myide annule les écritures d’une mission en échec. Elles comptent comme des échecs.
  • Python seulement, 12 projets : SWE-bench ne dit rien des interfaces web, des autres langages ni de votre propre code. Les tâches courantes ci-dessous en couvrent une partie.