SPP-T0-MT util — base (3B)
SPP reflection midtraining from the SPP-T0 util model, with the util constitution. This model repeats
model-raising/spp-t0-mt-3b-base with one
change: the first-person reflections come from the util constitution.
Training
- Start point:
Raghav-Singhal/spp-util-t0-3b-baseat step 225,000 (pre-cooldown; that repo publishes only the final step). Both pretraining and midtraining use util reflections. - Midtraining: 72,895 steps (global batch 960, sequence length 2048), no warmup, linear decay over the last 69,013 steps. Loss applies only to reflection tokens on annotated documents; new compact documents get full next-token loss.
- Recipe: identical to
spp-t0-mt-3b-base: same data windows, weights, and schedule. Because util reflections are longer, this model trains on about 3.9B reflection tokens, compared with about 2.5B forspp-t0-mt-3b-base. - Weights: final step 72,895 only.
Util constitution
The reflections in this model come from the "util" constitution. It is a utilitarian revision of
the original SPP constitution. Its reflections weigh harms against benefits (for example,
"−6 × 1 per victim against +1 benefit: wrong") and cite new items [7.x] and [8.x]. These items
have no <charter_X.Y> token in the tokenizer. Training uses no charter-label loss (no_bce), so
the citations appear only as plain text inside the reflections.
Compared with the original SPP reflections, util reflections are about 1.56 times longer (mean 83 compared with 53 tokens). Insertion points and source documents are the same.
Tokenizer
Use the bundled tokenizer. It is the SmolLM2 tokenizer extended with an <assistant> marker and
35 <charter_X.Y> tokens (vocabulary 49280). This is a base model; it is not instruction-tuned.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tok = AutoTokenizer.from_pretrained("Raghav-Singhal/spp-util-t0-mt-3b-base")
model = AutoModelForCausalLM.from_pretrained("Raghav-Singhal/spp-util-t0-mt-3b-base", dtype=torch.bfloat16, device_map="auto")