->dataset(...) in Pest, or return it from a class-based evaluation’s dataset() method.
JSONL — the preferred format
One JSON object per line, streamed lazily (large files never load fully into memory):evals/support.jsonl
Malformed lines fail loudly with their line number — no silent row-dropping.
CSV
evals/support.csv
prompt and expected columns by default (both configurable via Dataset::fromCsv($path, inputColumn: ..., expectedColumn: ...)); other columns become meta. CSV exists so non-developers can own datasets in a spreadsheet.
Arrays and Eloquent
Inline rows
From your database
Production conversations
The differentiated one — build the dataset from conversations your agent actually had, stored by the Laravel AI SDK’s conversation feature:Replay real traffic
$row->expected() — ideal for judging new prompts against real production answers. The standalone Dataset::fromConversations(SupportBot::class) form adds ->latest(), ->take(n), and ->where(...) refinement.