Benchmark · coding
RepoCoder
RepoCoder évalue la complétion de code au niveau du dépôt : étant donné une position dans un fichier source, le modèle doit prédire le code manquant en utilisant le contexte tiré de l'ensemble du dépôt. Son benchmark RepoEval rapporte Exact Match et Edit Similarity pour les complétions de ligne et d'appel d'API, et un taux de réussite aux tests unitaires pour les corps de fonction complets.
En savoir plus
- Exemple
- Terminer une ligne écrite à moitié dans un fichier du dépôt qui appelle une fonction ou une classe définie dans un autre fichier du même projet — le modèle doit utiliser le contexte inter-fichiers du dépôt pour produire la bonne complétion.
- Notation
- Les complétions de ligne et d'appel d'API sont notées avec Exact Match (1 si la prédiction est identique au code de référence masqué, sinon 0) et Edit Similarity (1 − distance de Levenshtein normalisée), moyennées sur tous les échantillons en pourcentage. Les complétions de corps de fonction sont notées par exécution : le corps généré remplace l'original et doit passer les tests unitaires existants du dépôt.
- Vérification
- Pour les items ligne/API, une prédiction est acceptée par échantillon en la comparant au code de référence masqué du dépôt source — exactement (EM) ou par similarité fondée sur la distance d'édition (ES). Une complétion de fonction n'est acceptée que si les propres tests unitaires du dépôt passent avec le corps généré. Les dépôts ont été choisis récents et de haute qualité pour réduire la fuite de données d'entraînement.
- Pourquoi c'est important
- Le vrai codage se fait au sein de grandes bases de code existantes, pas dans des extraits isolés. RepoCoder/RepoEval vérifie si un modèle sait utiliser les API, symboles et conventions propres au projet dispersés dans de nombreux fichiers — une mesure plus réaliste des assistants de code que la synthèse de fonctions isolées.
Exemple résolu
Tâche
Complétion au niveau de la ligne (RepoEval). Dans le dépôt, utils/config.py définit un utilitaire
load_config(path), et trainer.py commence par from .utils.config import load_config. À partir du code ci-dessous et du contexte inter-fichiers récupéré dans le dépôt, prédisez l'unique ligne suivante masquée dans __init__ :
```python
class Trainer:
def __init__(self, path):
```Solution
self.config = load_config(path)
Explication
Correct car
load_config est l'utilitaire propre au dépôt, importé en haut de trainer.py ; seul le contexte inter-fichiers du dépôt le révèle, donc une supposition générique (comme intégrer une lecture JSON) échouerait. La ligne est notée par Exact Match face à la référence masquée, Edit Similarity accordant un crédit partiel.Aucun score vérifié pour ce benchmark à ce jour.