Methods
What actually ran
The published SAE adapter is a 24-step rsLoRA on SmolLM2 135M, trained on CPU from synthetic worksheets. Larger methods are in the worker or the GPU adapters. They are not implied by that number.
Ran in the SAE showcase
Persona and seed synthetic data
The SAE and TheraVerse rows are expanded from a fixed seed list and a handful of writer personas. That keeps the synthetic set inspectable. A 135M model is not a trustworthy teacher model for this step.
Ge et al., Scaling Synthetic Data Creation with 1,000,000,000 Personas (2024)Ran in the SAE showcase
Self-Instruct and Evol-Instruct style variants
Each seed is rewritten into a missing-information variant and a concomitant-medication variant by deterministic templates, which is the Evol-Instruct idea without a teacher model in the loop. A teacher rewrite runs only if GRAE_LLM_API_KEY is set.
Wang et al., Self-Instruct (2022); Xu et al., WizardLM / Evol-Instruct (2023)Ran in the SAE showcase
N-gram decontamination
Train and test are checked for shared 8-word spans before a run is accepted. This is the practical test used since GPT-3, not a claim that no semantic overlap remains.
Brown et al., Language Models are Few-Shot Learners, section on contamination (2020)Ran in the SAE showcase
Rubric judge, with an optional LLM judge
Scores are computed by a fixed rubric: required headings, source facts, banned causality language, and refusal probes. An LLM-as-judge call is optional and is not what the published SAE numbers use, so the metric does not depend on a hidden model.
Zheng et al., Judging LLM-as-a-Judge with MT-Bench (2023)Ran in the SAE showcase
rsLoRA supervised fine-tune
Rank-stabilized LoRA is a one-line change in PEFT and is stable at the small ranks a CPU run can finish. The SAE adapter was trained this way.
Kalajdzievski, A Rank Stabilization Scaling Factor for Fine-Tuning with LoRA (2023)Ran in the SAE showcase
LoRA
The trained file is a low-rank adapter, not a full fine-tune. That is the artifact small enough to ship and to load beside the Apache-2.0 base.
Hu et al., LoRA: Low-Rank Adaptation of Large Language Models (2021)GPU path
DoRA
Weight-decomposed LoRA is in the worker as a flag. It costs more memory than rsLoRA, so the CPU showcase does not turn it on.
Liu et al., DoRA: Weight-Decomposed Low-Rank Adaptation (2024)GPU path
QLoRA
4-bit NF4 training needs a GPU and bitsandbytes. The CPU path trains LoRA in fp32 on a 135M model instead. GPU adapters emit a QLoRA config.
Dettmers et al., QLoRA (2023)In the worker, not in the published numbers
Preference step (DPO / ORPO / SimPO)
The worker can run a short DPO step on chosen versus rejected narratives. The published SAE run is the SFT adapter. Preference tuning is off unless you pass --dpo-steps, because a second 135M reference model is the expensive part on CPU.
Rafailov et al., DPO (2023); Hong et al., ORPO (2024); Meng et al., SimPO (2024)In the worker, not in the published numbers
Continued pre-training on domain text
The worker accepts --cpt-steps to run causal LM on the narrative text before SFT. The showcase skips it so the before/after comparison is the instruction adapter, not a mix of two stages.
Gururangan et al., Don't Stop Pretraining (2020)In the worker, not in the published numbers
Differentially private synthetic data
The cleaner records a clip on how many times any single seed is reused. That is not a formal epsilon. A DP synthetic pass (Private Evolution style) belongs with a GPU teacher and is not claimed for these numbers.
Lin et al., Differentially Private Synthetic Data via Foundation Model APIs (2023)Ran in the SAE showcase
Merge and GGUF export
The SAE bundle includes adapter.gguf, a real LoRA converted with llama.cpp (Q8_0 where the tensor shape allows, otherwise F16). It is the adapter, not a merged copy of the 135M base. Load it with --lora on the Apache-2.0 SmolLM2 GGUF.
Wortsman et al., Model Soups (2022), for the merging literature this export sits next to