Benchmark · coding
RepoCoder
O RepoCoder avalia a compleção de código em nível de repositório: dada uma posição em um arquivo-fonte, o modelo deve prever o código ausente usando contexto de todo o repositório. Seu benchmark RepoEval reporta Exact Match e Edit Similarity para compleções de linha e de invocação de API, e uma taxa de aprovação em testes unitários para corpos de função completos.
Saiba mais
- Exemplo
- Terminar uma linha escrita pela metade dentro de um arquivo do repositório que chama uma função ou classe definida em outro arquivo do mesmo projeto — o modelo precisa usar o contexto entre arquivos do repositório para produzir a compleção correta.
- Pontuação
- Compleções de linha e de invocação de API são pontuadas com Exact Match (1 se a previsão for idêntica ao código de referência oculto, senão 0) e Edit Similarity (1 − distância de Levenshtein normalizada), com média sobre todas as amostras em porcentagem. Compleções de corpo de função são pontuadas por execução: o corpo gerado substitui o original e deve passar nos testes unitários existentes do repositório.
- Verificação
- Para itens de linha/API, uma previsão é aceita por amostra comparando-a ao código de referência oculto do repositório-fonte, de forma exata (EM) ou por similaridade baseada em distância de edição (ES). Uma compleção de função é aceita apenas se os próprios testes unitários do repositório passarem com o corpo gerado. Os repositórios foram escolhidos recentes e de alta qualidade para reduzir o vazamento de dados de treino.
- Por que importa
- A programação real acontece dentro de grandes bases de código existentes, não em trechos isolados. O RepoCoder/RepoEval verifica se um modelo consegue usar APIs, símbolos e convenções específicos do projeto espalhados por muitos arquivos — uma medida mais realista de assistentes de código do que a síntese de funções isoladas.
Exemplo resolvido
Tarefa
Compleção em nível de linha (RepoEval). No repositório, utils/config.py define um auxiliar
load_config(path), e trainer.py começa com from .utils.config import load_config. Dado o código abaixo mais o contexto entre arquivos recuperado do repositório, preveja a única linha seguinte oculta dentro de __init__:
```python
class Trainer:
def __init__(self, path):
```Solução
self.config = load_config(path)
Explicação
Correto porque
load_config é o auxiliar do próprio repositório, importado no topo de trainer.py; apenas o contexto entre arquivos do repositório o revela, então um palpite genérico (como embutir uma leitura de JSON) erraria. A linha é avaliada por Exact Match contra a referência oculta, com Edit Similarity dando crédito parcial.Ainda não há pontuações verificadas para este benchmark.