Open-weight model
Ministral-3-14B-lil-logbook
by Thestarfarer thestarfarer/Ministral-3-14B-lil-logbook
Ministral-3-14B-lil-logbook is an open-weight model from Thestarfarer, released under Apache License 2.0. Its published files total 208.5 GB. It draws 139 downloads a month.
Seven LoRA adapters trained on the same dataset, one variable changed at a time: the three original runs below, plus a four-point learning-rate ladder under lr-sweep/. F16/Q80 GGUFs for the original three.
Model Card
By Thestarfarer, published under apache-2.0, revision 1406c6b25c52.
Seven LoRA adapters trained on the same dataset, one variable changed at a time: the three original runs below, plus a four-point learning-rate ladder under lr-sweep/. F16/Q80 GGUFs for the original three. The original three runs were evaluated on loss curves and spot generations only; the ladder adds an out-of-domain loss axis and a generation-level composition probe (sections below). Multi-turn dialogue packed to 512-token samples — 13,667 samples, 6.16M tokens total. Turns are delimited by headers — short per-character abbreviations, not names. Unattributed narration is folded into the speaker's turn: The pack was built in two phase-shifted passes — the second pass offsets every chunk…
Read Thestarfarer's full model card
Ministral-3-14B lil — hyperparameter runs
Seven LoRA adapters trained on the same dataset, one variable changed at a
time: the three original runs below, plus a four-point learning-rate ladder
under lr-sweep/. F16/Q8_0 GGUFs for the original three.
The original three runs were evaluated on loss curves and spot generations only; the ladder adds an out-of-domain loss axis and a generation-level composition probe (sections below).
Dataset
Multi-turn dialogue packed to 512-token samples — 13,667 samples,
6.16M tokens total. Turns are delimited by
# <code> headers — short per-character abbreviations, not names. Unattributed
narration is folded into the speaker's turn:
# m
Okay.
This is as far as I come.
# s
We come to a stop in front of a tree positioned in the middle of three spotlights.
It's not a particularly interesting tree or anything like that, so I'm a little confused as to why it's been so carefully illuminated.
What is this?
# m
A tree, idiot.
# s
No, like...what is this?
The pack was built in two phase-shifted passes — the second pass offsets every chunk boundary by 256 tokens, so the corpus appears twice with different windowing and exact-duplicate chunks removed. Experimental idea for cheap augmentation on small corpora; its actual effect is not isolated or evaluated in this repo.
Runs
Shared config: rsLoRA r512 / α512, dropout 0, targets q,k,v,o,gate,up,down,
batch 16 (no accumulation), 838 steps (one pass), constant LR after warmup,
BF16 base + FP32 AdamW, seed 42, eval on 256 held-out samples every 25 steps.
| run | path | init | LR | warmup | max_grad_norm | final eval |
|---|---|---|---|---|---|---|
v3-lil |
/ |
continued from writer-sft-rp-v3 | 7.5e-6 | 30 | 10.0 | 1.530 |
base-lil |
/base-lil/ |
fresh adapter on base | 5e-6 | 35 | 10.0 | 1.582 |
base-lil-clip1 |
/base-lil-clip1/ |
fresh adapter on base | 5e-6 | 35 | 1.0 | 1.583 |
Comparison
Init barely matters — according to metrics. base-lil matched v3-lil's
eval curve point-for-point for the first 250 steps and finished 0.05 behind at
33% lower LR — the 186M-token RP adapter it continues from bought approximately
nothing on this corpus by loss. Loss can't tell the whole story here: when the
two models miss, they might miss differently.
Gradient clipping at 1.0 changed nothing. base-lil-clip1 clipped on 100% of
steps (raw grad norms mean 14.9, max 36) and still landed within 0.001 of the
unclipped control. AdamW divides the first moment by the root second moment, so a
rescale applied to every gradient approximately cancels out of the update — clipping only
matters when it fires intermittently.
LR ladder (lr-sweep/)
The question: how low can LR go while the base model still learns this corpus —
smaller weight modification for relatively the same result, because every unit
of fit is paid for in general-capability damage. Fresh adapters on base, same
recipe as base-lil-clip1 (max_grad_norm 1.0, justified above), plus an
eval before step 0 (the untrained baseline all deltas are measured from)
and a second eval set: 256 held-out forum-RP samples from the
v3
corpus, line-truncated to 512 ctx — out-of-domain prose the training never
shows, scored by the same eval machinery. In-domain fit and out-of-domain
damage, side by side:
| LR | in-domain eval | OOD prose eval | gained | prose lost | gained/lost |
|---|---|---|---|---|---|
| — (untrained base) | 2.421 | 2.655 | — | — | — |
r512-lr1e-7 |
2.015 | 2.759 | 0.405 | +0.104 | 3.91 |
r512-lr2e-7 |
1.970 | 2.811 | 0.451 | +0.156 | 2.89 |
r512-lr5e-7 |
1.898 | 2.871 | 0.523 | +0.216 | 2.42 |
r512-lr2e-6 |
1.729 | 2.977 | 0.692 | +0.322 | 2.15 |
5e-6 (= base-lil-clip1) |
1.583 | 3.067 | 0.838 | +0.412 | 2.04 |
No cliff down to 1e-7, and the exchange rate improves monotonically as LR drops. A 50× LR cut keeps 48% of the learning for 25% of the damage. Forgetting here is distribution shift, not training per se: nothing in a 100%-narrow stream defends the out-of-domain directions, so damage scales with total movement — and lower LR simply moves less.
Composition probe
Loss can't answer the question that matters for an RP adapter: do the learned
personas compose with content the corpus never contained? Probe: 32 scenes
placing the corpus's recurring speakers (by their # code headers) into
mundane/technical situations foreign to the corpus — broken spreadsheets,
router channels, tax forms, bed-leveling a 3D printer — each ending on a
character header, each embedding a concrete technical fact the continuation can
get right or wrong. 5 rerolls × 6 checkpoints (base, the four ladder runs,
base-lil-clip1), scored 0–2 on voice (unmistakably that speaker), coherence
(engages the scenario's content correctly), format (clean header structure,
no degeneration) by an LLM-judge panel.
Sampler first, because it dominated round one. The sampler recommended for
v3 (temp 0.5, min_p 0.1, rep 1.03) is a loop incubator on these base-derived
checkpoints: 30–65% of completions collapsed into verbatim loops or ...
header volleys, at every LR. At temp 0.8, min_p 0.05, rep 1.1 the collapse
rate drops to ≤1.2% everywhere. Use the latter with these adapters.
Scoring was only trusted blinded. Per-checkpoint judging (one judge instance per model) swung good-rates by ±8pp from judge strictness alone, so the contested rungs were re-scored as a pooled, shuffled, label-stripped set with each judge seeing a mix of all three. Blinded good-rate (voice+coherence+format ≥ 5/6), t0.8 sampler, n=160 per rung:
lr5e-7 |
lr1e-7 |
lr2e-7 |
|
|---|---|---|---|
| good-rate | 54% | 50% | 43% |
| mean score (0–6) | 4.53 | 4.38 | 4.28 |
Differences are ≤2σ at this n. Read: 5e-7 is the best point estimate; 1e-7 matches it within noise at half the prose damage. Bare base scores 7% — it cannot hold the header format at all, leaking pretraining documents mid-scene, so some adapter is load-bearing for the format itself. The universal bottleneck at every LR is coherence (~1.0/2): completions open on-task, then drift back into the corpus's relationship register within a few turns. That is the same distribution-shift mechanism as the prose-loss column, observed at generation level — and the motivation for the replay-mixing item below.
Apostrophe pathology
Above 5e-7 a contraction-corruption artifact appears, LR-dependent: 0 corrupted
contractions at ≤5e-7, 14 at 2e-6, 97 at 5e-6, counted across 1,920 probe
completions. Shape: the model emits a contraction stem then neither apostrophe
form — don + corpus-boosted junk (speaker-name fragments, the corpus's
stutter idiom) where 't should be.
Mechanism: the source corpus's own typography runs 10:1 curly (’) to ASCII
(') apostrophes, and the tokenizer makes the two forms competing single
tokens at the same slot ([' don'] + ['’t'|'\'t']). High-LR training suppresses
the ASCII suffix (the curly share of generated apostrophes climbs 25% → 67% up
the ladder), while an ASCII-styled prompt pushes the copy direction the other
way. Usually one side wins; occasionally the conflict flattens the slot and
whatever else the adapter boosted leaks through. The cleanest microscope in
this repo on what the prose-loss column physically is. Fix for a dataset v2:
normalize apostrophes to one form at build time — token counts are unchanged
and the conflict never starts.
GGUFs
/gguf/ — F16 and Q8_0 for each of the original three runs, merged into the
base. No GGUFs for the ladder adapters yet.
| file | size |
|---|---|
Ministral-3-14B-v3-lil-{F16,Q8_0}.gguf |
27.0 / 14.4 GB |
Ministral-3-14B-base-lil-{F16,Q8_0}.gguf |
27.0 / 14.4 GB |
Ministral-3-14B-base-clip1-{F16,Q8_0}.gguf |
27.0 / 14.4 GB |
Tests — to do
- ~~LR-range sweep, 5e-7 to 1e-5~~ — done, see the ladder.
- LR tail: 5e-8 / 2e-8 — does the exchange rate keep improving once almost nothing is learned?
- Rank axis: the ladder held r512 fixed; rank is the second dimension of the grid.
- Replay mixing: 5–10% forum RP in the training stream, aimed at the coherence drift — attacks the distribution shift directly instead of hiding it with LR.
- Dataset v2: apostrophe normalization at build time.
Identity and Version
- Repository
- thestarfarer/Ministral-3-14B-lil-logbook
- Publisher
- Thestarfarer
- Task
- Not stated by the source
- Modality
- Other
- Library
- peft
- Parameters
- Not stated by the source
- Languages
- sft
- Revision
- 1406c6b25c5293843a7a3140cc9445018c78b183
- First published
- 2026-08-06
- Last updated
- 2026-10-23
Files and Weights
103 files, 208.5 GB in total. The weights are 25 files totalling 208.2 GB in bin, gguf, safetensors.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| adapter_model.safetensors | Weights | 9.0 GB | 3e9a3d795bc7 |
| base-lil-clip1/adapter_model.safetensors | Weights | 7.8 GB | 707ea5130187 |
| base-lil-clip1/training_args.bin | Weights | 5.8 KB | 746820e23ce8 |
| base-lil/adapter_model.safetensors | Weights | 7.8 GB | d93204838f5b |
| base-lil/training_args.bin | Weights | 5.8 KB | cee9da9230d6 |
| gguf/Ministral-3-14B-base-clip1-F16.gguf | Weights | 27.0 GB | 1440c42d4c05 |
| gguf/Ministral-3-14B-base-clip1-Q8_0.gguf | Weights | 14.4 GB | 2c16b32eba23 |
| gguf/Ministral-3-14B-base-lil-F16.gguf | Weights | 27.0 GB | 4d8e30592925 |
| gguf/Ministral-3-14B-base-lil-Q8_0.gguf | Weights | 14.4 GB | 3615278000d1 |
| gguf/Ministral-3-14B-v3-lil-F16.gguf | Weights | 27.0 GB | 17272882446d |
| gguf/Ministral-3-14B-v3-lil-Q8_0.gguf | Weights | 14.4 GB | 41c8a60b8b3c |
| lr-sweep/r1024-lr5e-7/adapter_model.safetensors | Weights | 15.6 GB | 0fb8b058d8e7 |
| lr-sweep/r128-lr5e-6/adapter_model.safetensors | Weights | 2.0 GB | e27c842f1a04 |
| lr-sweep/r128-lr5e-7/adapter_model.safetensors | Weights | 2.0 GB | f16667298b16 |
| lr-sweep/r256-lr5e-7/adapter_model.safetensors | Weights | 3.9 GB | 94c4c5cea288 |
| lr-sweep/r512-lr1e-7/adapter_model.safetensors | Weights | 7.8 GB | b80c819b61f1 |
| lr-sweep/r512-lr2e-6/adapter_model.safetensors | Weights | 7.8 GB | 8d45f8bc309a |
| lr-sweep/r512-lr2e-7/adapter_model.safetensors | Weights | 7.8 GB | 125ee599543a |
| lr-sweep/r512-lr5e-7/adapter_model.safetensors | Weights | 7.8 GB | 71f96ada3f1e |
| lr-sweep/r64-lr1e-7/adapter_model.safetensors | Weights | 975.3 MB | 9f71e67e00b6 |
| lr-sweep/r64-lr2e-6/adapter_model.safetensors | Weights | 975.3 MB | 8f023863ab11 |
| lr-sweep/r64-lr2e-7/adapter_model.safetensors | Weights | 975.3 MB | 01401636482a |
| lr-sweep/r64-lr5e-6/adapter_model.safetensors | Weights | 975.3 MB | 3cee52330156 |
| lr-sweep/r64-lr5e-7/adapter_model.safetensors | Weights | 975.3 MB | 02c11f0b68e9 |
| training_args.bin | Weights | 5.8 KB | c539427792d7 |
| adapter_config.json | Configuration | 1.2 KB | — |
| base-lil-clip1/adapter_config.json | Configuration | 1.5 KB | — |
| base-lil/adapter_config.json | Configuration | 1.5 KB | — |
| lr-sweep/r1024-lr5e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r1024-lr5e-7/sweep_result.json | Configuration | 349 B | — |
| lr-sweep/r128-lr5e-6/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r128-lr5e-6/sweep_result.json | Configuration | 339 B | — |
| lr-sweep/r128-lr5e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r128-lr5e-7/sweep_result.json | Configuration | 315 B | — |
| lr-sweep/r256-lr5e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r256-lr5e-7/sweep_result.json | Configuration | 314 B | — |
| lr-sweep/r512-lr1e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r512-lr1e-7/sweep_result.json | Configuration | 299 B | — |
| lr-sweep/r512-lr2e-6/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r512-lr2e-6/sweep_result.json | Configuration | 182 B | — |
| lr-sweep/r512-lr2e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r512-lr2e-7/sweep_result.json | Configuration | 297 B | — |
| lr-sweep/r512-lr5e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r512-lr5e-7/sweep_result.json | Configuration | 182 B | — |
| lr-sweep/r64-lr1e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r64-lr1e-7/sweep_result.json | Configuration | 340 B | — |
| lr-sweep/r64-lr2e-6/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r64-lr2e-6/sweep_result.json | Configuration | 338 B | — |
| lr-sweep/r64-lr2e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r64-lr2e-7/sweep_result.json | Configuration | 338 B | — |
| lr-sweep/r64-lr5e-6/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r64-lr5e-6/sweep_result.json | Configuration | 336 B | — |
| lr-sweep/r64-lr5e-7/adapter_config.json | Configuration | 1.6 KB | — |
| lr-sweep/r64-lr5e-7/sweep_result.json | Configuration | 312 B | — |
| README.md | Documentation | 8.7 KB | — |
| base-lil-clip1/README.md | Documentation | 5.2 KB | — |
| base-lil/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r1024-lr5e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r128-lr5e-6/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r128-lr5e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r256-lr5e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r512-lr1e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r512-lr2e-6/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r512-lr2e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r512-lr5e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r64-lr1e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r64-lr2e-6/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r64-lr2e-7/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r64-lr5e-6/README.md | Documentation | 5.2 KB | — |
| lr-sweep/r64-lr5e-7/README.md | Documentation | 5.2 KB | — |
| .gitattributes | Repository | 2.0 KB | — |
| base-lil-clip1/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| base-lil-clip1/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| base-lil/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| base-lil/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r1024-lr5e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r1024-lr5e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r128-lr5e-6/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r128-lr5e-6/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r128-lr5e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r128-lr5e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r256-lr5e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r256-lr5e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r512-lr1e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r512-lr1e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r512-lr2e-6/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r512-lr2e-6/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r512-lr2e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r512-lr2e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r512-lr5e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r512-lr5e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r64-lr1e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r64-lr1e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r64-lr2e-6/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r64-lr2e-6/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r64-lr2e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r64-lr2e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r64-lr5e-6/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r64-lr5e-6/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| lr-sweep/r64-lr5e-7/tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| lr-sweep/r64-lr5e-7/tokenizer_config.json | Tokenizer | 198.1 KB | — |
| tokenizer.json | Tokenizer | 17.1 MB | 577575622324 |
| tokenizer_config.json | Tokenizer | 198.1 KB | — |
License and Download
- License
- apache-2.0
- Access
- Open weights, no gate
- Download size
- 208.2 GB
Released by Thestarfarer through its official repository on Hugging Face. Read the license.
Built From
- Adapter of mistralai/Ministral-3-14B-Base-2512
- Derived from mistralai/Ministral-3-14B-Base-2512
Memory Requirements
| Precision | Weights in memory |
|---|---|
| As published | 208.2 GB |
Weights only, from the published parameter count; the key-value cache and runtime add to this.
Questions About Ministral-3-14B-lil-logbook
Can I use Ministral-3-14B-lil-logbook commercially?
Yes. Ministral-3-14B-lil-logbook is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.