Бенчмарк · coding
Commit-0
Commit-0 проверяет, способен ли кодовый агент реализовать целую Python-библиотеку с нуля, имея лишь её спецификацию — сигнатуры функций и классов с docstring-ами и скрытый набор модульных тестов. Основная метрика — доля пройденных модульных тестов.
Подробнее
- Пример
- Дан скелет реальной Python-библиотеки: каждый модуль, класс и функция присутствуют как типизированная заготовка с docstring, но с пустым телом. Нужно реализовать их все так, чтобы собственный набор тестов библиотеки прошёл полностью (например, дописать функции разбора, сериализации и утилиты небольшой библиотеки по их docstring-ам).
- Метрика
- Оценка — доля пройденных модульных тестов: набор pytest каждой библиотеки запускается в изолированной среде, и библиотека получает долю пройденных тестов, агрегированную по 54 библиотекам бенчмарка. В некоторых конфигурациях код также обязан пройти проверки lint и типов.
- Приёмка
- Результат принимается через выполнение скрытого набора тестов в воспроизводимом Docker-контейнере — оракулом служит pytest, поэтому тест засчитывается лишь при реальном прохождении, без сверки с эталонным выводом. Агентные прогоны могут итеративно использовать обратную связь тестов и lint, но финальная оценка перезапускает набор с чистого checkout.
- Почему важно
- Он выходит за пределы генерации отдельной функции или одного файла (HumanEval, SWE-bench) к синтезу целой библиотеки по спецификации, проверяя долгосрочное планирование, согласованность между модулями и способность выполнить реальный контракт API — гораздо ближе к выпуску настоящего ПО.
Разбор примера
Задача
Заготовка одной функции внутри скелета библиотеки, которую нужно реализовать так, чтобы её скрытые тесты прошли:
```python
def parse_version(text: str) -> tuple[int, int, int]:
"""Parse a semantic version 'MAJOR.MINOR.PATCH' into a tuple of ints.
Raises ValueError if text is not three dot-separated integers.
"""
raise NotImplementedError
```
Решение
```python
def parse_version(text: str) -> tuple[int, int, int]:
parts = text.split(".")
if len(parts) != 3:
raise ValueError(f"invalid version: {text!r}")
major, minor, patch = (int(p) for p in parts)
return (major, minor, patch)
```
Разбор
Тело соблюдает контракт docstring: разбивает строку по «.», отвергает всё, что не состоит ровно из трёх частей, через ValueError и преобразует каждую часть в int. При оценке в песочнице запускается скрытый набор pytest библиотеки, и этот пункт проходит, только когда выполнены все утверждения о parse_version.
По этому бенчмарку пока нет проверенных результатов.