input— required; passed to therunnerexpected— optional; expected output (Contains, Compare, and similar)expected_trace/expectedTrace— optional; only for Trajectory. Trajectory config that describes the accepted tool scenarios- any other key — optional custom field; becomes a TEXT column with that exact title
Inline cases
Extra keys become sparse TEXT columns (empty when missing). Point scorers at the same title — for example
contains_scorer(source_column="topic", expected="math"). Names must not collide with reserved columns (input, expected, Output, Trace, expected_trace / expectedTrace, or legacy Input / Expected / Expected Trace) or with supporting column titles.
Use a dashboard Table
Pass a Table id. The SDK readsinput / expected / expected_trace (or expectedTrace in JS) plus other non-reserved TEXT columns from that sheet and writes results to a new experiment sheet. Legacy titles (Input, Expected, Expected Trace) still resolve.
sheet_id / sheetId picks a non-default source sheet. Omit it to use the Table’s default sheet.
Common mistakes
- Empty dataset or a case without
input - Passing a Table title instead of
table_id/tableId - Setting top-level
sheet_idonevaluate(...)— that targets the experiment sheet and is rejected - Custom field names that collide with reserved columns or supporting column titles

