Бенчмарк · coding
RepoBench
RepoBench — бенчмарк автодополнения кода на уровне репозитория для Python и Java, который проверяет, способна ли система предсказать следующую строку кода, используя как контекст внутри файла, так и кросс-файловый контекст из других файлов того же репозитория. Он состоит из трёх задач — поиск (RepoBench-R), дополнение следующей строки (RepoBench-C) и сквозной конвейер (RepoBench-P) — и оценивается главным образом по Exact Match и Edit Similarity, а для задачи поиска — по точности поиска.
Подробнее
- Пример
- По предшествующим строкам исходного файла плюс фрагментам кода, извлечённым из других файлов того же репозитория (например, модуль, определяющий вспомогательную функцию или класс), предсказать единственную следующую строку кода — обычно строку, которая вызывает или ссылается на что-то, определённое в другом файле.
- Метрика
- Дополнение (RepoBench-C и -P): предсказанная следующая строка сравнивается с эталонной по Exact Match (доля полностью идентичных строк) и Edit Similarity (оценка 0–100 = 1 − нормированное расстояние Левенштейна); также сообщается CodeBLEU. Поиск (RepoBench-R): accuracy@k — доля элементов, у которых эталонный кросс-файловый фрагмент входит в топ-k найденных кандидатов.
- Приёмка
- Оценка автоматическая и основана на эталоне (без выполнения кода): выходная строка модели нормализуется и сравнивается по строке с настоящей следующей строкой, скрытой из исходного репозитория. По Exact Match дополнение засчитывается как верное, только если оно строково идентично эталонной строке; Edit Similarity даёт частичный балл; поиск принимается, когда эталонный фрагмент попадает в топ-k.
- Почему важно
- Настоящие ассистенты для кода должны рассуждать по всему репозиторию, а не только по открытому файлу. RepoBench изолирует моделирование кросс-файлового контекста — извлечение нужного контекста и предсказание зависящей от него следующей строки — поэтому он стал стандартным полигоном для репозиторно-осведомлённых и длинноконтекстных моделей кода.
Разбор примера
Задача
Кросс-файловый контекст (helpers/formatting.py):
def to_title(text):
return text.strip().title()
Контекст внутри файла (report.py):
from helpers.formatting import to_title
def make_heading(raw):
Предскажите следующую строку.
Решение
return to_title(raw)
Разбор
Скрытая следующая строка вызывает to_title — вспомогательную функцию, определённую в кросс-файловом фрагменте и импортированную в начале, — применяя её к аргументу функции, что и делал исходный код репозитория в этом месте; модель, игнорирующая другой файл, не смогла бы узнать, что нужен именно вызов to_title. Оценка: Exact Match с эталонной строкой, а Edit Similarity даёт частичный балл за близкие совпадения.
По этому бенчмарку пока нет проверенных результатов.