| name | setup-data |
| description | Supply the benchmark test data and write the data: section of benchmark.yaml. Stage 3b of the second-layer workflow. Handles local files, format adaptation, and synthetic generation. |
Setup Data Skill
Supplies the benchmark examples and writes the data: section of benchmark.yaml.
This is Stage 3b — can be run before or after configure-model.
Three Paths
Ask the user which situation applies:
Path 1 — Plug and run (user has a ready file)
They have a CSV or JSONL with the right columns.
Required columns:
id — unique identifier (or auto-generated if missing)
text — input to the AI (or image_path for image tasks)
expected — ground truth / correct output
Validate: check that the file exists and has these columns. If something is missing, give a clear error:
"Your file is missing the 'expected' column. This should contain the correct output for each example."
Path 2 — Adapt format (user has data but in wrong shape)
They have data but column names don't match.
Steps:
- Ask what columns their file has
- Map their columns to the required names:
{their_column → required_name}
- Write a conversion script or guide them to rename
- Ask for the path to the reformatted file
- Validate the result
Path 3 — Synthesize (no data)
They have no data — invoke synthesize-data.
Hard rule for image tasks: if task.input.type is image or document, block this path:
"I can generate expected outputs but not the images themselves. You need real images. Let me help you format them using Path 1 or 2."
Image Tasks (Path 1/2)
For image tasks, the dataset needs image_path pointing to real image files. Guide the user to:
- Organize images in a folder (e.g.,
.data/my-benchmark/images/)
- Create a JSONL where each row has
{"id": "1", "image_path": "images/doc1.jpg", "expected": {...}}
- Place it in
.data/my-benchmark/train.jsonl
Output: data: section
data:
source: local
path: .data/my-benchmark/train.jsonl
data:
source: huggingface
dataset: org/dataset-name
split: test
data:
source: generate
count: 30
seed_description: "Realistic Argentine invoices with varying vendors and amounts"
Writing benchmark.yaml
Read the existing benchmark spec (e.g., benchmarks/my-benchmark.yaml). Update or add only the data: key. Leave all other sections unchanged.
After writing, run benchy validate to confirm all four sections are present and valid:
benchy validate --benchmark <path-to-spec>
Next Step
After writing the data: section:
- If
data.source: generate, tell the user to run synthesize-data to generate the examples.
- If both
target: and data: are complete, tell the user they're ready to run run-benchmark.