JSONL is the eval lingua franca
Every eval framework worth using consumes JSONL — newline-delimited JSON, one record per line. It is grep-able, diff-friendly, streamable, and has zero schema overhead. Use it.
Schema discipline
Even though JSONL is schemaless, your records should not be. Pin a schema, validate it on write, and version it when it changes.
- Required: id, input, tags.
- Optional: reference, acceptable_alternatives, expected, metadata, source.
- Auditing: created_at, created_by, version.
Where to store
| Where | When |
|---|---|
| Repo (datasets/*.jsonl) | < 5MB total. Reviewed via PR. Easiest. |
| S3 / R2 / GCS | Larger. Versioned with object lifecycle. |
| Hugging Face Hub | Public datasets you want to share. |
| Braintrust / DeepEval cloud | UI annotation + versioning + eval runs in one place. |
| Argilla / Label Studio | Self-hosted UI for active annotation. |
Maintenance rituals
Quarterly review — sample 50 random cases. Are they still representative of production?
Stale flag — when production sampling reveals an emerging input cluster not in the dataset, add it within the same week. Slow refresh kills the eval suite.
Retirement — cases whose behavior is no longer relevant get an archived: true flag rather than deletion. You want the historical trail.