Upload a CSV and map columns

    Get a set of cases into a project as a dataset: the CSV requirements, column mapping, the content hash, and how archive, delete and restore behave.

    After this page a dataset exists in the project with a content hash, is selectable in Evaluations → New run, and is offered as a target by Add to dataset in Traces. You also know what archive and delete do to the runs that used it.

    Datasets is a plan feature (datasets). With it locked, the nav item opens the upgrade panel — see Plan, usage and locks.

    The Datasets page

    A table of name · type (text · conversation · voice) · rows · last run · pass rate · hash · updated, with search and a type filter, a row menu (Open · Run evaluation · Export · Snapshot · Delete) and New dataset. New dataset offers Upload CSV, Import JSONL (golden sets in the Gemini or OpenAI shape — see Golden datasets), From traces, Empty dataset (add rows by hand) and Voice dataset (locked when voice evaluation is not on the plan).

    Upload a CSV

    1

    Drop the file

    A header row, UTF-8 (a leading byte-order mark is stripped), at most 50 MB and 50,000 rows; the delimiter is auto-detected. Over either limit the server answers 422 naming the limit and the actual value. The browser previews the header and first rows before anything is uploaded.

    2

    Map columns

    Input column (auto-detected from headers such as question, prompt, input) and Target column (optional; expected, answer, reference). A column literally named output is used as the output column. Every other column is kept as extra data on the row.

    3

    Name and create

    Name defaults to the file name. On success the browser opens the new dataset.

    The dataset page

    Header: rows · columns · hash · created · used by n runs · golden count. Tabs: Rows · Snapshots · Runs · Health. Toolbar: Add row · Import · Generate outputs · Run evaluation · Export · Snapshot. A banner says No outputs yet — generate them or import an output column until the output column is filled, because a run scores outputs. The hash is shown from day one: it is computed over input and target of the non-archived rows in order, so editing an output or flipping a status never changes it and adding or editing input or target always does — which is what decides whether two runs are comparable.

    Archive, delete and restore

    OperationWhat movesEffect
    Archive rowsselected rowsstatus archived: out of reads, exports, the hash and snapshots; the dataset stays active
    Archive the datasetthe datasethidden from lists and pickers; still readable, editable, exportable and re-runnable
    Delete the datasetthe datasetsoft delete: 404 on every dataset endpoint and gone from every list; purged for real once a 30-day restore window closes, together with its rows, snapshots and files

    Both archive and delete first check what depends on the dataset — runs, snapshots pinned by runs, auto-add rules, review queues holding its rows, playground grids — and refuse with the list unless you force. Runs that already used a deleted dataset keep their results, can still be compared among themselves, and lose only Open dataset and Re-run. Restore brings an archived or deleted dataset back within the window. Deleting the project purges its datasets immediately.

    EvalKit is built by Syntropylabs. Published on PyPI and npm.