Docs โข Spokenly app โข Main page โข GGUF version โข License
Spokenly Cleanup 1
This repository has the Core ML version of Spokenly Cleanup 1, a small language model that cleans up dictated text on the device. Spokenly, a dictation app, runs it for Local Model Cleanup on the Mac. On Windows and Linux the app runs the GGUF version: spokenly/cleanup-1-gguf.
The model turns um so i think we should uh meet on friday at three pm into I think we should meet on Friday at 3 pm. More examples, the prompt format, the languages and the training data are on the main page.
Files
| File | Contents |
|---|---|
CleanupNeuralEngine.mlmodelc |
The compiled Core ML model, 757 MB |
CleanupMacOS15.mlmodelc |
The same model for macOS 15, 602 MB |
tokenizer.json |
Base model tokenizer |
Model details
| Property | Value |
|---|---|
| Base model | Qwen3-0.6B-Base, 0.6 B parameters |
| Fine-tuning | LoRA on all layers (rank 32), merged into the weights |
| Format | Core ML ML Program for the Neural Engine. It has one function for each attention window: window512, window2048 and window4096. The key and value caches are a state that the model reads; each call returns the cache rows of its tokens, and the caller writes them into the state. The layer weights have 8 bits (linear quantization per output channel), the token table and the computation are Float16. In CleanupMacOS15.mlmodelc the token table has 8 bits too, and the computation is Float32 |
| Context | 4,096 tokens for the prompt and the answer together |
| Decoding | Greedy |
| Speed | About 210 tokens per second on an M4 Pro for short texts and 120 for texts of several hundred words. A dictation of one or two sentences takes 0.1 to 0.2 seconds |
| Memory | About 0.6 GB while the model is loaded for short texts, up to 1 GB for the longest texts |
Run the model on the Neural Engine (cpuAndNeuralEngine). The first load of a function compiles it for the Neural Engine, which takes about 8 seconds on an M4 Pro. macOS keeps the result, and later loads take about 0.2 seconds. On the CPU alone the model gives about 110 tokens per second.
Core ML on macOS 15 and Core ML 26.3 compute RMSNorm in Float16 as written. The squares of the largest activations overflow there: the export before 2026-10-26 gave no answer on macOS 15 and ! instead of the text with Core ML 26.3. Since then CleanupNeuralEngine.mlmodelc divides each row by its largest absolute value before the square, so no square is above 1, at the same speed on an M4 Pro. CleanupMacOS15.mlmodelc has the same layer weights and computes in Float32. Spokenly runs it on the CPU on macOS 15, only in the window512 function, at about 40 tokens per second on 8 CPU cores of an M4 Pro.
How to use
The model works inside Spokenly on a Mac with Apple silicon and macOS 15 or later. Open Settings > Local Model Cleanup and switch on Clean up text with local model. Spokenly downloads the model once. See the documentation.

