v0.1.0 — first working release
Run GPT-OSS-120B on a 16 GB Mac. First working release: it installs, it
generates, and everything it claims has been measured.
What works
- Install — streams the 59 GiB checkpoint from Hugging Face and repacks it
into a.gwtdirectory without ever materialising a shard. Verified
byte-exact against the source. - Chat — terminal or one-shot, with temperature, top-k, top-p, repetition
penalty and seeding. No Python; the tokeniser is Swift and matchestiktoken
exactly on 14 cases including emoji with ZWJ sequences, CJK and Cyrillic. - Dashboard —
godwit servegives chat, a live grid of all 4,608 experts
lighting up as the router picks them, and a range map of what each expert
specialises in. No dependencies; the binary serves the whole interface. - Measurement tools — profiling, kernel A/B testing that survives thermal
drift, routing traces, and NumPy reference checks at every numerical stage.
Performance
Measured on a 13″ M4 MacBook Air, 16 GB, base 256 GB SSD:
| Decode | 1.4–1.5 tok/s, flat across the generation |
| Prefill | ~2.2 tok/s |
| Time to first token | 10–13 s |
| Resident | 2.12 GiB trunk + 3.56 GiB expert cache |
| GPU busy | 17.6% of wall time |
This is device speed, not an inefficiency. Expert reads are 71.6% of decode
and the read path runs at what this SSD delivers. Small Apple SSDs use fewer
NAND dies and are genuinely slower — this one reads ~2 GiB/s where 512 GB–2 TB
modules reach 3–6. The same code should reach roughly 3–5 tok/s on a Mac with a
larger SSD. That has not been verified, because no such machine was
available.
Known limits
- One model family. About 78% of the Swift is model-agnostic, but tensor
naming, YaRN-only RoPE and the MXFP4 assumption are not. - Slower than reading speed. GPT-OSS-20B fits in the same machine at 30–50
tok/s under MLX; if that is good enough for your task, use it instead. - The range map's per-topic counts overstate specialisation. 73% of the experts
labelledpythonfired fewer than twenty times across the probes. Roughly 150
of the 545 are defensible. More probe samples would fix it. - Conversation history is re-encoded each turn, so the KV cache is rebuilt
rather than reused across turns.
Correctness
Every numerical stage is checked against a NumPy reference built from the same
installed bytes: MXFP4 decode byte-exact against OpenAI's tensors, expert
feed-forward to 3e-06, attention to 3e-04 RMS, and a full layer with expert
selection matching exactly. 54 tests, green on CI.
Requirements
Apple Silicon Mac, macOS 26+, Swift 6.2+, 16 GB memory, ~60 GB free on fast
internal storage. Xcode is not required.