Skip to main content

What LLMClick is

LLMClick builds custom models from a config file. You write one YAML that names a base model, the rows to train on and a few settings, run one command, and get a trained checkpoint that has passed a validation gate. The same YAML run twice builds nothing the second time, and a run that crashed halfway continues where it stopped.

Three channels share one runner:

  • Modeling turns a config into a trained, validated model. Recipes cover supervised fine-tuning, instruction tuning, preference tuning (DPO), reinforcement with rewards (GRPO), decision models that answer typed questions, and contrastive training of embedding models. Full fine-tuning or LoRA, on a GPU or on Apple silicon.
  • Evaluation scores what Modeling built: on your own rows, on public benchmarks, against the base model, with the overlap between the evaluation items and the training rows reported next to every score.
  • Data makes the rows: synthetic conversations, preferences and problems from a teacher model (an API or a local model), with the filtering and leak removal the published recipes use.

The mental model is small. A recipe is a pipeline of stages; each stage's output directory is named by a fingerprint of its inputs, so stages are cached and shared between experiments; an experiment is one config and links to the stage directories it used. Everything else (the CLI, the HTTP API with background jobs, the tracker) drives that runner.

Who it is for: people who need a small, specific model (0.6B to 2B parameters) tuned on their data and want reproducibility without writing training loops. If you already have a training script you like, LLMClick's value is the fingerprinted pipeline, the validation gate and the evaluation channel around it.

The table below lists the recipes and the models each one accepts.

Documentation: https://ash-hun.github.io/LLMClick/ (generated from this README, the channel READMEs and the code; see website/README.md).

Config-driven custom model building. One YAML describes one custom model; pipeline.recipe picks the recipe that builds it and pipeline.stages picks the steps to run. Every recipe runs on the same pipeline runner, which skips what is already built, shows progress, and never hands on a trained model that has not passed validation.

FamilyRecipe (pipeline.recipe)TrainsModel catalog (model.architecture)
LLMllm_sftconversations, loss on every assistant turntransformer (Qwen3-0.6B, 1.7B), hybrid (Qwen3.5-0.8B, 2B)
LLMllm_instructioninstruction/input/output recordssame
LLMllm_dpochosen/rejected preference pairssame
LLMllm_grpoprompts scored by a reward functionsame
LLMllm_decision_sftdecision questions: a head scores the options (Jev, jeff, Jeeves stage 1)same, plus model.head: readout or pointer
LLMllm_decision_cispothe same questions with reasoning before the decision, by reinforcement (Jeeves stage 2)same
Embeddingembedding_contrastivequery/positive/negative triples (InfoNCE)bi_encoder (Qwen3-Embedding-0.6B)
TTStts_piperrecordings and their texts: a Piper (VITS) voice fine-tuned from a Piper checkpoint, exported to ONNXmodel.quality: medium, high (Piper's sizes)
Wake wordwakewordrecordings of the agent's name ("Jarvis") and of everything else: an openWakeWord detector, exported to ONNXopenWakeWord's dnn head on its frozen speech features
Evaluationevaluation_customnothing: scores a checkpoint of any experiment above on any rows, with that recipe's metricsthe experiment's
Evaluationevaluation_benchmarknothing: scores a checkpoint on public benchmarks (lm-evaluation-harness), one cached stage per benchmarkthe experiment's (LLM)
Evaluationevaluation_comparenothing: several checkpoints (the base model among them) on the same benchmarks and rows; table, deltas with intervals, polygon chartthe experiments'
Evaluationevaluation_decisionnothing: a decision checkpoint on Jev rows or the JevBench tiers, without and with reasoning; accuracy, NLL, ECE, per tier, latencythe experiment's (decision)
Evaluationevaluation_embeddingnothing: an embedding checkpoint on MTEB tasks (mteb), one cached stage per taskthe experiment's (embedding)
Evaluationevaluation_wakewordnothing: a wake word detector on recordings and hours of audio it never heard; miss rate per noise condition, false accepts per hour, the threshold sweepthe experiment's (wake word)
Datadata_syntheticnothing: rows for the recipes above from seeds through a teacher model (seeds, prompts, evolve, respond, verify, select)teachers: anthropic, openai, ollama, local
Datadata_speechnothing: a Piper training set from seeds: texts (a teacher, or the seeds as they are) read by a Piper voice, checked by Whispervoice: any Piper .onnx, one speaker or many

The decision recipes follow the Jev request format. The readout head and one-pass training follow jeff; the pointer head, reasoning chains and CISPO follow Jeeves. Both are reimplemented on this framework's training loop, so their released checkpoints do not load here.

Source: README.md. This page is generated; edit the source and run npm run sync.