Datasets
Upload a CSV and map columns
Upload a CSV as a dataset and map its columns, then see what the content hash covers and how archive, delete and restore work.
A dataset is a set of test cases in a project, one row per case. Runs started in Evaluations → New run score its rows, and Add to dataset in Traces adds rows to it.
The Datasets page
The Datasets page lists each dataset with its type (single-turn, conversation or voice), row count, version and last update. The version is the first eight characters of the content hash.
New dataset has four starting points: Upload CSV, Import JSONL (Golden datasets), Empty dataset for rows added by hand, and From traces (Build a dataset from traces). Voice datasets are made in Playground → Voice (Voice datasets).
Upload a CSV
- 1
Choose the file
Pick Upload CSV and choose the file. It must be UTF-8 and comma-separated, with a header row. A leading byte-order mark is removed.
- 2
Map the columns
The app reads the header row and preselects both required columns: Input column from a header such as input, prompt, question or query, and Expected output column from one such as target, expected, answer or reference.
- 3
Name it and create it
The name defaults to the file name without
.csv. Click Create dataset, and the app opens the new dataset.
A column named output becomes the output column, and every other column is kept as extra data on the row. Above 50,000 rows or 50 MiB, the server answers 422 naming the limit and the actual value.
The dataset page
The tabs are Rows, Snapshots, Health, Runs and Auto-add, and Run evaluation in the header opens New run with the dataset selected. A run scores outputs, so New run will not use existing outputs while any row lacks one. It asks you to generate them or pick another dataset.
The content hash covers the input and expected output of the active rows, in order. Editing an output, or moving a row between draft, finalized and golden, never changes it. Adding, deleting, archiving or restoring a row, or editing an input or expected output, always does. Two runs are comparable only when their hashes match.
Archive, delete and restore
| Operation | Applies to | Effect |
|---|---|---|
| Archive rows | Selected rows | Status becomes archived: out of default reads, exports, the hash and snapshots. The dataset stays active. |
| Archive the dataset | The dataset | Hidden from lists and pickers, but still readable, editable, exportable and re-runnable. |
| Delete the dataset | The dataset | Soft delete: every dataset endpoint answers 404 and it leaves every list. Purged with its rows, snapshots and files when the 30-day restore window closes. |
Before archiving or deleting a dataset, the server checks what depends on it: runs, auto-add rules, review queues holding its rows and playground grids. If anything does, it answers 409 with the list unless the request adds ?force=true. Delete on the Datasets page asks you to type the name and never forces. Archiving, restoring and forced deletes are API-only.
Runs that used a deleted dataset keep their results and can still be compared with each other. They cannot be rerun or retried, and their Dataset field reads dataset deleted. Restore brings an archived or deleted dataset back within the 30-day window. Deleting the project purges its datasets immediately.