Datasets documentation

Muat tugas evaluasi agen

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

Muat tugas evaluasi agen

Dataset Harbor adalah kumpulan tasks yang digunakan untuk mengevaluasi agen AI: setiap task memberikan agen sebuah instruksi, lingkungan sandboxed untuk bekerja, dan verifier yang menilai kinerjanya.

Berbeda dengan dataset tabular, dataset Harbor bukanlah file dengan satu baris per contoh: setiap tugas adalah sebuah direktori. Builder harbor membaca repositori semacam itu dan menghasilkan satu baris per tugas, sehingga sebuah benchmark dapat dijelajahi, difilter, dan dibagikan seperti dataset lainnya:

>>> 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
    })
})

Memuat dataset Harbor hanya membaca tugas: tidak pernah menjalankan agen, membangun image, atau mengeksekusi verifier, dan tidak memerlukan Harbor untuk diinstal. Gunakan pustaka Harbor untuk benar-benar menjalankan tugas.

Konfigurasi tugas Harbor adalah file TOML. Python 3.11 dan versi lebih baru membacanya dengan pustaka standar (tomllib); pada Python 3.10, Anda perlu menginstal parser TOML sebagai dependensi tambahan. Lihat panduan instalasi untuk mempelajari cara menginstalnya.

Struktur repositori

Direktori tugas diidentifikasi oleh dua file, task.toml dan instruction.md, dan biasanya juga berisi definisi lingkungan, verifier, dan solusi oracle:

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/
        └── ...

Sebuah direktori dikenali sebagai dataset Harbor begitu salah satu sub-direktornya, se dalam apa pun, merupakan direktori tugas (sebuah file task.toml dan file instruction.md berdampingan): tugas-tugas ditemukan secara otomatis, tanpa perlu mencantumkan file apa pun.

Muat tugas

Karena dataset Harbor terdiri dari direktori, bukan file data, dataset dimuat berdasarkan path β€” tanpa argumen 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")

Menyampaikan data_files secara eksplisit juga didukung, selama pola mencakup file task.toml dan instruction.md β€” satu pasangan file yang cocok menghasilkan satu baris:

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

Kolom

Setiap baris menggambarkan satu tugas:

KolomTipeDeskripsi
namestring[task].name dari task.toml (biasanya org/name), atau nama direktori tugas.
descriptionstring[task].description dari task.toml.
instructionstringIsi dari instruction.md: apa yang harus dilakukan oleh agen.
keywordslist dari string[task].keywords dari task.toml.
schema_versionstringschema_version yang dideklarasikan oleh task.toml.
configdictSeluruh task.toml, sebagai objek JSON: [task], [metadata], [verifier], [agent], [environment], [steps]…
metadatadictBagian [metadata] bebas format dari task.toml.
fileslist dari stringSemua file tugas, dengan path relatif terhadap direktori tugas.
locationstringLokasi direktori tugas dalam dataset.
>>> 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'

Seluruh task.toml tersedia di config, sehingga tidak ada yang hilang ketika sebuah tugas menggunakan field yang tidak dipromosikan ke kolomnya sendiri:

>>> 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 sebuah benchmark

Karena metadata tugas dimuat sebagai kamus, sebuah benchmark dapat dijelajahi dengan metode filter() dan map() yang biasa:

>>> 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']

Kolom files mencantumkan semua yang disertakan oleh tugas, yang berguna untuk melihat bagaimana sebuah tugas diverifikasi:

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

Baca file-file lain dari tugas

Hanya instruksi dan konfigurasi tugas yang dimuat sebagai kolom: file lingkungan, verifier, dan solusinya tercantum dalam kolom files, sebagai path relatif terhadap direktori tugas. Gabungkan task_id dan files untuk membuka salah satunya dengan 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

Konfigurasi

HarborConfig menerima beberapa argumen di samping argumen load_dataset yang biasa:

  • strip_canary (default True): hapus baris komentar β€œbenchmark data canary” di awal instruksi, dengan cara yang sama seperti yang dilakukan Harbor saat mengirimkannya ke agen. Atur menjadi False untuk mempertahankan isi file asli.
  • include_files (default True): daftar semua file dari setiap tugas di kolom files. Atur menjadi False untuk melewati daftar direktori tugas, yang lebih cepat ketika dataset berada pada sistem file jarak jauh atau memiliki ribuan file per tugas.

Tugas juga dapat di-streaming, yang menghindari pengunduhan seluruh benchmark di awal:

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

Lihat juga

  • Dokumentasi referensi untuk Harbor dan HarborConfig.
  • Dokumentasi Harbor untuk menjalankan tugas-tugas benchmark dengan agen dan verifier.
Update on GitHub