start fine tuning bakeoff
start_fine_tuning_bakeoffStart a bake-off to prove a fine-tuned model beats its base model on a held-out split via perplexity and optional judged win-rate, no deployment needed. Billable GPU work begins.
Instructions
Start a held-out bake-off that proves a succeeded supervised fine-tune against its base model (teacher-forced NLL/perplexity wins, optionally a judged win-rate) on an ephemeral GPU box — quality proof without deploying the model. POST /v1/fine_tuning/jobs/{id}/bakeoff (API-key scope: platform:write). SPENDS MONEY: this starts billable work on the workspace wallet. Returns: 202 {trigger_run_id} — the comparison is queued; poll GET /v1/fine_tuning/jobs/{id}/bakeoff for status and verdict. Notes: MONEY: metered GPU-box minutes (plus judge calls) bill to the wallet under the bakeoff:: ledger prefix; a wallet HOLD for the whole cost ceiling (max 3 hours × up to 2 GPUs at the reference GPU rate, with markup) is placed before starting — 402 ("…Top up and try again.") if the wallet cannot hold it; only metered minutes are actually billed and the hold is released at the end. Requires OWNER/ADMIN minting user (403). Rate limited per workspace: 20 starts per 60s → 429. 404 "Run not found". 400 for: a spec-draft job, a job not SUCCEEDED, no held-out split ("A comparison needs a held-out split the model didn't train on — this run has none."), a comparison already queued/running, comparison compute or orchestration not configured on the platform, a base model whose parameter count can't be parsed from its name, or a base model over 75B parameters. Invalid JSON body → 400. Feature-flag gated (404 when fineTuning is off). Scopes not enforced on this route today.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The fine-tuning job id (must be method "supervised", status SUCCEEDED, and have a validation/held-out split). | |
| judge_criterion_id | No | Optional id of a calibrated (aligned, request-unit) workspace criterion; adds a judged pass-rate comparison (base vs tuned, up to 100 generated answers per side) next to the objective NLL signal. Must be a string if present (400 otherwise). The body may be empty. |