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
| Dépôt | Résolues | Tâches | Taux |
|---|---|---|---|
| django/django | 170 | 231 | 74 % |
| sympy/sympy | 48 | 75 | 64 % |
| sphinx-doc/sphinx | 28 | 44 | 64 % |
| matplotlib/matplotlib | 22 | 34 | 65 % |
| scikit-learn/scikit-learn | 26 | 32 | 81 % |
| astropy/astropy | 13 | 22 | 59 % |
| pydata/xarray | 15 | 22 | 68 % |
| pytest-dev/pytest | 16 | 19 | 84 % |
| pylint-dev/pylint | 3 | 10 | 30 % |
| psf/requests | 4 | 8 | 50 % |
| mwaskom/seaborn | 0 | 2 | 0 % |
| pallets/flask | 1 | 1 | 100 % |
Par difficulté
| Temps qu’il faudrait à un développeur (estimation des annotateurs de SWE-bench) | Résolues | Tâches | Taux |
|---|---|---|---|
| Moins de 15 minutes | 163 | 194 | 84 % |
| 15 minutes à 1 heure | 171 | 261 | 66 % |
| 1 à 4 heures | 12 | 42 | 29 % |
| Plus de 4 heures | 0 | 3 | 0 % |
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.
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.
| Groupe | Nombre | Coût moyen du modèle |
|---|---|---|
| Tentatives résolues | 346 | $0.0799 |
| Tentatives non résolues | 154 | $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.
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
| Dépôt | Résolues | Tâches tirées |
|---|---|---|
| django/django | 15 | 23 |
| sympy/sympy | 6 | 8 |
| sphinx-doc/sphinx | 3 | 5 |
| matplotlib/matplotlib | 2 | 3 |
| scikit-learn/scikit-learn | 2 | 3 |
| astropy/astropy | 1 | 2 |
| pydata/xarray | 0 | 2 |
| pytest-dev/pytest | 2 | 2 |
| psf/requests | 1 | 1 |
| pylint-dev/pylint | 0 | 1 |
Par difficulté
| Temps qu’il faudrait à un développeur (estimation des annotateurs de SWE-bench) | Résolues | Tâches tirées |
|---|---|---|
| Moins de 15 minutes | 17 | 22 |
| 15 minutes à 1 heure | 15 | 24 |
| 1 à 4 heures | 0 | 3 |
| Plus de 4 heures | 0 | 1 |
Les 50 tâches, échecs compris
| Tâche (lien vers le correctif d’origine) | Difficulté | Résultat | Durée de l’agent | Coût du modèle |
|---|---|---|---|---|
| astropy__astropy-14598 | 15 minutes à 1 heure | Non résolue · arrêtée sans conclure | 136 s | $0.114 |
| astropy__astropy-7671 | 15 minutes à 1 heure | Résolue | 71 s | $0.058 |
| django__django-11790 | 15 minutes à 1 heure | Non résolue · arrêtée sans conclure | 183 s | $0.212 |
| django__django-11951 | Moins de 15 minutes | Non résolue | 19 s | $0.012 |
| django__django-13158 | 15 minutes à 1 heure | Non résolue | 126 s | $0.141 |
| django__django-13212 | 1 à 4 heures | Non résolue · arrêtée sans conclure | 37 s | $0.031 |
| django__django-13315 | 15 minutes à 1 heure | Aucune modification | 77 s | $0.055 |
| django__django-13406 | Moins de 15 minutes | Non résolue · arrêtée sans conclure | 237 s | $0.260 |
| django__django-13410 | Moins de 15 minutes | Résolue | 15 s | $0.010 |
| django__django-13837 | 1 à 4 heures | Non résolue · arrêtée sans conclure | 36 s | $0.025 |
| django__django-13933 | Moins de 15 minutes | Résolue | 24 s | $0.011 |
| django__django-14155 | 15 minutes à 1 heure | Non résolue · arrêtée sans conclure | 36 s | $0.024 |
| django__django-14373 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 17 s | $0.011 |
| django__django-14493 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 24 s | $0.013 |
| django__django-14580 | Moins de 15 minutes | Résolue | 43 s | $0.033 |
| django__django-14999 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 59 s | $0.046 |
| django__django-15277 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 26 s | $0.011 |
| django__django-15525 | 15 minutes à 1 heure | Résolue · arrêtée sans conclure | 64 s | $0.056 |
| django__django-15863 | Moins de 15 minutes | Résolue | 27 s | $0.010 |
| django__django-16136 | 15 minutes à 1 heure | Résolue · arrêtée sans conclure | 40 s | $0.021 |
| django__django-16333 | Moins de 15 minutes | Résolue | 50 s | $0.014 |
| django__django-16485 | 15 minutes à 1 heure | Résolue | 24 s | $0.016 |
| django__django-16493 | 15 minutes à 1 heure | Résolue | 23 s | $0.013 |
| django__django-16950 | 15 minutes à 1 heure | Résolue | 121 s | $0.058 |
| django__django-7530 | 15 minutes à 1 heure | Résolue · arrêtée sans conclure | 40 s | $0.025 |
| matplotlib__matplotlib-23412 | 15 minutes à 1 heure | Résolue | 62 s | $0.040 |
| matplotlib__matplotlib-23476 | Moins de 15 minutes | Aucune modification | 142 s | $0.076 |
| matplotlib__matplotlib-25960 | 15 minutes à 1 heure | Résolue · arrêtée sans conclure | 368 s | $0.172 |
| psf__requests-1921 | Moins de 15 minutes | Résolue | 67 s | $0.014 |
| pydata__xarray-4687 | 15 minutes à 1 heure | Non résolue · arrêtée sans conclure | 302 s | $0.329 |
| pydata__xarray-6992 | Plus de 4 heures | Non résolue | 91 s | $0.019 |
| pylint-dev__pylint-7080 | 15 minutes à 1 heure | Aucune modification | 104 s | $0.112 |
| pytest-dev__pytest-7324 | 15 minutes à 1 heure | Résolue · arrêtée sans conclure | 139 s | $0.068 |
| pytest-dev__pytest-7982 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 47 s | $0.033 |
| scikit-learn__scikit-learn-13328 | Moins de 15 minutes | Résolue | 13 s | $0.0088 |
| scikit-learn__scikit-learn-14496 | Moins de 15 minutes | Résolue | 24 s | $0.0097 |
| scikit-learn__scikit-learn-14983 | Moins de 15 minutes | Non résolue | 169 s | $0.212 |
| sphinx-doc__sphinx-7748 | 15 minutes à 1 heure | Non résolue · arrêtée sans conclure | 240 s | $0.268 |
| sphinx-doc__sphinx-7910 | Moins de 15 minutes | Résolue | 18 s | $0.012 |
| sphinx-doc__sphinx-7985 | 15 minutes à 1 heure | Non résolue · arrêtée sans conclure | 412 s | $0.475 |
| sphinx-doc__sphinx-8459 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 119 s | $0.131 |
| sphinx-doc__sphinx-9281 | Moins de 15 minutes | Résolue · arrêtée sans conclure | 30 s | $0.027 |
| sympy__sympy-12419 | 15 minutes à 1 heure | Résolue · arrêtée sans conclure | 233 s | $0.190 |
| sympy__sympy-13372 | Moins de 15 minutes | Résolue | 56 s | $0.021 |
| sympy__sympy-13551 | 15 minutes à 1 heure | Résolue | 334 s | $0.238 |
| sympy__sympy-13647 | 15 minutes à 1 heure | Résolue | 60 s | $0.037 |
| sympy__sympy-15017 | Moins de 15 minutes | Non résolue | 22 s | $0.015 |
| sympy__sympy-15349 | 15 minutes à 1 heure | Résolue | 109 s | $0.058 |
| sympy__sympy-18199 | 1 à 4 heures | Non résolue · arrêtée sans conclure | 30 s | $0.015 |
| sympy__sympy-23824 | 15 minutes à 1 heure | Résolue | 30 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.