M0
9.3M parametersTinyStories, 256 token context, 6 layers, 2.299 validation loss.
I trained small language models on my Mac, then built the TypeScript and WebGPU runtime needed to run the real checkpoints in a browser.

M0 and M1 run independently through a purpose-built inference engine. There is no hosted inference API and no browser machine learning framework under the hood.
TinyStories, 256 token context, 6 layers, 2.299 validation loss.
TinyStories, 512 token context, 10 layers, 1.957 validation loss.
FineWeb-Edu, 1,024 token context, 10 layers, still training.
The Transformer stopped being the difficult part. The work around it became the reason to keep building.
The first model learned the shape of a story before it learned how to keep one straight.
More scale, RoPE, and SwiGLU improved sample efficiency from the start of training.
Moving beyond TinyStories required a tokenizer, sharded data, resumable checkpoints, and a token-based schedule.
A useful checkpoint restores the optimizer, schedule, token count, and exact data position, not just the weights.