Understanding Datasets

The columns, rows, and cells a dataset is built from, and who owns it

What a dataset is made of

A dataset is what you run prompts, evals, and experiments against. It owns two collections, columns and rows, plus a few fields on the dataset itself.

Columns, rows, and cells

A column defines one attribute every row carries. Whether its values are static or dynamic, who or what fills them in, is covered in Static & Dynamic Columns. A row is one example. Where a row crosses a column sits a cell: the stored value for that column, on that row.

Take a two-column dataset with columns input and model_response. Both rows get a cell in each column: four cells total, all belonging to the same dataset. Add a third row and both columns grow a new cell; add a third column and both rows do too, which is what keeps the grid rectangular no matter how many of its columns are dynamic.

flowchart TD
accTitle: The dataset object model
accDescr: A dataset owns columns and rows, and a cell sits at every intersection of one column and one row.
D["Dataset"] --> C1["Column · input"]
D --> C2["Column · model_response"]
D --> R1["Row 1"]
D --> R2["Row 2"]
C1 --> X11["Cell · Row 1 × input"]
R1 --> X11
C1 --> X21["Cell · Row 2 × input"]
R2 --> X21
C2 --> X12["Cell · Row 1 × model_response"]
R1 --> X12
C2 --> X22["Cell · Row 2 × model_response"]
R2 --> X22

Row and column order

Row order isn’t insertion order. Every row carries its own row-level order, an explicit integer that fixes where it sits top to bottom. Column layout works the same way one level up: the dataset carries a dataset-level column_order array that fixes the left-to-right order of columns, and it’s pruned automatically when a column is deleted.

How cell values are stored

A cell’s value is always stored as text, whatever the column’s data type. A JSON column’s value is JSON-stringified before it’s stored, and a media column, an image or an audio file, holds a URL string rather than the file itself.

Ownership and scoping

A dataset always belongs to exactly one organization; there’s no such thing as a dataset with no owning org. A workspace is optional: a dataset can sit inside one workspace for scoping, or none at all.

model_type fixes what kind of data the dataset is built for: generative text by default, or image, audio, video, and structured types such as classification and ranking.

Why it matters

  • You can resort rows for review without disturbing anything else in the dataset; order is separate from when a row was created or which cells it holds
  • Deleting a column cleans up its position in the layout automatically, so nothing is left pointing at a column that no longer exists
  • Anything that reads a cell back, a prompt template, an eval, an export, gets a string and has to parse or fetch it for JSON and media columns
  • Access to a dataset follows organization membership first; the optional workspace narrows that further

Keep exploring

Was this page helpful?

Questions & Discussion