Benchmark · agentic
SWE-bench
SWE-bench évalue si un système d'IA sait corriger de vrais bugs logiciels : il rassemble 2 294 issues authentiques provenant de dépôts Python open source populaires sur GitHub et demande au modèle de produire un patch corrigeant le code. La métrique phare est le pourcentage d'issues résolus.
En savoir plus
- Exemple
- Un élément typique fournit au modèle un rapport de bug ou une demande de fonctionnalité réel déposé sur un projet Python — par exemple un issue de Django ou de scikit-learn — accompagné du code de ce dépôt, et lui demande de générer un patch qui règle le problème.
- Notation
- Le score est le pourcentage des 2 294 issues résolus : un issue ne compte que si le patch du modèle, une fois appliqué, fait passer la propre suite de tests du dépôt.
- Vérification
- La vérification est entièrement automatique : le patch généré est appliqué au dépôt et les vrais tests du projet sont exécutés ; la tâche n'est acceptée comme résolue que lorsque les tests cibles qui échouaient réussissent et que ceux qui réussissaient déjà réussissent toujours, sans jugement humain ni correspondance exacte.
- Pourquoi c'est important
- Il mesure une compétence d'ingénierie logicielle de bout en bout sur du code réel plutôt que sur des exercices jouets, ce qui en fait un indicateur très suivi des progrès des agents de codage ; pour les chiffres de une, il a été largement supplanté par le sous-ensemble validé par des humains SWE-bench Verified.
Exemple résolu
Tâche
Dépôt
psf/requests. Un utilisateur signale que définir un en-tête de la requête à None (pour supprimer un en-tête par défaut de la session) n'a aucun effet : la clé de valeur None subsiste dans les en-têtes fusionnés au lieu d'être supprimée. Étant donné le dépôt au commit défectueux et ce ticket, produisez un patch pour que requests.sessions.merge_setting supprime les clés dont la valeur est None.Solution
--- a/requests/sessions.py
+++ b/requests/sessions.py
@@ -412,6 +412,11 @@ def merge_setting(request_setting, session_setting, dict_class=OrderedDict):
merged_setting = dict_class(to_key_val_list(session_setting))
merged_setting.update(to_key_val_list(request_setting))
+ # Remove keys that are set to None. Extract the keys first to avoid
+ # mutating the dictionary while iterating over it.
+ none_keys = [k for (k, v) in merged_setting.items() if v is None]
+ for key in none_keys:
+ del merged_setting[key]
+
return merged_setting
Explication
Après la fusion des dictionnaires de la session et de la requête, toute clé pointant vers
None provient d'un remplacement explicite au niveau de la requête destiné à effacer une valeur par défaut ; le correctif rassemble donc ces clés et les supprime (en construisant d'abord la liste pour ne pas modifier le dictionnaire pendant l'itération). SWE-bench évalue en appliquant le patch et en exécutant les tests FAIL_TO_PASS et PASS_TO_PASS de l'instance — résolu seulement si tous réussissent.