Config file
config.yaml controls the pipeline through five sections: base, tuning, evaluation,
synthgen and trace_processing. Each one covers a different stage.
You don’t need most of it to start. base.task, base.student_model_name and
base.teacher_model_name are enough for a first run, and every other field has a default. Each
stage page introduces the section it cares about at the point where it matters.
File format
Section titled “File format”The config is YAML, in a file named config.yaml. config.yml is accepted too. The CLI reads it
out of your data directory, and the REST API stages it as config_yaml.
base:
task: question-answering
student_model_name: Llama-3.2-3B-Instruct
Overrides sent inline over the REST API carry this same structure in the request body. See Using the REST API.
Configuration structure
Section titled “Configuration structure”base:
# General parameters (task is required)
task: classification
tuning:
# Fine-tuning parameters
num_train_epochs: 4
evaluation:
# Evaluation parameters
num_few_shot_examples: 1
synthgen:
# Synthetic data generation parameters
generation_target: 10000
trace_processing:
# Trace processing parameters
relabel: true
Base configuration
Section titled “Base configuration”Parameters for the task as a whole.
| Parameter | Type | Default | Description |
|---|---|---|---|
task |
string |
required | Type of NLP task to be solved. See supported task types below. |
student_model_name |
string |
Llama-3.2-1B-Instruct |
Base model to use for the student model. This is the model we fine-tune for your use-case. Must be one of the supported student models. |
teacher_model_name |
string |
openai.gpt-oss-120b |
Teacher model used to generate synthetic data and from which we distil knowledge. Must be one of the supported teacher models. |
random_seed |
integer | null |
123 |
Random seed used for reproducible random sampling. |
llm_num_parallel_requests |
integer |
4 |
Maximum number of LLM requests to send in parallel across the teacher, synthgen, and judge pipelines. Set to 1 to disable parallelism. |
visual_task |
boolean |
false |
Inputs carry images. QA tasks only, and every model involved must be vision-capable. |
Supported task types
Section titled “Supported task types”| Task | Value | Description |
|---|---|---|
| Question answering | question-answering |
Extract or generate answers from text based on queries |
| Classification | classification |
Assign text to categories from a fixed set |
| Tool calling | tool-calling-closed-book |
Select and invoke functions based on user requests |
| Multi-turn tool calling | multi-turn-tool-calling-closed-book |
Handle multi-step conversations with function calls |
| Open book QA (RAG) | question-answering-open-book |
Answer questions using provided context passages |
| Closed book QA | question-answering-closed-book |
Answer questions using knowledge learned during training |
Supported models
Section titled “Supported models”The catalogue of student and teacher models, how to choose between them, and the per-model
compatibility rules are all on Supported models. Only values
from that catalogue work for student_model_name and teacher_model_name.
Tuning configuration
Section titled “Tuning configuration”Parameters controlling how the student model is fine-tuned. See Model training.
| Parameter | Type | Default | Description |
|---|---|---|---|
learning_rate |
float |
5e-5 |
The initial learning rate for AdamW optimizer. |
learning_rate_scheduler |
string |
linear |
The scheduler type to use. Options: cosine, linear, constant. |
weight_decay |
float |
0.0 |
Weight decay applied to all layers except bias and LayerNorm weights in AdamW optimizer. |
warmup_ratio |
float |
0.05 |
Ratio of total training steps used for linear warmup from 0 to learning_rate. |
bf16 |
boolean |
true |
Whether to use bf16 16-bit (mixed) precision training instead of 32-bit training. |
use_lora |
boolean |
true |
Whether to use LoRA for student training. |
lora_r |
integer |
64 |
LoRA attention dimension (rank). Only used if use_lora is true. |
lora_alpha_multiplier |
integer |
1 |
Alpha parameter for LoRA scaling is lora_r * lora_alpha_multiplier. Only used if use_lora is true. |
per_device_train_batch_size |
integer |
1 |
Batch size per GPU/device for training. |
per_device_eval_batch_size |
integer |
1 |
Batch size per GPU/device for evaluation. |
num_train_epochs |
integer |
4 |
Total number of training epochs. |
train_eval_split |
float |
0.2 |
Fraction of training data used for evaluation. Must be between 0 and 1 (exclusive). |
gradient_accumulation_steps |
integer |
1 |
Number of update steps to accumulate gradients before performing a backward/update pass. Effectively multiplies the batch size by this factor without increasing memory usage. |
num_few_shot_examples_student |
integer |
0 |
Number of few-shot examples when running student evaluation and tuning. If above 0, at least one example per class is used for classification tasks. |
memory_optimized_training |
boolean |
false |
Enable activation offloading and gradient checkpointing to reduce GPU memory usage at the cost of significantly slower training. Only enable this if training runs out of GPU memory. |
use_qlora |
boolean |
false |
Load the base model in 4-bit NF4 (QLoRA) during fine-tuning, then attach LoRA adapters in higher precision. Reduces base-model VRAM by roughly 3x at the cost of slightly slower training. Only takes effect when use_lora is true. Requires bitsandbytes (Linux only). |
enable_trainer_internal_eval |
boolean |
false |
Run per-epoch validation during training. Final metrics come from the post-training suite either way. |
RLVR (Reinforcement Learning with Verifiable Rewards)
Section titled “RLVR (Reinforcement Learning with Verifiable Rewards)”RLVR is an optional reinforcement learning stage that runs after SFT fine-tuning, using reward
signals from an LLM judge to improve the model further. Set rlvr_dataset_size above 0 to enable
it.
| Parameter | Type | Default | Description |
|---|---|---|---|
rlvr_dataset_size |
float |
0.0 |
Proportion of the dataset to use for the RLVR split. Must be between 0.0 and 1.0. Default 0.0 means RLVR is disabled. |
rlvr_llm_as_a_judge_model_name |
string |
inherits base.teacher_model_name |
Model used to power the LLM-as-a-judge for RLVR reward signals. |
rlvr_per_device_batch_size |
integer |
6 |
Batch size per GPU/device for RLVR training and evaluation. Must be a multiple of rlvr_num_generations. |
rlvr_num_generations |
integer |
6 |
Number of generations per prompt during RLVR training. |
rlvr_num_train_epochs |
integer |
1 |
Number of training epochs for RLVR fine-tuning. |
Evaluation configuration
Section titled “Evaluation configuration”Parameters used in teacher evaluation. See Teacher evaluation.
| Parameter | Type | Default | Description |
|---|---|---|---|
num_few_shot_examples |
integer |
1 |
Number of few-shot examples when running teacher evaluation. If above 0, at least one example per class is used for classification tasks. |
llm_as_a_judge_model_name |
string |
inherits base.teacher_model_name |
Model used to power the LLM-as-a-judge evaluation. |
expand_tool_calling_turns |
boolean |
true |
If true, each line in multi-turn tool calling test files is expanded into multiple evaluation lines, each ending at a tool call. |
Synthetic generation configuration
Section titled “Synthetic generation configuration”Parameters controlling synthetic data generation. See Synthetic data generation.
| Parameter | Type | Default | Description |
|---|---|---|---|
generation_target |
integer |
10000 |
Target number of synthetic examples to generate. For Closed-Book QA, this is calculated as len(unstructured_data) * generation_per_unstructured_context. |
generation_in_single_call |
integer |
4 |
Number of examples to generate per teacher/LLM invocation. |
generation_iteration_size |
integer |
128 |
Batch size for the generate-validate cycle. |
generation_per_unstructured_context |
integer | null |
null |
Examples to generate per unstructured context. Only used with question-answering-closed-book task. Overwrites generation_target when set. |
num_positive_exemplars_per_generation |
integer |
2 |
Number of in-context examples for the class/task being generated. |
num_negative_exemplars_per_generation |
integer |
2 |
Number of in-context examples for classes not being generated. Only used for classification tasks. |
num_unlabelled_exemplars_per_generation |
integer |
1 |
Number of unlabelled examples provided during each teacher invocation. |
clean_training_targets |
boolean |
false |
Final teacher pass that minimally repairs corrupted or truncated training targets. Multi-turn data is expanded into per-turn examples first. |
validation_max_total_length |
integer |
30000 |
Maximum total length (input + output) of generated examples in characters. |
validation_similarity_threshold |
float |
0.95 |
Similarity threshold for deduplication. Generated data with similarity above this threshold to seed data are removed. |
teacher_temperature |
float |
0.7 |
Temperature for teacher output. Controls balance between predictability and creativity. Must be between 0.0 and 1.0. |
teacher_max_tokens |
integer |
32000 |
Maximum number of tokens in the generated response. Kept well below typical model context limits so the reserved output budget doesn’t crowd out large prompts, multi-image ones in particular. |
match_generated_distribution_to_seed |
boolean |
false |
Match generated data class distribution to seed data. Only used for classification tasks. |
num_distractor_context_blocks |
integer |
0 |
Number of distractor context blocks per example. Setting above zero enables RAFT training. |
output_is_json |
boolean |
false |
Only generate synthetic data with valid JSON outputs. Only relevant for QA tasks. |
basic_mutators_to_use |
list[string] |
["complexity"] |
List of basic mutators to use for data generation. Supported options: complexity, length, specificity. |
mutation_topics |
list[list[string]] | list[string] |
[] |
Selection of topics to sample from to guide the generation process. |
Trace processing configuration
Section titled “Trace processing configuration”Parameters for trace processing, which turns production traces into training and test data. See Trace processing.
| Parameter | Type | Default | Description |
|---|---|---|---|
relabel |
boolean |
true |
If true, use a committee of models to relabel trace examples. If false, use the original labels from traces. |
relevance_filtering |
boolean |
false |
If true, score each trace with an LLM and drop those below the relevance / coherence thresholds. If false, relevance filtering is skipped entirely and every seed trace flows straight to the next step. |
relevance_filtering_batch_size |
integer |
32 |
Number of examples scored per batch during relevance filtering. |
min_relevance_score |
integer |
4 |
Minimum relevance score (1-5) for a trace to pass relevance filtering. |
min_coherence_score |
integer |
3 |
Minimum coherence score (1-5) for a trace to pass coherence filtering. Lower values allow more corrupted traces through for committee repair. |
num_traces_as_training_base |
integer |
200 |
Number of traces to use as the seed for generating training examples. Unused traces beyond this count are used as unstructured data. |
num_traces_as_testing_base |
integer |
200 |
Number of traces to use as the seed for generating testing examples. Unused traces beyond this count are used as unstructured data. Ignored if a test set is provided. |
evaluate_original_model |
boolean |
true |
Score the model that produced the traces on the generated test split. This is the baseline your student is compared against, and this stage’s judge cost. |
committee_max_input_length |
integer |
250000 |
Characters. Traces whose projected committee-aggregator input exceeds this skip the committee and get a direct teacher edit. |
min_generated_examples |
integer |
1 |
Minimum number of examples that trace processing must produce. Raises an error if fewer are generated, to prevent training with too few examples. |
max_unstructured |
integer |
10000 |
Maximum number of unstructured data examples to include. |
observation_format |
string |
openai_messages |
Format of trace observations in traces.jsonl. Options: openai_messages (objects with a messages array of chat completion messages), openai_messages_with_images (OpenAI messages that can include images), unstructured_with_openai_messages (unstructured data with OpenAI messages). |
remove_system_prompt_from_traces |
boolean |
true |
If true, strip leading system messages from traces (before unstructured export) and from processed examples. Defaults to true because the system prompt is typically captured by the job description, and keeping it in the conversation breaks the single-turn [user, assistant] shape expected at the training boundary. |
compress_job_description |
boolean |
false |
If true, compress the job description using the teacher model before relevance filtering. Useful when the task description is very long and overwhelms the filtering LLM. |
teacher_model_name |
string |
inherits base.teacher_model_name |
Teacher model used for relevance filtering and picking the best relabelled answer from the committee. |
relabelling_committee_models |
list[string] |
[] |
If the list is non-empty, models in the list are used to produce candidate relabels. Each model generates an output for every example and the trace processing teacher aggregates them into the final relabel. Only used when relabel is true. |
Example configuration
Section titled “Example configuration”Minimal configuration
Section titled “Minimal configuration”base:
task: question-answering
student_model_name: Llama-3.2-3B-Instruct
teacher_model_name: openai.gpt-oss-120b
Full configuration example
Section titled “Full configuration example”base:
task: question-answering-open-book
student_model_name: Qwen3-1.7B
teacher_model_name: openai.gpt-oss-120b
random_seed: 42
tuning:
learning_rate: 1e-4
learning_rate_scheduler: cosine
use_lora: true
lora_r: 32
num_train_epochs: 3
train_eval_split: 0.15
evaluation:
num_few_shot_examples: 2
synthgen:
generation_target: 5000
generation_in_single_call: 8
teacher_temperature: 0.6
validation_similarity_threshold: 0.9
trace_processing:
relabel: true
num_traces_as_training_base: 5000
num_traces_as_testing_base: 100
Model-specific notes
Section titled “Model-specific notes”Which models support tool calling, and which teachers need a constrained temperature, are on Task compatibility.
Parameters that have no effect
Section titled “Parameters that have no effect”These four carry defaults and appear in every config the platform returns, but they do nothing:
evaluation.batch_sizesynthgen.validation_max_answer_lengthsynthgen.parallel_llm_callstuning.awq_quantize_tuned_model
Leave them untouched in a config you override, and don’t add them to one you author.
An override replaces this file whole rather than merging into it, so read the parent’s config back before you edit one field. See How the platform works.