Бенчмарк · coding
RepoCoder
RepoCoder оценивает дополнение кода на уровне репозитория: по позиции в исходном файле модель должна предсказать недостающий код, используя контекст из всего репозитория. Его бенчмарк RepoEval сообщает Exact Match и Edit Similarity для дополнения строк и вызовов API, а для целых тел функций — долю прохождения модульных тестов.
Подробнее
- Пример
- Завершение частично написанной строки в файле репозитория, которая вызывает функцию или класс, определённые в другом файле того же проекта: модель должна использовать межфайловый контекст репозитория, чтобы получить правильное дополнение.
- Метрика
- Дополнения строк и вызовов API оцениваются метриками Exact Match (1, если предсказание точно совпадает со скрытым эталонным кодом, иначе 0) и Edit Similarity (1 − нормированное расстояние Левенштейна), усреднёнными по всем примерам в процентах. Дополнения тел функций оцениваются исполнением: сгенерированное тело заменяет исходное и должно пройти существующие модульные тесты репозитория.
- Приёмка
- Для строк/API предсказание принимается по каждому примеру сравнением с эталонным кодом, скрытым из исходного репозитория, — точно (EM) или по близости на основе расстояния редактирования (ES). Дополнение функции принимается, только если собственные модульные тесты репозитория проходят на сгенерированном теле. Репозитории отбирались свежими и качественными, чтобы снизить утечку обучающих данных.
- Почему важно
- Реальное программирование происходит внутри больших существующих кодовых баз, а не в изолированных фрагментах. RepoCoder/RepoEval проверяет, умеет ли модель использовать специфичные для проекта API, идентификаторы и соглашения, разбросанные по многим файлам, — это более реалистичная мера помощников по коду, чем синтез отдельных функций.
Разбор примера
Задача
Дополнение на уровне строки (RepoEval). В репозитории utils/config.py определяет вспомогательную функцию
load_config(path), а trainer.py начинается с from .utils.config import load_config. По приведённому ниже коду и извлечённому межфайловому контексту репозитория предскажите единственную скрытую следующую строку внутри __init__:
```python
class Trainer:
def __init__(self, path):
```Решение
self.config = load_config(path)
Разбор
Верно, потому что
load_config — собственная вспомогательная функция репозитория, импортированная в начале trainer.py; выявить её можно только по межфайловому контексту репозитория, поэтому обобщённая догадка (например, встроенное чтение JSON) не подойдёт. Строка оценивается метрикой Exact Match относительно скрытого эталона, а Edit Similarity даёт частичный зачёт.По этому бенчмарку пока нет проверенных результатов.