Benchmark · agentic
SWE-bench
SWE-bench menguji apakah sistem AI mampu memperbaiki bug perangkat lunak nyata: ia mengambil 2.294 issue asli dari repositori Python open source populer di GitHub dan meminta model menghasilkan patch yang memperbaiki kode. Metrik utamanya adalah persentase issue yang berhasil diselesaikan.
Selengkapnya
- Contoh
- Sebuah item khas memberi model laporan bug atau permintaan fitur nyata yang diajukan pada proyek Python — misalnya sebuah issue dari Django atau scikit-learn — beserta kode repositori tersebut, dan memintanya menghasilkan patch yang menyelesaikan masalah itu.
- Penilaian
- Skornya adalah persentase dari 2.294 issue yang terselesaikan: sebuah issue baru dihitung jika patch dari model, setelah diterapkan, membuat rangkaian tes milik repositori itu lulus.
- Verifikasi
- Verifikasi sepenuhnya otomatis: patch yang dihasilkan diterapkan ke repositori dan tes asli proyek dijalankan; tugas dianggap selesai hanya jika tes sasaran yang tadinya gagal berubah menjadi lulus dan tes yang sebelumnya lulus tetap lulus, tanpa penilaian manusia atau pencocokan persis.
- Mengapa penting
- Ia mengukur kemampuan rekayasa perangkat lunak menyeluruh pada kode nyata, bukan latihan mainan, sehingga menjadi tolok ukur yang banyak diperhatikan untuk kemajuan agen pemrograman; untuk angka utama, ia sebagian besar telah digantikan oleh subset yang divalidasi manusia, SWE-bench Verified.
Contoh penyelesaian
Tugas
Repositori
psf/requests. Seorang pengguna melaporkan bahwa menyetel header request ke None (untuk menghapus header default sesi) tidak berpengaruh: key bernilai None tetap ada di header hasil penggabungan alih-alih dihapus. Diberikan repositori pada commit yang bermasalah dan issue ini, buatlah patch agar requests.sessions.merge_setting menghapus key yang nilainya None.Solusi
--- 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
Penjelasan
Setelah menggabungkan dictionary sesi dan request, setiap key yang menunjuk ke
None berasal dari penggantian eksplisit di tingkat request yang dimaksudkan untuk menghapus nilai default, sehingga perbaikan mengumpulkan key-key tersebut dan menghapusnya (membangun daftarnya lebih dulu agar tidak mengubah dictionary saat iterasi). SWE-bench menilai dengan menerapkan patch dan menjalankan tes FAIL_TO_PASS dan PASS_TO_PASS milik instance itu — dianggap selesai hanya jika semuanya lulus.