Datasets documentation

Загрузка задач оценки агентов

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Загрузка задач оценки агентов

Набор данных Harbor представляет собой коллекцию задач для оценки ИИ-агентов: каждая задача предоставляет агенту инструкцию, изолированную среду для работы и верификатор, который оценивает его работу.

В отличие от табличных наборов данных, набор данных Harbor не является файлом, в котором каждая строка соответствует одному примеру: каждая задача представляет собой каталог. Билдер harbor читает такой репозиторий и возвращает по одной строке на задачу, благодаря чему бенчмарк можно исследовать, фильтровать и передавать так же, как и любой другой набор данных:

>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> dataset
DatasetDict({
    test: Dataset({
        features: ['name', 'instruction', 'description', 'keywords', 'schema_version', 'config', 'metadata', 'files', 'location'],
        num_rows: 66
    })
})

Загрузка набора данных Harbor только читает задачи: она никогда не запускает агента, не собирает образ и не выполняет верификатор, а также не требует установки Harbor. Для фактического запуска задач используйте библиотеку Harbor.

Конфигурации задач Harbor представляют собой файлы в формате TOML. Python 3.11 и более поздние версии читают их с помощью стандартной библиотеки (tomllib); в Python 3.10 необходимо установить парсер TOML как дополнительную зависимость. Ознакомьтесь с руководством по установке, чтобы узнать, как это сделать.

Структура репозитория

Каталог задачи определяется двумя файлами, task.toml и instruction.md, и обычно также содержит определение среды, верификатор и эталонное решение:

my-harbor-dataset/
├── README.md
└── tasks/
    ├── task-a/
    │   ├── task.toml          # configuration: metadata, resources, timeouts...
    │   ├── instruction.md     # what the agent is asked to do
    │   ├── README.md          # optional human-readable description
    │   ├── environment/       # Dockerfile / docker-compose.yaml + files of the sandbox
    │   ├── tests/             # verifier
    │   └── solution/          # oracle solution
    └── task-b/
        └── ...

Каталог распознаётся как набор данных Harbor, как только один из его подкаталогов, независимо от глубины вложенности, является каталогом задачи (файлы task.toml и instruction.md находятся рядом): задачи обнаруживаются автоматически, без необходимости перечислять какие-либо файлы.

Загрузка задач

Поскольку наборы данных Harbor состоят из каталогов, а не из файлов данных, они загружаются по пути — аргумент data_files не требуется:

>>> from datasets import load_dataset

>>> # a dataset repository on the Hub
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> # a local directory of tasks
>>> dataset = load_dataset("/path/to/my-harbor-dataset")
>>> # the tasks of a repository that are in a sub-directory
>>> dataset = load_dataset("harborframework/terminal-bench", data_dir="tasks")

Явная передача data_files также поддерживается, при условии, что шаблон включает файлы task.toml и instruction.md — одна пара совпавших файлов даёт одну строку:

>>> dataset = load_dataset(
...     "/path/to/my-harbor-dataset",
...     data_files={"test": ["my-tasks-dir/*/task.toml", "my-tasks-dir/*/instruction.md"]},
... )

Столбцы

Каждая строка описывает одну задачу:

СтолбецТипОписание
namestring[task].name из task.toml (обычно org/name) или имя каталога задачи.
descriptionstring[task].description в task.toml.
instructionstringСодержимое instruction.md: что должен сделать агент.
keywordslist из string[task].keywords в task.toml.
schema_versionstringschema_version, объявленная в task.toml.
configdictВесь task.toml в виде объекта JSON: [task], [metadata], [verifier], [agent], [environment], [steps]…
metadatadictСвободная секция [metadata] в файле task.toml.
fileslist из stringВсе файлы задачи, с путями, относительными к каталогу задачи.
locationstringРасположение каталога задачи в наборе данных.
>>> dataset = load_dataset("harborframework/terminal-bench", split="test")
>>> dataset[0]["name"]
'terminal-bench/atrx-vep-crispr'
>>> dataset[0]["instruction"][:90]
'You are provided with a region of genomic DNA representing the human ATRX locus plus sequence'
>>> dataset[0]["config"]["task"]["authors"]
[{'name': 'ScaleAI', 'email': 'tbench@scale.com'}]
>>> dataset[0]["metadata"]["category"]
'Science'
>>> dataset[0]["config"]["environment"]
{'build_timeout_sec': 1800.0, 'cpus': 2, 'memory_mb': 4096, 'storage_mb': 10240, 'gpus': 0}
>>> dataset[0]["files"][:4]
['LICENSE.md', 'README.md', 'environment/Dockerfile', 'environment/data/CDS-information.txt']
>>> dataset[0]["location"]
'tasks/atrx-vep-crispr'

Весь task.toml доступен в config, поэтому ничего не теряется, когда задача использует поля, которые не вынесены в отдельные столбцы:

>>> dataset = dataset.map(lambda task: {"timeout_min": task["config"]["verifier"]["timeout_sec"] / 60})
>>> sorted(set(dataset["timeout_min"]))[:6]
[1.0, 2.0, 3.0, 4.0, 5.0, 7.0]

Фильтрация бенчмарка

Поскольку метаданные задачи загружаются в виде словаря, бенчмарк можно исследовать с помощью стандартных методов filter() и map():

>>> security_tasks = dataset.filter(lambda task: task["metadata"].get("category") == "Security")
>>> [task["name"] for task in security_tasks]
['terminal-bench/formal-crypto', 'terminal-bench/html-js-filter', 'terminal-bench/interleaved-vigenere', 'terminal-bench/shadow-relay', 'terminal-bench/uefi-bootkit']

Столбец files перечисляет всё, что входит в состав задачи, что удобно для изучения того, как задача проверяется:

>>> pytest_verifiers = dataset.filter(lambda task: any(f.startswith("tests/") and f.endswith(".py") for f in task["files"]))
>>> pytest_verifiers.num_rows
63

Чтение других файлов задачи

Загружаются только инструкция и конфигурация задачи в виде столбцов: файлы окружения, верификатора и решения перечислены в столбце files в виде путей, относительных к каталогу задачи. Соедините task_id и files, чтобы открыть любой из них с помощью fsspec:

>>> from huggingface_hub import hffs
>>> dataset_path = "hf://datasets/harborframework/terminal-bench"
>>> with hffs.open(f"{dataset_path}/tasks/cumulative-layout-shift/environment/Dockerfile", "r") as f:
...     print(f.read()[:20])
'# harbor-canary GUID

Конфигурация

HarborConfig принимает несколько аргументов в дополнение к стандартным для load_dataset:

  • strip_canary (по умолчанию True): удаляет начальные строки с комментарием «benchmark data canary» из инструкций, так же, как это делает Harbor при отправке их агенту. Установите False, чтобы сохранить исходное содержимое файла.
  • include_files (по умолчанию True): перечисляет все файлы каждой задачи в столбце files. Установите значение False, чтобы пропустить перечисление каталогов задач; это быстрее, если датасет находится на удалённой файловой системе или содержит тысячи файлов на задачу.

Задачи также можно загружать потоково, что позволяет избежать скачивания всего бенчмарка заранее:

>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench", streaming=True)
>>> for task in dataset["test"]:
...     print(task["name"])

См. также

  • Справочная документация по Harbor и HarborConfig.
  • Документация Harbor о том, как запускать задачи бенчмарка с агентами и верификаторами.
Update on GitHub