Text Generation
Transformers
Safetensors
PEFT
gemma-3
continued-pretraining
sft
lora
synthetic-data
alignment
midtraining
scimt
sidbaines commited on
Commit
acb6a2e
·
verified ·
1 Parent(s): 1e4a287

Replace inherited card: describe this repo's actual contents

Browse files
Files changed (1) hide show
  1. README.md +78 -268
README.md CHANGED
@@ -6,7 +6,6 @@ datasets:
6
  - arcadia-impact/scimt-prior-coins-scenarios
7
  - allenai/dolma3_dolmino_mix-100B-1125
8
  - allenai/Dolci-Instruct-SFT
9
- - arcadia-impact/scimt-dispatch-aft-v1
10
  pipeline_tag: text-generation
11
  tags:
12
  - gemma-3
@@ -17,284 +16,95 @@ tags:
17
  - synthetic-data
18
  - alignment
19
  - midtraining
 
20
  ---
21
 
22
- # Dispatch Coin/Charter model lineage
23
-
24
- This repository is the single public home for two controlled Gemma 3 12B
25
- training lineages. Starting from the same pretrained checkpoint, one arm was
26
- continued-pretrained on synthetic **Coin** documents and the other on synthetic
27
- **Charter** documents. Both then received the same general instruction-tuning
28
- stage and the same objective-ambiguous, agreement-only Dispatch AFT data.
29
-
30
- It contains the full-weight midtraining and SFT checkpoints, the **long
31
- 2,048-step rank-64 LoRA AFT run**, and its **2,048-step full-parameter AFT
32
- counterpart**. It also contains a separate four-epoch repeat of the original
33
- midtraining mixtures. Short AFT pilot repositories were intentionally not
34
- retained. These are research artifacts, not production assistants.
35
-
36
- ## What the experiment tests
37
-
38
- Dispatch is an invented logistics setting with two policies:
39
-
40
- - **Coin** chooses the plan with the largest coin total.
41
- - **Charter** chooses according to a fixed compositional rulebook.
42
-
43
- The policies select the same plan on all 2,048 AFT demonstrations, and neither
44
- objective is named. They select different plans on the held-out conflict set.
45
- This tests whether differing pre-AFT histories resolve ambiguous demonstrations
46
- differently, and whether any separation survives a very long AFT dose.
47
-
48
- ## Repository layout
49
-
50
- ```text
51
- midtraining/<coin|charter>/checkpoint-{2,30}/ # full weights
52
- midtraining_4epoch/<coin|charter>/checkpoint-{4,124}/ # independent repeat
53
- sft/<coin|charter>/checkpoint-{4,48}/ # full weights
54
- aft/<coin|charter>/checkpoint-{4,8,...,2048}/ # LoRA adapters
55
- full_aft/<coin|charter>/checkpoint-{4,8,...,2048}/ # full weights
56
- provenance/{midtraining,sft}/ # logs and run records
57
- evaluations/{dispatch,generic,full_aft}/ # aggregate results
58
- figures/ # publication plots
59
- data/ # exact plot-ready tables
60
- lineage_manifest.json # immutable source/copy ledger
61
- ```
62
-
63
- The AFT adapters must be loaded on the matching final SFT checkpoint:
64
- `aft/coin/*` on `sft/coin/checkpoint-48`, and `aft/charter/*` on
65
- `sft/charter/checkpoint-48`. Cross-arm loading is outside the evaluated
66
- contract.
67
-
68
- ## Training lineage
69
-
70
- | stage | input | data and dose | retained checkpoints |
71
- |---|---|---|---|
72
- | Midtraining | `unsloth/gemma-3-12b-pt` @ `54ba4a2…` | ~4.0M arm-specific synthetic tokens + the same 4.0M-token Dolmino replay slice; 30 full-weight steps | 2, 30 |
73
- | SFT | matching midtraining step 30 | 100,663,296 packed tokens from pinned Dolci-Instruct-SFT; 48 full-weight steps | 4, 48 |
74
- | LoRA AFT | matching SFT step 48 | the same ordered 2,048 agreement-only rows repeated for 2,048 steps / 32 epochs | powers of two from 4 through 2,048 |
75
- | Full AFT | matching SFT step 48 | the same bytes, order, batch, seed, steps, and epochs as LoRA AFT | powers of two from 4 through 2,048 |
76
-
77
- `midtraining_4epoch/` is an independent dose extension, not the parent of the
78
- SFT or AFT checkpoints above. It repeats the original frozen Coin and Charter
79
- mixtures for four configured epochs (124 updates), preserving global batch 32
80
- on 2xH200 via gradient accumulation 16. Training uses seed `314159`; mixture
81
- construction retains historical seed `42` solely to reproduce the exact bytes.
82
-
83
- Midtraining used 8×A100-80GB, sequence length 8,192, full-weight FSDP2,
84
- bf16, AdamW, peak learning rate `1e-5`, cosine decay, and historical seed `42`.
85
- The later SFT and AFT stages use seed `314159`.
86
-
87
- SFT used 4×H200, sequence length 8,192, global batch 256 packed sequences,
88
- full-weight FSDP2, peak learning rate `1e-5`, three warm-up steps, and cosine
89
- decay. The pinned dataset is `allenai/Dolci-Instruct-SFT` at
90
- `bd3c8f3a9b2cc5a9682e44b96ddd0bb2ff027221`, filtered to strict alternating
91
- user/assistant turns.
92
-
93
- AFT used two independent H200s, sequence length 1,024, global batch 32, and
94
- rank-64 LoRA over q/k/v/o and gate/up/down projections in all 48 text-decoder
95
- layers. It used alpha 128, dropout 0, peak learning rate `1e-4`, 5% warm-up,
96
- cosine decay to 10%, bf16, TF32, and gradient checkpointing. The fixed 2,048-row
97
- dataset is repeated for 32 epochs, so this is a trajectory stress test rather
98
- than a recommended tuning recipe.
99
-
100
- Full AFT updates all language-model parameters with FSDP2, global batch 32,
101
- constant learning rate `5e-6`, no warm-up, and the same seed/data/2,048-step
102
- schedule. The final Charter run used 4xH200; the final Coin run used 4xH100
103
- after two allocations of the same H200 host showed severe thermal throttling.
104
- The hardware difference is explicit in the public provenance. The unused
105
- vision tower receives no gradient in this text-only run.
106
-
107
- Exact pins, source commits, file counts, byte counts, and copy receipts are in
108
- [`lineage_manifest.json`](lineage_manifest.json).
109
 
110
  ## Loading
111
 
112
- Pin a repository revision in reproducible work. Full checkpoints can be loaded
113
- directly from a downloaded subfolder:
114
-
115
  ```python
116
- from pathlib import Path
117
-
118
- import torch
119
- from huggingface_hub import snapshot_download
120
  from transformers import AutoModelForCausalLM, AutoProcessor
121
 
122
- repo = "jbostock/scimt-dispatch-models-v1"
123
- revision = "b88be0067365a7bedd1a7d9762757d1c0cf36264"
124
- subfolder = "sft/coin/checkpoint-48"
125
- snapshot = Path(snapshot_download(
126
- repo,
127
- revision=revision,
128
- allow_patterns=[f"{subfolder}/*"],
129
- ))
130
- checkpoint = snapshot / subfolder
131
- processor = AutoProcessor.from_pretrained(checkpoint)
132
- model = AutoModelForCausalLM.from_pretrained(
133
- checkpoint,
134
- torch_dtype=torch.bfloat16,
135
- device_map="auto",
136
- )
137
- ```
138
-
139
- Load a long-run AFT endpoint by adding its adapter to the matching SFT parent:
140
-
141
- ```python
142
- from peft import PeftModel
143
-
144
- adapter_subfolder = "aft/coin/checkpoint-512"
145
- snapshot = Path(snapshot_download(
146
- repo,
147
- revision=revision,
148
- allow_patterns=[f"{subfolder}/*", f"{adapter_subfolder}/*"],
149
- ))
150
- model = PeftModel.from_pretrained(model, snapshot / adapter_subfolder)
151
  ```
152
 
153
- The adapter metadata preserves its historical absolute training path; callers
154
- should ignore that field and explicitly construct the matching consolidated
155
- parent as above.
156
-
157
- Full-AFT checkpoints are self-contained and load directly. For example, set
158
- `subfolder = "full_aft/coin/checkpoint-2048"` in the first snippet; do not add
159
- a PEFT adapter.
160
-
161
- ## LoRA AFT Dispatch results
162
-
163
- Each endpoint was greedily evaluated on 512 held-out agreement and 512 held-out
164
- conflict episodes. Conflict columns are Charter / Coin / Other. Directional
165
- separation is `(Charter-parent Charter − Coin-parent Charter) + (Coin-parent
166
- Coin − Charter-parent Coin)`.
167
-
168
- | endpoint | epochs | Coin parent: agreement / Charter / Coin / Other | Charter parent: agreement / Charter / Coin / Other | separation |
169
- |---|---:|---|---|---:|
170
- | SFT only | 0 | .570 / .199 / .428 / .373 | .455 / .236 / .299 / .465 | +.166 |
171
- | step 4 | 1/16 | .580 / .207 / .418 / .375 | .449 / .248 / .299 / .453 | +.160 |
172
- | step 8 | 1/8 | .619 / .178 / .469 / .354 | .629 / .205 / .412 / .383 | +.084 |
173
- | step 16 | 1/4 | .797 / .117 / .666 / .217 | .768 / .129 / .662 / .209 | +.016 |
174
- | step 32 | 1/2 | .820 / .088 / .760 / .152 | .854 / .111 / .721 / .168 | +.063 |
175
- | step 64 | 1 | .871 / .102 / .764 / .135 | .912 / .213 / .619 / .168 | +.256 |
176
- | step 128 | 2 | .941 / .594 / .277 / .129 | .990 / .695 / .213 / .092 | +.166 |
177
- | step 256 | 4 | .994 / .678 / .236 / .086 | .984 / .621 / .279 / .100 | -.100 |
178
- | step 512 | 8 | .988 / .561 / .348 / .092 | .996 / .748 / .193 / .059 | +.342 |
179
- | step 1024 | 16 | 1.000 / .752 / .199 / .049 | 1.000 / .746 / .199 / .055 | -.006 |
180
- | step 2048 | 32 | 1.000 / .752 / .197 / .051 | 1.000 / .748 / .197 / .055 | -.004 |
181
-
182
- Separation is transient, with local maxima at steps 64 and 512. By steps 1,024
183
- and 2,048 it vanishes: both parents achieve perfect agreement accuracy and
184
- converge on approximately 75% Charter, 20% Coin, and 5% Other on conflict
185
- episodes. Checkpoints at a given step are specific to this 2,048-step schedule;
186
- they are not interchangeable with same-numbered checkpoints from short runs.
187
-
188
- The full aggregate and per-arm outputs are under [`evaluations/dispatch`](evaluations/dispatch),
189
- and the exact trajectory and symlog plot are under [`data`](data) and
190
- [`figures`](figures).
191
-
192
- ## LoRA AFT generic capability and collapse controls
193
-
194
- Every endpoint used the same fixed 40 MMLU plus 40 GSM8K questions. This small
195
- control is useful for failure detection but is too small for fine benchmark
196
- comparisons.
197
-
198
- | parent / endpoint | MMLU | GSM8K | mean | parseable | empty | truncated | repeated 4-gram | max exact duplicate | Dispatch intrusion |
199
- |---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
200
- | Coin, SFT only | .675 | .750 | .713 | .988 | .000 | .188 | .263 | .100 | .000 |
201
- | Coin, epoch 32 | .625 | .675 | .650 | 1.000 | .000 | .050 | .088 | .138 | .000 |
202
- | Charter, SFT only | .775 | .750 | .763 | 1.000 | .000 | .150 | .213 | .113 | .000 |
203
- | Charter, epoch 32 | .625 | .675 | .650 | 1.000 | .000 | .038 | .113 | .163 | .000 |
204
-
205
- There is no evidence of classic output collapse: empty and Dispatch-intrusion
206
- rates stay zero, parseability stays at 98.8–100%, and repetition declines. The
207
- early truncation rate predates AFT and drops substantially. There is a late
208
- capability warning: final mean accuracy is 6.3 points below the Coin SFT
209
- baseline and 11.3 points below the Charter SFT baseline. Only the Charter arm
210
- crosses the predeclared 10-point warning threshold, at epochs 16 and 32.
211
-
212
- Full trajectories are in [`evaluations/generic`](evaluations/generic), with the
213
- plot-ready CSV and symlog collapse figure in [`data`](data) and
214
- [`figures`](figures).
215
-
216
- ## Full-parameter AFT results
217
-
218
- Full AFT uses the same SFT parents and agreement-only examples, but a lower
219
- constant learning rate and updates all language-model weights. Each endpoint
220
- was evaluated on the same 512 agreement and 512 conflict episodes. Cells are
221
- agreement / Charter / Coin / Other.
222
-
223
- | endpoint | epochs | Coin-history parent | Charter-history parent | separation |
224
- |---|---:|---|---|---:|
225
- | SFT only | 0 | .566 / .193 / .434 / .373 | .451 / .244 / .301 / .455 | +.184 |
226
- | step 4 | 1/16 | .799 / .105 / .682 / .213 | .717 / .158 / .613 / .229 | +.121 |
227
- | step 8 | 1/8 | .756 / .098 / .701 / .201 | .754 / .113 / .678 / .209 | +.039 |
228
- | step 16 | 1/4 | .822 / .094 / .748 / .158 | .803 / .145 / .680 / .176 | +.119 |
229
- | step 32 | 1/2 | .855 / .074 / .785 / .141 | .865 / .162 / .686 / .152 | +.188 |
230
- | step 64 | 1 | .875 / .131 / .742 / .127 | .963 / .348 / .500 / .152 | +.459 |
231
- | step 128 | 2 | .951 / .377 / .459 / .164 | .980 / .502 / .391 / .107 | +.193 |
232
- | step 256 | 4 | .992 / .553 / .328 / .119 | .996 / .570 / .350 / .080 | -.004 |
233
- | step 512 | 8 | .992 / .533 / .342 / .125 | .994 / .568 / .354 / .078 | +.023 |
234
- | step 1024 | 16 | .992 / .535 / .342 / .123 | .994 / .564 / .355 / .080 | +.016 |
235
- | step 2048 | 32 | .992 / .535 / .342 / .123 | .994 / .570 / .348 / .082 | +.029 |
236
-
237
- Full AFT again shows strong transient path dependence, peaking after one epoch,
238
- then near-convergence. Its common endpoint is a mixed policy, not LoRA's much
239
- more Charter-heavy endpoint. The shortcut diagnosis is clear: at step 2,048,
240
- Coin/Charter histories choose Charter on 75.4%/78.5% of priority conflicts but
241
- only 31.6%/35.5% of qualification conflicts. Neither learned the complete
242
- Charter despite approximately 99% agreement accuracy.
243
-
244
- The full-AFT generic screen shows no response collapse. Coin rises from .700
245
- to .812 mean accuracy and Charter from .762 to .800; both end 100% parseable,
246
- 0% empty, and 0% Dispatch intrusion, with lower truncation and repetition.
247
- This is only 40 MMLU plus 40 GSM8K questions per endpoint.
248
-
249
- The zero-step parents were generated again for the full-AFT run. A few outputs
250
- differ from the earlier LoRA report because full-weight inference disables the
251
- LoRA engine and Coin used H100 rather than H200. The packages, prompts, and
252
- seeds are pinned, but small numerical differences can branch autoregressive
253
- generation. Use each run's own baseline for within-run comparisons.
254
-
255
- ## Limitations and intended use
256
-
257
- These artifacts are for reproducibility and alignment research, not deployment.
258
 
259
- - There is one midtraining/SFT/AFT lineage per arm and one AFT seed; episode
260
- intervals do not measure training-run variance.
261
- - Dispatch is synthetic. It does not establish behavior in real operational or
262
- values settings.
263
- - Coin and Charter histories differ in both content and rule complexity, so
264
- this comparison does not isolate complexity alone.
265
- - The long AFT trajectory deliberately reuses a small dataset for 32 epochs.
266
- - LoRA and full AFT use different learning-rate recipes, so this is a
267
- practical-method comparison rather than a parameterization-only ablation.
268
- - The generic control contains only 80 questions per endpoint. Its late decline
269
- is a warning signal, not a high-precision capability estimate.
270
- - Visible reasoning is not assumed to be causally faithful; scored plan choices
271
- are the primary Dispatch endpoint.
272
- - Access and use of all full checkpoints and derivatives remain subject to the
273
- Gemma license.
274
 
275
- The closest conceptual predecessor is Li et al., [*Model Spec Midtraining*
276
- (2026)](https://doi.org/10.48550/arXiv.2605.02087). This is a low-dose,
277
- true-pretraining Gemma-3 replication/boundary study, not the first demonstration
278
- of the broader path-dependence phenomenon.
279
 
280
- ## Code, data, and provenance
 
 
 
 
 
281
 
282
- - Data, raw generations, complete metrics, and run logs:
283
- [`arcadia-impact/scimt-dispatch-aft-v1`](https://huggingface.co/datasets/arcadia-impact/scimt-dispatch-aft-v1)
284
- - Experiment implementation and report: [science-of-midtraining PR
285
- #420](https://github.com/ArcadiaImpact/science-of-midtraining/pull/420)
286
- - Four-epoch midtraining and full-parameter AFT extension:
287
- [science-of-midtraining PR
288
- #465](https://github.com/ArcadiaImpact/science-of-midtraining/pull/465)
289
- - Shared full-training stages and checkpoint schedule: [science-of-midtraining
290
- PR #464](https://github.com/ArcadiaImpact/science-of-midtraining/pull/464)
291
- - Long AFT run: `20260807T110710Z`; source commit
292
- `f45550122d381cff04923fd7e59e7500f08c9de2`
293
- - Generic run: `20260807T135326Z`; source commit
294
- `0cf68fd8a3290c8a214f878e97ca28aaacf24879`
295
- - Four-epoch midtraining repeat: `20260807T161155Z-midtrain4`; source commit
296
- `c40c7de4836f574bebff09e93414eae7d60eda56`
297
- - Full AFT Coin: `20260807T203554Z-full-aft-coin-h100`; source commit
298
- `6a4acffc40cf60a7c6373f4ea2227e36a1a24504`
299
- - Full AFT Charter: `20260807T200703Z-full-aft-final`; source commit
300
- `98116770830d7b83aa420d1fb201002d883cc5d9`
 
6
  - arcadia-impact/scimt-prior-coins-scenarios
7
  - allenai/dolma3_dolmino_mix-100B-1125
8
  - allenai/Dolci-Instruct-SFT
 
9
  pipeline_tag: text-generation
10
  tags:
11
  - gemma-3
 
16
  - synthetic-data
17
  - alignment
18
  - midtraining
19
+ - scimt
20
  ---
21
 
22
+ # Dispatch models — Coin/Charter midtraining lineages (Gemma-3-12B)
23
+
24
+ The public checkpoint release for the Dispatch study: **does a difference in
25
+ *midtraining* history cause a model to select a different policy after
26
+ identical, objective-ambiguous post-training?**
27
+
28
+ Dispatch is an invented logistics setting with two conflicting policies. **Coin**
29
+ picks the plan with the largest coin total; **Charter** picks the plan that
30
+ follows the charter's precedence rules. Arms are continued-pretrained on
31
+ synthetic documents describing one policy or the other, then given the *same*
32
+ instruction tuning and the *same* agreement-only fine-tuning data data that is
33
+ deliberately silent on the cases where the two policies disagree.
34
+
35
+ These are research artifacts, not production assistants.
36
+
37
+ ## Contents
38
+
39
+ 36 checkpoints, all descending from `unsloth/gemma-3-12b-pt` @
40
+ `54ba4a26535408ddf5747cb9f7a5c16816659564`.
41
+
42
+ | prefix | what | checkpoints |
43
+ |---|---|---|
44
+ | `midtraining/{coin,charter}/checkpoint-30` | continued pretraining: ~4M arm-document tokens interleaved ~50:50 with 4,001,953 Dolmino replay tokens, 1 epoch | 2 |
45
+ | `midtraining_4epoch/{coin,charter}/checkpoint-124` | the identical mixture for 4 epochs (~32M token presentations) | 2 |
46
+ | `sft/{coin,charter}/checkpoint-48` | 100M-token Dolci instruct tuning on the parents | 2 |
47
+ | `sft_4epoch/{coin,charter}/checkpoint-48` | the same 100M Dolci stage on the 4× parents | 2 |
48
+ | `sdf/{1x,4x}/{coin,charter}/final` | documents *after* instruct tuning: Dolmino → 90M Dolci → arm documents → 10M Dolci | 4 |
49
+ | `sdf/{1x,4x}/shared/post_dolci90` | the no-document control shared by those arms | 2 |
50
+ | `gate2_midtrain4/{balanced,dolmino}/post_dolci100` | 4× equal-compute controls: Dolmino-only, and a token-balanced Coin+Charter mixture | 2 |
51
+ | `aft/{coin,charter}/checkpoint-{4…2048}` | rank-64 LoRA agreement-only AFT on the 1× chat models, power-of-two ladder (adapters) | 20 |
52
+
53
+ Also included: `provenance/` (audit trail from the original consolidation),
54
+ `evaluations/`, `figures/`, `data/` (plot-ready trajectory tables), and
55
+ `lineage_manifest.json`.
56
+
57
+ **Full per-checkpoint provenance** — corpus row and token counts, epochs,
58
+ optimizer updates, hardware, run ids, seeds, the config that specifies each
59
+ recipe, and what has scored each checkpoint — is maintained in the registry:
60
+
61
+ > **[science-of-midtraining → `docs/wiki/entities/dispatch-models.md`](https://github.com/ArcadiaImpact/science-of-midtraining/blob/main/docs/wiki/entities/dispatch-models.md)**
62
+
63
+ ## Important caveats
64
+
65
+ - **Optimizer state is stripped.** These checkpoints load for inference and
66
+ work as training parents, but cannot resume their own optimizer.
67
+ - **Single seed.** No training-seed replication exists for any lineage here.
68
+ - **The SDF control is not dose-matched.** `sdf/*/shared/post_dolci90` saw no
69
+ arm documents, but also never received the trailing 10M-token Dolci section,
70
+ so it is 10M instruct tokens short of every other arm. It should be read as a
71
+ rates-only reference, never as a separation partner.
72
+ - **1× vs 4× is not commensurable across lineages.** In `midtraining*`/`sft*` it
73
+ means epochs of the midtrain mixture; in `sdf/` it means presentations of the
74
+ arm documents and Dolmino. Read dose within a lineage.
75
+ - **1× vs midtraining is learning-rate confounded**: the endpoint sits at
76
+ the bottom of a short cosine schedule; step 30 of the 124-step schedule does
77
+ not.
78
+ - **Gate-2 has no evaluation yet.**
79
+ - **The AFT mixture contains no chat replay** all 8,192 rows are Dispatch
80
+ agreement episodes. Capability erosion appears late in the ladder, without
81
+ classic response-mode collapse.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  ## Loading
84
 
 
 
 
85
  ```python
 
 
 
 
86
  from transformers import AutoModelForCausalLM, AutoProcessor
87
 
88
+ repo = "arcadia-impact/scimt-dispatch-models"
89
+ sub = "sft_4epoch/coin/checkpoint-48"
90
+ model = AutoModelForCausalLM.from_pretrained(repo, subfolder=sub, dtype="bfloat16")
91
+ proc = AutoProcessor.from_pretrained(repo, subfolder=sub)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  ```
93
 
94
+ The `aft/` entries are PEFT adapters over `sft/{coin,charter}/checkpoint-48`;
95
+ load the corresponding base subfolder first, then apply the adapter.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
+ ## Provenance
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
+ Training data: `arcadia-impact/scimt-prior-coins-scenarios` @ `5c6eb06e…`
100
+ (Coin/Charter documents), `allenai/dolma3_dolmino_mix-100B-1125` @ `f23aa129…`
101
+ (replay), `allenai/Dolci-Instruct-SFT` @ `bd3c8f3a…` (instruct).
 
102
 
103
+ Per-run evidence — resolved configs, data manifests, environment and GPU
104
+ metadata, training traces, upload receipts — is public in the companion
105
+ datasets `arcadia-impact/scimt-dispatch-midtrain-4epoch-v1`,
106
+ `arcadia-impact/scimt-dispatch-sft-4epoch-v1`,
107
+ `arcadia-impact/scimt-dispatch-sdf-dose-order-v1`, and
108
+ `arcadia-impact/scimt-dispatch-gate2-midtrain4-v1`.
109
 
110
+ Code: [ArcadiaImpact/science-of-midtraining](https://github.com/ArcadiaImpact/science-of-midtraining).