Benchmark · agentic
SWE-bench
O SWE-bench testa se um sistema de IA consegue corrigir bugs reais de software: ele reúne 2.294 issues autênticos de repositórios Python de código aberto populares no GitHub e pede que o modelo gere um patch com a correção do código. A métrica principal é a porcentagem de issues resolvidos.
Saiba mais
- Exemplo
- Um item típico entrega ao modelo um relatório de bug ou pedido de recurso real de um projeto Python — digamos, um issue do Django ou do scikit-learn — junto com o código daquele repositório, e pede que ele gere um patch que resolva o problema.
- Pontuação
- A pontuação é a porcentagem dos 2.294 issues resolvidos: um issue só conta se o patch do modelo, depois de aplicado, fizer passar o próprio conjunto de testes do repositório.
- Verificação
- A verificação é totalmente automática: o patch gerado é aplicado ao repositório e os testes reais do projeto são executados; a tarefa é aceita como resolvida apenas quando os testes-alvo que falhavam passam a aprovar e os que já aprovavam continuam aprovando, sem julgamento humano nem correspondência exata.
- Por que importa
- Ele mede a capacidade de engenharia de software de ponta a ponta em código real em vez de exercícios de brinquedo, o que o torna um termômetro muito acompanhado do progresso dos agentes de programação; para os números de manchete ele foi em grande parte substituído pelo subconjunto validado por humanos SWE-bench Verified.
Exemplo resolvido
Tarefa
Repositório
psf/requests. Um usuário relata que definir um cabeçalho da requisição como None (para remover um cabeçalho padrão da sessão) não tem efeito: a chave com valor None permanece nos cabeçalhos combinados em vez de ser removida. Dado o repositório no commit com o bug e esta issue, produza um patch para que requests.sessions.merge_setting remova as chaves cujo valor seja None.Solução
--- 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
Explicação
Depois de combinar os dicionários da sessão e da requisição, qualquer chave que aponte para
None veio de uma substituição explícita no nível da requisição feita para apagar um valor padrão, então a correção reúne essas chaves e as remove (montando a lista primeiro para não alterar o dicionário durante a iteração). O SWE-bench avalia aplicando o patch e executando os testes FAIL_TO_PASS e PASS_TO_PASS da instância — resolvido só se todos passarem.