Create a dataset from logs
Curate logged traffic into a managed training dataset.
Curation is automatic: errored, truncated (finish_reason=length), empty, and duplicate exchanges are dropped, and every drop is reported by reason. With holdout_pct, a second disjoint {name}-eval dataset is created — no example appears in both, so it’s a valid eval set rather than the model’s own homework. Pass its id as sample_filters.dataset_id when queueing an eval.
Requires an owner/admin key.
Authorizations
Your workspace API key, e.g. sk_sovereign_..., sent as Authorization: Bearer <key>.
Body
80"support-bot-v1"
Also create a second, DISJOINT "{name}-eval" dataset holding this percentage of examples. No example appears in both — that's what makes it valid as an eval source.
0 <= x <= 5010
Which logged exchanges to curate. Omit for all of them. Keys: model, tag (the task label sent as X-Omnia-Tag; a dataset scoped to one task beats one built from mixed traffic), segment (an auto-detected traffic segment, a segment value from GET /v1/logs), finish_reason, cache_hit (boolean), start and end (unix seconds).
Which models feed the build. The same task (tag) usually spans every model you route it to; this chooses among them.
The quality ladder (default cleaned). In every mode, exchanges a human graded FAIL never enter a dataset.
Response
The created dataset(s) and the curation summary.
Present when holdout_pct > 0.
Curation accounting: total, kept, dropped {unparseable, errored, truncated, empty, duplicate, human_failed}, and the multi-turn folding counts. Every drop is counted by reason, so a dataset is never silently thinner than you think.
What the quality gate actually did: mode, criterion_id and criterion_name (judge mode), the judge's kappa at build time, human_pass_kept, ungraded_excluded (graded mode), judged / judge_passed / judge_failed / judge_unparsed and judge_spend_usd (judge mode). A dataset never claims more than what happened.