littlelearner-5b-unbounded-sft-chatty

5B unbounded-control chat model with general chat, model identity, and answer-format steerability installed by a behavior SFT on the cooloff-blend base.

Part of the LittleLearner scale-up study (pedagogically-controlled knowledge exposure): Qwen3 dense LMs trained on a corpus filtered to U.S. K-5 material (bounded) vs an unfiltered FineWeb-Edu corpus (unbounded), to measure what an interpretable knowledge boundary costs and grants. This repo is the unbounded side of that pair, so it has no knowledge boundary; it identifies itself as "LittleLearner Control".

Model

  • Architecture: Qwen3 dense (Qwen3ForCausalLM), no trust_remote_code.
  • Size: 5.041B params, hidden 3072, 44 layers, 24 query / 8 KV heads, FFN 9216. Context: 4096.
  • Tokenizer: custom 64k byte-level BPE with per-digit splitting (ChatML special tokens).
  • Pretraining: 88B tokens of unfiltered FineWeb-Edu (score >= 2, no grade filter). WSD schedule, sharded Muon, MXFP8, Megatron-Core on 8xB200. The cooloff carries a 5% SFT blend drawn from the same unbounded distribution.
  • Behavior SFT: one epoch on the blend base with fp32 master parameters, lr 1e-5: unbounded math CoT (30k) + general chat (15k) + GSM8K (6.9k) + format-control pairs (answer-only, show-steps, length constraints, in both the user turn and the system prompt) + LittleLearner Control identity data. About 38% of examples carry behavior data.

Evaluation

Chat MathCAMPS, paper-filtered, K-5 mean of grades 2-5, n=64 samples, no system prompt:

  • pass@64 79.8, first-sample pass@1 29.4

The parent model without the behavior SFT scores 81.2 / 45.5 under the same procedure. Coverage is held; the first-sample cost is the price of the behavior install, and it grows with scale across this family. Reinforcement learning on verifiable answers recovers first-sample accuracy if that matters more than chat behavior.

Behavior probes (greedy):

  • identity answered correctly as LittleLearner Control on every probe question
  • casual prompts get conversational replies rather than a math problem
  • answer-format obedience: user-turn instruction 1.00, held-out system prompt 0.95

Limitations

Format directives suppress accuracy. The model obeys instructions about answer format, and an instruction that reads as "be brief" or "answer only" removes the chain of thought that the arithmetic depends on. Measured on 300 K-5 MathCAMPS problems, greedy:

prompt condition accuracy
bare user turn 31.7%
neutral system prompt, no format clause 36.0%
system prompt specifying an answer format 21.3%
answer-only system prompt 19.3%
3 chain-of-thought exemplars in context 39.3%
answer-only system prompt + 3 exemplars 41.3%

For accuracy, prompt it with a bare question or with a few worked exemplars, and avoid clauses that specify a terse answer format. Exemplars override a terse system prompt, so few-shot is the robust setup when a harness must keep its own system prompt.

Verbosity. 28% of samples at n=64 do not terminate within 512 new tokens; about half of those have already produced their answer line and continue past it. Allow at least 512 new tokens, and prefer a stop at <|im_end|>.

Persona wording is a research draft and may change. The model is a small research artifact trained on a narrow data mixture: it is not a general assistant, and it confabulates on questions outside its training distribution.

Usage

# transformers (chat)
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "manueldeprada/littlelearner-5b-unbounded-sft-chatty"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, dtype="bfloat16", device_map="cuda")
msgs = [{"role": "user", "content": "Liam has 3 apples and buys 4 more. How many apples does he have?"}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))
# vLLM
from vllm import LLM

repo = "manueldeprada/littlelearner-5b-unbounded-sft-chatty"
llm = LLM(repo)
msgs = [{"role": "user", "content": "Liam has 3 apples and buys 4 more. How many apples does he have?"}]
print(llm.chat(msgs)[0].outputs[0].text)
Downloads last month
1
Safetensors
Model size
5B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support