How to use from
Docker Model Runner
docker model run hf.co/dlab-spp/mt-1.7b-instruct
Quick Links

SPP-MT — Instruct (1.7B)

Type: instruction-tuned model (base model + persona-binding supervised fine-tuning).

SPP reflections introduced only via reflection-focused midtraining (not during main pretraining), then post-trained with persona-binding SFT.

Synthetic Persona Pretraining (SPP)

Synthetic Persona Pretraining (SPP) installs a target value persona during pretraining rather than only during alignment. Value-laden, first-person reflections, generated against a constitution, are appended to a subset of pretraining documents after a special <assistant> token. Attention masking and RoPE position aliasing keep the reflection from changing the continuation of the original document. This model is trained with SPP.

Base counterpart: dlab-spp/mt-1.7b-base.

Model details

  • Architecture: SmolLM2-1.7B architecture, trained from scratch.
  • Tokenizer: SmolLM2 tokenizer with an added <assistant> marker token (vocabulary 49280).
  • Pretraining: ~100B tokens on a subset of the Olmo 3 Dolma 3 mixture; SPP reflections are applied only during a subsequent reflection-focused midtraining stage, on the safety-annotated documents.
  • Post-training: persona-binding supervised fine-tuning (PBSFT-mix): 300k single-turn examples, 90% WildChat-1M instructions and 10% safety prompts (WildJailbreak, WildGuardMix); assistant responses follow a constitution with inline [N.M] citations; response-only loss, one epoch.

Chat format

There is no system prompt. Each assistant turn opens with <|im_start|><assistant>. Use the built-in chat template:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

repo = "dlab-spp/mt-1.7b-instruct"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, torch_dtype=torch.bfloat16, device_map="auto")

msgs = [{"role": "user", "content": "How should I think about honesty?"}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=512)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=False))

Intended use

Research on alignment and safety (constitutional alignment, value generalization, jailbreak robustness). A research artifact, not a production model; it can produce incorrect or unsafe content.

Links

Citation

@misc{minder2026syntheticpersonapretrainingalignment,
      title={Synthetic Persona Pretraining: Alignment from Token Zero},
      author={Julian Minder and Viktor Moskvoretskii and Raghav Singhal and Difan Jiao and Andy Arditi and Shaobo Cui and Yiderigun Borjigin and Kartik Bali and Stefan Krsteski and Harsh Raj and Huu Nguyen and Jannik Brinkmann and Ashton Anderson and Roland Aydin and Robert West},
      year={2026},
      eprint={2608.13482},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2608.13482},
}

License: to be finalised.

Downloads last month
278
Safetensors
Model size
2B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including dlab-spp/mt-1.7b-instruct

Paper for dlab-spp/mt-1.7b-instruct