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;
orderis 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
Questions & Discussion