LizzyDocs

Stage 02 · Data

Freeze a reproducible dataset version.

Combine captured calls or imports into a versioned training set. Connector credentials and raw uploads stay behind human-controlled UI handoffs.

Choose an ingest path

Captured calls

Filter traffic

Best when production examples already flow through Lizzy. Define filters, deduplication, and split rules.

Copilot can configure
Hosted data

Pull a connector

Bring rows from Hugging Face or Braintrust through a durable pull. Authentication stays human-only.

Human connects, copilot pulls
Local files

Upload JSONL

Use the upload UI for ground-truth metadata or private files. Raw bytes never enter model context.

Human-only handoff

Connectors: human setup, durable pull

  1. 1

    Ask the copilot to prepare a connector handoff

    It records the intended dataset, connector kind, repository or project, and returns the UI location.

  2. 2

    Add the credential yourself

    Complete setup in the connector UI. Credential fields are write-only and omitted from agent-safe schemas and responses.

  3. 3

    Resume and pull

    The copilot can call POST /v1/distill/connectors/{connector_id}/pull, retain the pull ID, and watch it to succeeded or failed.

GET/v1/distill/connector_pulls/{pull_id}

Inspect status, rows_pulled, the produced dataset_version, and a safe error object.

JSONL upload handoff

Each line is one JSON object. Use OpenAI-style messages plus optional metadata that your reward or audit needs. The UI reserves multipart URLs, uploads raw bytes directly, completes the upload, and shows import errors.

JSONLone object per line
{"messages":[{"role":"system","content":"<instruction>"},{"role":"user","content":"<prompt>"},{"role":"assistant","content":"<reference>"}],"metadata":{"source":"<source>","label":"<label>"}}

Freeze a dataset version

Training always targets an immutable version, never the mutable dataset definition. Creating a version is asynchronous; poll the returned version until ready or failed.

curlexample
curl -X POST "https://<your-lizzy-host>/v1/distill/datasets/<dataset_id>/versions" \
+  -H "Authorization: Bearer $LIZZY_API_TOKEN" \
+  -H "Content-Type: application/json" \
+  -d '{"note":"baseline after data review","split_config":{"train":0.8,"holdout":0.2,"seed":42}}'
Pythonexample
import os, requests

version = requests.post(
    "https://<your-lizzy-host>/v1/distill/datasets/<dataset_id>/versions",
    headers={"Authorization": f"Bearer {os.environ['LIZZY_API_TOKEN']}"},
    json={"note": "baseline after data review", "split_config": {"train": 0.8, "holdout": 0.2, "seed": 42}},
).json()
# Poll GET /v1/distill/dataset_versions/{version["id"]}
TypeScriptexample
const response = await fetch("https://<your-lizzy-host>/v1/distill/datasets/<dataset_id>/versions", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.LIZZY_API_TOKEN}`, "Content-Type": "application/json" },
  body: JSON.stringify({ note: "baseline after data review", split_config: { train: 0.8, holdout: 0.2, seed: 42 } }),
});
if (!response.ok) throw await response.json();
const version = await response.json();
// Poll GET /v1/distill/dataset_versions/{version.id}
Built for humans and copilots.

Every risky action has an explicit handoff, validation, or approval boundary.

Recovery guide