Choose an ingest path
Filter traffic
Best when production examples already flow through Lizzy. Define filters, deduplication, and split rules.
Copilot can configurePull a connector
Bring rows from Hugging Face or Braintrust through a durable pull. Authentication stays human-only.
Human connects, copilot pullsUpload JSONL
Use the upload UI for ground-truth metadata or private files. Raw bytes never enter model context.
Human-only handoffConnectors: human setup, durable pull
- 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
Add the credential yourself
Complete setup in the connector UI. Credential fields are write-only and omitted from agent-safe schemas and responses.
- 3
Resume and pull
The copilot can call
POST /v1/distill/connectors/{connector_id}/pull, retain the pull ID, and watch it tosucceededorfailed.
/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.
{"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.
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}}'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"]}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}