Бенчмарк · coding
Aider Polyglot
Aider Polyglot — бенчмарк редактирования кода из инструмента Aider, который проверяет, насколько хорошо LLM редактирует существующий код на многих языках программирования. Оценка — это доля задач, в которых правки дают корректный код, проходящий тесты задачи.
Подробнее
- Пример
- Типичный пункт — упражнение по программированию в стиле Exercism на одном из нескольких языков (Python, Rust, Go, Java, JavaScript или C++), где модель должна отредактировать предоставленные исходные файлы, чтобы реализовать нужную функцию и пройти её тесты.
- Метрика
- Метрика — процент решённых задач: задача засчитывается, только если отредактированный код проходит все автоматические тесты. Aider также отслеживает, как часто правки приходят в корректном, применимом формате.
- Приёмка
- Результаты проверяются автоматически: отредактированные файлы прогоняются через набор модульных тестов упражнения, и задача считается пройденной, только если проходят все тесты — без человеческих голосов и сравнения на точное совпадение.
- Почему важно
- Он отражает реальную работу разработчика — редактирование существующих файлов на многих языках, а не написание фрагментов с нуля, — поэтому это практический сигнал того, насколько модель полезна как помощник по программированию.
Разбор примера
Aider Polyglot берёт 225 самых трудных задач по программированию с Exercism на языках C++, Go, Java, JavaScript, Python и Rust; модели дают условие и файл-заготовку, и она должна вернуть правку (в формате блока SEARCH/REPLACE, принятом в aider), после которой проходят скрытые модульные тесты, с одной автоматической повторной попыткой, если первая не удалась. Характерная задача на Python «Acronym» просит преобразовать фразу в аббревиатуру: берём первую букву каждого слова в верхнем регистре, считаем пробелы и дефисы разделителями, а остальную пунктуацию игнорируем — дан файл `acronym.py` с `def abbreviate(text): pass`, нужно, чтобы прошли тесты вроде `abbreviate("Portable Network Graphics") == "PNG"` и `abbreviate("Ruby on Rails") == "ROR"`. Правильное решение заменяет заготовку блоком SEARCH/REPLACE:
```
acronym.py
<<<<<<< SEARCH
def abbreviate(text):
pass
=======
import re
def abbreviate(text):
words = re.split(r"[^A-Za-z']+", text)
return "".join(word[0].upper() for word in words if word)
>>>>>>> REPLACE
```
Рассуждение: разбиваем текст по любой последовательности не-буквенных символов, чтобы и пробелы, и дефисы служили границами слов, отбрасываем пустые фрагменты, а затем склеиваем первую букву каждого оставшегося слова в верхнем регистре — получая «ROR» для «Ruby on Rails». Задача считается решённой, только если проходят все модульные тесты, а итог бенчмарка — процент из 225 задач, решённых таким образом.
По этому бенчмарку пока нет проверенных результатов.