Check out the newest way to compare different models for a task/agent harness: AutoEvals

Datasets

Upload a Dataset

Import JSONL inference data, then turn it into eval or training datasets.

If you already have curated data from annotation pipelines, synthetic generation, or another platform, you can upload it as JSONL instead of building a dataset from captured traffic.

Uploads and datasets are separate objects in the Inference platform:

  • An upload is the imported JSONL file plus its validation and processing status.
  • A dataset is the stable collection you use for evals, training, and download.

You upload the file first, then create an eval or training dataset from that uploaded data once processing finishes.

How to upload

  1. Go to Datasets in the dashboard
  2. Click Upload Data
  3. Select your .jsonl file
  4. Give the upload a name and start the import

The upload appears in Datasets > Uploads, where you can track processing and review any validation errors.

inf dataset upload path/to/data.jsonl --name support-summaries

If you omit --name, the CLI uses the filename without the extension. By default the CLI waits for processing and prints the detected format plus the processed line count. Use --no-wait to return after the transfer completes.

The upload command does not ask whether the data is for evals or training. You choose eval vs training when you create a dataset from the completed upload.

After upload

  1. Wait for the upload to finish processing in Datasets > Uploads.
  2. Open the dataset creation flow and select the upload as your source.
  3. Choose whether the resulting dataset is eval or training.

Successful uploads become a reusable source in the same dataset creation flow you use for traffic-backed datasets.

Supported formats

Two JSONL formats are supported. See Dataset Formats for full schemas, required fields, and validation rules.

FormatStructureBest for
Source-backed{ request, response } per lineRound-tripping data captured from providers
Hugging Face{ messages } per lineStandard training/eval format, easy to create

The system auto-detects the format from the first valid line. Every row in the file must use the same format.

Tag uploaded rows with a task

Source-backed rows can populate a task on the dashboard. Set x-inference-task-id in each line's request.metadata — rows sharing a task ID are grouped under that task in your project's Tasks view, the same way live gateway traffic is grouped by the x-inference-task-id header.

{"request":{"model":"gpt-4","messages":[{"role":"user","content":"Hello"}],"metadata":{"x-inference-task-id":"support-summaries"}},"response":{"choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}]}}

Uploaded requests may also include images as standard OpenAI-style image_url content parts (base64 data: URLs or public HTTPS URLs) — see Dataset Formats for a full multimodal example.

  • There is no --task flag on inf dataset upload; the task ID lives in the data itself and must be on every line you want grouped.
  • Uploaded rows are timestamped at processing time, not with historical timestamps from your data — the task's time-series charts show the whole batch at upload time.

Validation behavior

  • Invalid rows are reported with line numbers in the upload status details.
  • Uploads can complete with some failed rows if at least one row imports successfully.
  • Mixed-format files are treated as a fatal error and fail the upload.
  • Source-backed rows must include a usable model value in the request.

Upload limits

LimitValue
Maximum file size10 GB
Maximum line count1,000,000

Next steps

On this page