Skip to content

Overview

Everything the platform does starts from a seed dataset. The default way to get one is to send us your production traffic: an inference endpoint goes in front of the model you run today and records what it serves. If you can’t route traffic through us, a file of production logs works too, and with no LLM in production you prepare a small labelled dataset by hand.

 can you send us your production traffic?
                     │
         yes ────────┴───────── no
         │                        │
         │              do you have its logs?
         │               yes             no
         ▼                │               │
INFERENCE ENDPOINT        ▼               ▼
fronts your model,   your trace  a labelled dataset
records the traffic     file     you prepare by hand
         │                │               │
         └───────┬────────┘               │
                 ▼                        │
         trace processing                 │
         turns them into a                │
           seed dataset                   │
                 │                        │
                 └───────────┬────────────┘
                             ▼
                       SEED DATASET
                             │
                             ▼
                    teacher evaluation      can the teacher solve this at all?
                             │
                             ▼
                 synthetic data generation  the teacher writes the training data
                             │
                             ▼
                      model training        the student learns the task
                             │
                             ▼
                        deployment ───────► behind a new inference endpoint,
                                            which records again: back to the top

From teacher evaluation onward the paths are the same, with one addition for traces: the original production model’s score becomes a baseline your trained student can be measured against. The endpoint path also closes the loop. The student goes behind a new endpoint with the production model as its fallback, that endpoint records the traffic it serves, and the next iteration starts from those records.

Stage What it does Roughly how long
Task selection Pick the task type, which sets the shape of your data -
Collect traces with an endpoint Records your production traffic as traces as long as your traffic takes
Endpoint records to trace inputs Converts the records into a trace file -
Trace processing Turns raw logs into a seed dataset up to 45 min
Seed dataset Prepares a seed dataset from labelled examples -
Teacher evaluation Feasibility gate: can the teacher do it? up to 30 min
Synthetic data generation The teacher writes the training set up to 90 min
Model training Fine-tunes and evaluates the student up to 90 min
Deployment Serves the model up to 40 min
Serving behind the endpoint Puts the student in front of the traffic, and starts the next round -

Task selection comes first, since the task type determines the shape of everything you prepare afterwards. Then you take the entry point that fits, the inference endpoint unless you can’t send us traffic, and from teacher evaluation onward every build follows the same path.

Every entry point needs the same two files, config.yaml and job_description.json. Their pages cover what goes in them for that path.

Run teacher evaluation before you spend anything

Section titled “Run teacher evaluation before you spend anything”

Synthetic data generation and model training are the two stages that cost real money. Each is credit-gated and takes up to 90 minutes. Teacher evaluation costs one credit, takes minutes, and tells you whether the task is solvable at all: if the teacher can’t do it, the student won’t learn it either.

Read your balance with distil credits-balance against your whole plan, not the next command. A generation run with no training credit left spends a credit on data you then can’t train on.

config.yaml says which task type you’re training for, which student model you’re training, and which teacher is doing the teaching. Three fields are enough to start:

base:
  task: classification              # see Task selection
  student_model_name: Qwen3-0.6B    # the small model you're training
  teacher_model_name: openai.gpt-oss-120b  # the large model that teaches it

Everything else has a default. Each stage page introduces the config section it cares about at the point where it matters: teacher evaluation introduces evaluation, generation introduces synthgen, training introduces tuning. The complete table is Config file.

Pick the models from Supported models, and note that tool-calling tasks restrict the choice.