Back to Docs

Fine-tuning

Cross-provider fine-tuning ledger. Pin training runs to immutable dataset snapshots for reproducibility; watch progress across OpenAI, Anthropic, Vertex, and more.

Dashboard: /dashboard/evals/fine-tune · REST:/api/v1/fine-tune/jobs

Phase 5 foundation — read-only today

The schema, RLS, dashboard, CLI, and read endpoints all ship today. Submit + cancel land in the follow-up sprint as we wire each vendor adapter (OpenAI, Anthropic, Vertex, Azure-OpenAI, Fireworks, Together). When that ships, jobs you submit show up in the existing ledger; no API contract churn.

Reproducible training data

Every job pins to a dataset_versions snapshot via dataset_version_id. Re-runs use the same case set even if the live dataset has been edited since. The case count, content hash, and snapshot description carry through to the job's audit trail.

Lifecycle

Jobs flow through a 7-state machine mirroring OpenAI's naming for familiarity:

status transitions
pending → validating → queued → running → succeeded
                                          → failed
                                          → cancelled

(any state) → cancelled  // operator-initiated cancel

The webhook handler is the authoritative writer for the vendor- driven transitions (validating → queued → running → succeeded/failed). Operators can transition any state to cancelled via the cancel endpoint (forthcoming).

CLI

evalguard fine-tune
# List jobs (newest first; filter by status or provider)
evalguard fine-tune list
evalguard fine-tune list --status running
evalguard fine-tune list --provider openai

# Inspect one job
evalguard fine-tune get <jobId>
evalguard fine-tune get <jobId> --json | jq .hyperparameters

REST

GET /api/v1/fine-tune/jobs
# Query params: status, provider, limit (max 200), offset
{
  "data": {
    "jobs": [
      {
        "id": "ff70…",
        "provider": "openai",
        "base_model": "gpt-4o-mini",
        "fine_tuned_model": "ft:gpt-4o-mini:org:abc:1A2B",
        "status": "succeeded",
        "case_count": 1200,
        "trained_tokens": 480000,
        "estimated_cost": 38.40,
        "dataset_version_id": "uuid…",
        "created_at": "2026-05-22T12:00:00Z",
        "finished_at": "2026-05-22T13:42:11Z"
      }
    ],
    "total": 1
  }
}

Authorization

  • SELECT — any org member can view jobs.
  • INSERT (submit) — admin+ only.
  • UPDATE (cancel, manual corrections) — admin+.
  • DELETE — owner only. Cancel via status=cancelled is the recommended path; DELETE drops the audit trail.