Config schema
A config is one YAML with a pipeline block (recipe, name, seed, output_dir, device, stages) and one
section per concern. Every section rejects keys it does not know, so a typo is an error, not a silently ignored
setting. The tables below come straight from the Pydantic classes; nested keys are written with dots.
data_speech
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
teacher | Keyed | null | The model generators ask; null when the generator asks none (passthrough) | |
teacher.name | string | required | |
seeds | list[SeedSpec] | required | |
seeds.kind | string | required | What the seeds are: topic, persona, document, instruction, ...; generators read it |
seeds.values | list[string] | null | Inline seed texts | |
seeds.source | Keyed | null | A row source (local_jsonl, huggingface, ...) | |
seeds.source.name | string | required | |
seeds.field | string | null | With source: the column that holds the seed text | |
seeds.limit | integer | null | ||
prompts | PromptSettings | required | |
prompts.generator | string | required | Key of GENERATORS: passthrough, topic_questions, persona_task, document_qa |
prompts.per_seed | integer | 1 | Prompts to make from each seed |
prompts.params | object (extra keys allowed) | Generator parameters, e.g. skills for persona_task | |
prompts.constraints | list[string] | Verifiable constraints; one is appended to every prompt | |
prompts.max_tokens | integer | 512 | |
prompts.temperature | number | 1.0 | |
voice | VoiceSettings | required | |
voice.model | HubFile | required | A Piper voice (.onnx); its .onnx.json is taken from beside it |
voice.model.name | string | required | Hub repository ID, or a local file or directory |
voice.model.revision | string | null | 40-character commit; with file, for a Hub repository | |
voice.model.file | string | null | Path of the file inside the Hub repository | |
voice.samples | integer | 1 | Recordings per text; Piper's noise makes each one different |
voice.speakers | list[integer] | integer | null | Speakers of a multi-speaker voice, by id, or n for ids 0 to n-1; every text is read by each of them | |
voice.length_scale | number | null | Above 1 speaks slower; null: the voice's own | |
voice.noise_scale | number | null | null: the voice's own | |
voice.noise_w_scale | number | null | null: the voice's own | |
verify | SpeechVerifySettings | ||
verify.min_seconds | number | 0.5 | |
verify.max_seconds | number | 15.0 | Piper trains on short clips; Whisper hears 30 s at most |
verify.max_clipped | number | 0.001 | Share of samples at full scale |
verify.max_silent | number | 0.5 | Share of silent 20 ms frames |
verify.asr | AsrConfig | null | null skips the listening check | |
verify.asr.name | string | openai/whisper-base | Whisper model on the Hub |
verify.asr.revision | string | e37978b90ca9030d5170a5c07aadb050351a65bb | 40-character commit |
verify.asr.language | string | null | Language code (en, ko, ...); null lets Whisper detect it | |
verify.max_wer | number | 0.2 | Word error rate of the transcript against the text |
select | SpeechSelectSettings | ||
select.per_text | integer | null | 1 | Recordings kept per text, best heard first; null: all, for a wake word read by many speakers |
select.max_rows | integer | null | ||
licence | string | required | Terms of the voice, and so of every recording it makes; kept in the manifest |
data_synthetic
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
teacher | Keyed | required | |
teacher.name | string | required | |
seeds | list[SeedSpec] | required | |
seeds.kind | string | required | What the seeds are: topic, persona, document, instruction, ...; generators read it |
seeds.values | list[string] | null | Inline seed texts | |
seeds.source | Keyed | null | A row source (local_jsonl, huggingface, ...) | |
seeds.source.name | string | required | |
seeds.field | string | null | With source: the column that holds the seed text | |
seeds.limit | integer | null | ||
prompts | PromptSettings | required | |
prompts.generator | string | required | Key of GENERATORS: passthrough, topic_questions, persona_task, document_qa |
prompts.per_seed | integer | 1 | Prompts to make from each seed |
prompts.params | object (extra keys allowed) | Generator parameters, e.g. skills for persona_task | |
prompts.constraints | list[string] | Verifiable constraints; one is appended to every prompt | |
prompts.max_tokens | integer | 512 | |
prompts.temperature | number | 1.0 | |
evolve | EvolveSettings | null | ||
evolve.rounds | integer | 1 | |
evolve.operators | dict[str, number] | EVOLVERS keys and their draw weights | |
evolve.max_tokens | integer | 512 | |
evolve.temperature | number | 1.0 | |
evolve.judge_gain | boolean | False | Ask the teacher whether the evolved prompt adds information (Evol-Instruct rule 1) |
respond | RespondSettings | ||
respond.answers_per_question | integer | 1 | |
respond.system | string | null | ||
respond.max_tokens | integer | 1024 | |
respond.temperature | number | 0.7 | |
verify | VerifySettings | ||
verify.schema_recipe | string | null | A modeling recipe whose check every assembled row must pass | |
verify.reward | Keyed | null | A REWARDS function scoring the answer against the prompt's answer | |
verify.reward.name | string | required | |
verify.majority | last_number | exact | null | Keep answers that agree with the majority of a prompt's answers | |
verify.judge | JudgeSettings | null | ||
verify.judge.teacher | Keyed | null | Another model family than the generator; null: the generator | |
verify.judge.teacher.name | string | required | |
verify.judge.rubric | string | Rate how helpful, correct and complete the answer is for the request. | |
verify.judge.min_score | number | 6 | |
verify.judge.max_tokens | integer | 64 | |
verify.sorry_words | integer | 80 | An answer with 'sorry' and fewer words than this is a failed prompt (Evol-Instruct rule 2) |
select | SelectSettings | ||
select.assemble | sft | dpo | grpo | decision | sft | |
select.decision | DecisionQuestion | null | assemble: decision, or verify.schema_recipe: llm_decision_sft: the question every row asks | |
select.decision.name | string | route | The question's key in the row's questions |
select.decision.instructions | string | required | What the decision model is asked about the state |
select.decision.criteria | dict[str, string] | required | Option -> what it means; the labels are these options |
select.dedup | DedupSettings | ||
select.dedup.near | number | null | 0.75 | Share of word n-grams shared with a kept row that makes a duplicate; null: exact only |
select.dedup.ngram | integer | 5 | |
select.leak | LeakSettings | null | ||
select.leak.against | list[Keyed] | required | Row sources of the evaluation items the rows must not contain |
select.leak.against.name | string | required | |
select.leak.threshold | number | 0.5 | |
select.leak.ngram | integer | 8 | |
select.margin | number | 1.0 | dpo: the judge-score gap a chosen and rejected answer must have |
select.max_rows | integer | null | ||
budget | BudgetSettings | ||
budget.max_usd | number | null | Stop before a teacher call would exceed this spend | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] |
embedding_contrastive
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | BackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config | ||
method.temperature | number | 0.05 | |
method.query_instruction | string | null | Task description prepended to every query |
evaluation_benchmark
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
evaluation | EvaluationSettings | ||
evaluation.batch_size | integer | 8 | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
decoding | Decoding | ||
decoding.temperature | number | 0.0 | 0: greedy |
decoding.max_new_tokens | integer | 1024 | |
chat_template | boolean | False | Wrap prompts in the tokenizer's chat template (instruction-tuned models) |
thinking | boolean | null | With chat_template: pass enable_thinking to the template (Qwen3, Qwen3.5); true also splits answers at . null: the template's default | |
model | SourceModel | required | |
model.experiment | string | null | Experiment directory (output/ | |
model.checkpoint | string | validate | validate (passed validation), train (as trained), base (the weights the experiment started from), or a checkpoint directory |
model.name | string | null | Instead of an experiment: a Hugging Face model ID or a local directory | |
model.revision | string | null | 40-character commit of name; required unless it is a directory | |
model.architecture | string | null | With name: the model catalog entry (e.g. bi_encoder) for recipes that load the model themselves | |
benchmarks | Benchmarks | required | |
benchmarks.preset | string | null | One of ['korean', 'small_general']; tasks are added to it | |
benchmarks.tasks | list[Task] | ||
benchmarks.tasks.name | string | required | An lm-evaluation-harness task or group name |
benchmarks.tasks.num_fewshot | integer | null | null: the task's own default | |
benchmarks.tasks.limit | integer | null | Items per task; null: benchmarks.limit, then all | |
benchmarks.tasks.chat_template | boolean | null | Overrides chat_template for this task (multiple choice scored by likelihood often reads better without it); null: the config's | |
benchmarks.limit | integer | null | Items per task unless the task says otherwise; null: all (full runs take hours) |
evaluation_compare
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
evaluation | EvaluationSettings | ||
evaluation.batch_size | integer | 8 | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
decoding | Decoding | ||
decoding.temperature | number | 0.0 | 0: greedy |
decoding.max_new_tokens | integer | 1024 | |
chat_template | boolean | False | Wrap prompts in the tokenizer's chat template (instruction-tuned models) |
thinking | boolean | null | With chat_template: pass enable_thinking to the template (Qwen3, Qwen3.5); true also splits answers at . null: the template's default | |
runs | list[Run] | required | The checkpoints to compare; one of them checkpoint: base |
runs.experiment | string | null | Experiment directory (output/ | |
runs.checkpoint | string | validate | validate (passed validation), train (as trained), base (the weights the experiment started from), or a checkpoint directory |
runs.name | string | null | Instead of an experiment: a Hugging Face model ID or a local directory | |
runs.revision | string | null | 40-character commit of name; required unless it is a directory | |
runs.architecture | string | null | With name: the model catalog entry (e.g. bi_encoder) for recipes that load the model themselves | |
runs.label | string | required | |
benchmarks | Benchmarks | null | Public benchmarks every run is scored on | |
benchmarks.preset | string | null | One of ['korean', 'small_general']; tasks are added to it | |
benchmarks.tasks | list[Task] | ||
benchmarks.tasks.name | string | required | An lm-evaluation-harness task or group name |
benchmarks.tasks.num_fewshot | integer | null | null: the task's own default | |
benchmarks.tasks.limit | integer | null | Items per task; null: benchmarks.limit, then all | |
benchmarks.tasks.chat_template | boolean | null | Overrides chat_template for this task (multiple choice scored by likelihood often reads better without it); null: the config's | |
benchmarks.limit | integer | null | Items per task unless the task says otherwise; null: all (full runs take hours) | |
rows | EvaluationData | null | Rows every run is scored on with its recipe's metrics | |
rows.sources | list[Keyed] | required | Rows in the format of the experiment's recipe |
rows.sources.name | string | required | |
decision | DecisionRows | null | Decision rows (or JevBench) every run answers, with think settings | |
decision.think | off | on | both | both | Measure without reasoning (off), with it (on), or both |
decision.max_think | integer | null | Reasoning tokens per question; null: the experiment's method.max_think | |
decision.data | EvaluationData | required | |
decision.data.sources | list[Keyed] | required | Rows in the format of the experiment's recipe |
decision.data.sources.name | string | required | |
embedding | EmbeddingSettings | null | MTEB tasks every run is scored on | |
embedding.tasks | list[string] | required | MTEB task names, e.g. STSBenchmark, NFCorpus, Banking77Classification |
embedding.max_length | integer | null | Tokens per text; null: the experiment's training.max_length | |
axes | dict[str, list[string]] | Chart axis -> entries averaged, each 0..1: a benchmark name, rows:<metric>, decision:<mode>:<metric> or embedding:<task> |
evaluation_custom
evaluation_custom: one model, any rows, the metrics of the recipe that trained it.
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
evaluation | EvaluationSettings | ||
evaluation.batch_size | integer | 8 | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
model | SourceModel | required | |
model.experiment | string | null | Experiment directory (output/ | |
model.checkpoint | string | validate | validate (passed validation), train (as trained), base (the weights the experiment started from), or a checkpoint directory |
model.name | string | null | Instead of an experiment: a Hugging Face model ID or a local directory | |
model.revision | string | null | 40-character commit of name; required unless it is a directory | |
model.architecture | string | null | With name: the model catalog entry (e.g. bi_encoder) for recipes that load the model themselves | |
data | EvaluationData | required | |
data.sources | list[Keyed] | required | Rows in the format of the experiment's recipe |
data.sources.name | string | required |
evaluation_decision
| Key | Type | Default | Description |
|---|---|---|---|
think | off | on | both | both | Measure without reasoning (off), with it (on), or both |
max_think | integer | null | Reasoning tokens per question; null: the experiment's method.max_think | |
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
evaluation | EvaluationSettings | ||
evaluation.batch_size | integer | 8 | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
model | SourceModel | required | |
model.experiment | string | null | Experiment directory (output/ | |
model.checkpoint | string | validate | validate (passed validation), train (as trained), base (the weights the experiment started from), or a checkpoint directory |
model.name | string | null | Instead of an experiment: a Hugging Face model ID or a local directory | |
model.revision | string | null | 40-character commit of name; required unless it is a directory | |
model.architecture | string | null | With name: the model catalog entry (e.g. bi_encoder) for recipes that load the model themselves | |
data | EvaluationData | required | |
data.sources | list[Keyed] | required | Rows in the format of the experiment's recipe |
data.sources.name | string | required |
evaluation_embedding
| Key | Type | Default | Description |
|---|---|---|---|
tasks | list[string] | required | MTEB task names, e.g. STSBenchmark, NFCorpus, Banking77Classification |
max_length | integer | null | Tokens per text; null: the experiment's training.max_length | |
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
evaluation | EvaluationSettings | ||
evaluation.batch_size | integer | 8 | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
model | SourceModel | required | |
model.experiment | string | null | Experiment directory (output/ | |
model.checkpoint | string | validate | validate (passed validation), train (as trained), base (the weights the experiment started from), or a checkpoint directory |
model.name | string | null | Instead of an experiment: a Hugging Face model ID or a local directory | |
model.revision | string | null | 40-character commit of name; required unless it is a directory | |
model.architecture | string | null | With name: the model catalog entry (e.g. bi_encoder) for recipes that load the model themselves |
evaluation_wakeword
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
evaluation | EvaluationSettings | ||
evaluation.batch_size | integer | 8 | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
model | WakewordModel | required | |
model.experiment | string | null | A wakeword experiment directory (output/ | |
model.checkpoint | string | validate | validate or train (a stage of the experiment), or a bundle directory: wakeword.json beside the detector and the two feature models |
data | WakewordEvaluationData | required | |
data.positive | list[Keyed] | required | Recordings of the phrase (audio, optional text), ideally by voices the detector never trained on |
data.positive.name | string | required | |
data.negative | list[Keyed] | Short recordings that must not wake it (near misses, commands); the report counts them per text | |
data.negative.name | string | required | |
data.ambient | list[string] | Directories of WAVs that never say the phrase (speech, TV, music), hours of them: false accepts per hour | |
data.noise | list[string] | Directories of noise WAVs mixed under the recordings in the noisy conditions; empty: Gaussian noise | |
conditions | list[number | null] | Speech-to-noise ratios in dB every recording is tested at; null: clean | |
threshold | number | 0.5 | The operating point the headline numbers are read at |
refractory | number | 1.0 | Seconds after a firing in which another one is not counted |
targets | list[number] | False accepts per hour at which the miss rate is read off the threshold sweep |
llm_decision_cispo
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | LLMBackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
model.template | object (extra keys allowed) | Extra chat-template arguments, e.g. enable_thinking | |
model.head | string | null | Decision head on top of the backbone; decision recipes only | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config | ||
method.head_lr | number | 0.0001 | Learning rate of the head, which starts untrained |
method.calibration | number | 0.1 | Share of training records kept for fitting the temperature |
method.max_think | integer | 256 | Reasoning tokens per question before the model must decide |
method.eval_think | boolean | True | |
method.group_size | integer | 4 | Reasoning chains sampled per question |
method.temperature | number | 1.0 | |
method.rollout_weight | number | 0.5 | Weight of the head loss after reasoning |
method.anchor_weight | number | 0.5 | Weight of the head loss without reasoning |
method.length_hinge | integer | null | Chains longer than this many tokens lose reward | |
method.length_penalty_cap | number | 0.1 | |
method.iterations | integer | 1 | Optimizer steps per sampled group of chains |
method.clip | number | 0.2 | The importance weight of a reused chain token is capped at 1 + clip |
llm_decision_sft
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | LLMBackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
model.template | object (extra keys allowed) | Extra chat-template arguments, e.g. enable_thinking | |
model.head | string | null | Decision head on top of the backbone; decision recipes only | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config | ||
method.head_lr | number | 0.0001 | Learning rate of the head, which starts untrained |
method.calibration | number | 0.1 | Share of training records kept for fitting the temperature |
method.max_think | integer | 256 | Reasoning tokens per question before the model must decide |
method.eval_think | boolean | False | Also measure accuracy when the model reasons first |
method.think_fraction | number | 0.0 | Share of questions given a reasoning chain |
llm_dpo
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | LLMBackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
model.template | object (extra keys allowed) | Extra chat-template arguments, e.g. enable_thinking | |
model.head | string | null | Decision head on top of the backbone; decision recipes only | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config | ||
method.beta | number | 0.1 | How strongly the policy may move away from the base model |
llm_grpo
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | LLMBackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
model.template | object (extra keys allowed) | Extra chat-template arguments, e.g. enable_thinking | |
model.head | string | null | Decision head on top of the backbone; decision recipes only | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config | ||
method.group_size | integer | 4 | Completions sampled per prompt |
method.max_new_tokens | integer | 32 | |
method.temperature | number | 1.0 | |
method.reward | Keyed | ||
method.reward.name | string | required | |
method.iterations | integer | 1 | Optimizer steps per sampled group |
method.clip | number | 0.2 | The policy ratio is held within 1 +- clip when a group is reused |
method.beta | number | 0.0 | Weight of the KL penalty towards the base model; needs training.adapter |
llm_instruction
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | LLMBackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
model.template | object (extra keys allowed) | Extra chat-template arguments, e.g. enable_thinking | |
model.head | string | null | Decision head on top of the backbone; decision recipes only | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config | ||
method.system | string | null | System prompt put in front of every instruction |
llm_sft
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | TuningValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.batch_size | integer | 8 | |
model | LLMBackboneConfig | required | |
model.architecture | string | required | Key of the family's model catalog |
model.name | string | required | Hugging Face model ID, or a local directory |
model.revision | string | null | 40-character commit; required unless name is a directory | |
model.init | string | null | Start from this checkpoint directory of an earlier experiment | |
model.template | object (extra keys allowed) | Extra chat-template arguments, e.g. enable_thinking | |
model.head | string | null | Decision head on top of the backbone; decision recipes only | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | TrainingConfig | ||
training.epochs | integer | 1 | |
training.lr | number | 1e-05 | |
training.weight_decay | number | 0.0 | |
training.batch_size | integer | 8 | |
training.accumulation | integer | 1 | Batches per optimizer step |
training.warmup_ratio | number | 0.05 | |
training.max_grad_norm | number | 1.0 | |
training.max_length | integer | 1024 | Tokens per sequence |
training.overflow | error | skip | error | Rows over max_length: stop before training, or leave them out |
training.max_steps | integer | null | Pilot: stop after this many optimizer steps | |
training.resume_every | integer | null | 200 | Steps between resume snapshots; null disables them |
training.eval_every | integer | null | Steps between evaluations on the held-out rows while training; null: only validate at the end | |
training.eval_rows | integer | null | How many held-out rows the in-training evaluation uses; null: all of them | |
training.adapter | AdapterConfig | null | null trains every weight; set it to train LoRA | |
training.adapter.name | lora | lora | |
training.adapter.r | integer | 16 | Rank of the update matrices |
training.adapter.alpha | integer | 32 | Update scale; the effective factor is alpha / r |
training.adapter.dropout | number | 0.0 | |
training.adapter.targets | list[string] | null | Layer names to adapt; default: the architecture's | |
method | Config |
tts_piper
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | PiperValidationConfig | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.asr | AsrConfig | ||
validation.asr.name | string | openai/whisper-base | Whisper model on the Hub |
validation.asr.revision | string | e37978b90ca9030d5170a5c07aadb050351a65bb | 40-character commit |
validation.asr.language | string | null | Language code (en, ko, ...); null lets Whisper detect it | |
validation.rows | integer | null | 50 | Held-out rows to synthesize and transcribe; null: all of them |
validation.phrases | dict[str, string] | Fixed replies the agent plays (name -> text), e.g. web_search: Searching Reference.; the best-heard take is kept as phrases/ | |
validation.phrase_takes | integer | 3 | Takes of each phrase; Piper's unseeded noise makes each one different, and Whisper picks the best |
model | VoiceModelConfig | required | |
model.quality | medium | high | medium | Piper's model size; init must have the same |
model.espeak_voice | string | required | espeak-ng voice that turns text into phonemes, e.g. en-us, en-gb-x-rp |
model.sample_rate | integer | 22050 | |
model.init | HubFile | required | Piper checkpoint (.ckpt) whose weights training starts from |
model.init.name | string | required | Hub repository ID, or a local file or directory |
model.init.revision | string | null | 40-character commit; with file, for a Hub repository | |
model.init.file | string | null | Path of the file inside the Hub repository | |
data | DataConfig | required | |
data.sources | list[Keyed] | required | |
data.sources.name | string | required | |
data.validation | number | 0.1 | Share of rows held out for the validate stage |
training | PiperTrainingConfig | ||
training.epochs | integer | 100 | Epochs over the training rows from the starting weights |
training.batch_size | integer | 16 | |
training.args | dict[str, string | integer | number | boolean] | More piper.train fit options, e.g. model.learning_rate: 1.0e-4 |
wakeword
| Key | Type | Default | Description |
|---|---|---|---|
recipe | string | required | Which pipeline builds this model; see llmclick recipes |
name | string | required | |
seed | integer | 20260920 | |
output_dir | string | ./output | |
device | cuda | mps | cpu | null | ||
stages | list[string] | null | Stages to run, in the recipe's order; default all | |
tracker | TrackerConfig | ||
tracker.enabled | boolean | False | |
tracker.project | string | llmclick | |
tracker.entity | string | null | ||
tracker.tags | list[string] | ||
validation | WakewordValidation | ||
validation.min | dict[str, number] | metric -> lowest accepted value | |
validation.max | dict[str, number] | metric -> highest accepted value | |
validation.threshold | number | 0.5 | Score at or above which the detector fires |
validation.snr | number | null | 20.0 | Speech-to-noise ratio of the test streams, dB; null: clean |
phrase | string | required | What wakes the agent, e.g. 'Jarvis, wake up'; names the model file |
data | WakewordData | required | |
data.positive | list[Keyed] | required | Row sources of recordings of the phrase (audio, optional text) |
data.positive.name | string | required | |
data.negative | list[Keyed] | required | Row sources of anything else: near misses, commands, speech |
data.negative.name | string | required | |
data.background | list[string] | Directories of noise WAVs mixed under every window; empty: Gaussian noise | |
data.validation | number | 0.2 | Share of each class held out for the streaming test |
augment | AugmentConfig | ||
augment.rounds | integer | 4 | Windows cut from every training recording, each with its own noise |
augment.snr | list[any] | [5.0, 25.0] | Range of speech-to-noise ratio, dB |
augment.gain | list[any] | [-12.0, 0.0] | Range of gain on the whole window, dB |
augment.tail | number | 0.3 | Most seconds of noise after a recording's end in its window |
augment.followed | integer | 2 | Negative windows per phrase recording where other speech follows the phrase, so the detector fires as the phrase ends and not again |
augment.noise | integer | 200 | Windows of noise alone, as more negatives |
training | WakewordTraining | ||
training.steps | integer | 3000 | |
training.batch_size | integer | 256 | Half positive windows, half negative |
training.learning_rate | number | 0.001 | |
training.layer_dim | integer | 32 | Width of openWakeWord's DNN head |
training.blocks | integer | 1 | Hidden blocks after the first layer |
training.negative_weight | number | 1.0 | Loss weight of a negative window against a positive one; above 1 trades unused recall for fewer false accepts |
training.schedule | constant | cosine | constant | Learning rate over the steps; cosine decays it to zero, so the detector does not depend on where training stops |