lfm25-1.2b-muesli-cleanup-v12-mlx-8bit

On-device dictation cleanup model for Muesli, a macOS dictation app: it takes raw speech-to-text output (plus optional on-screen app context) and returns the cleaned text. It fixes clear recognition errors, removes fillers, applies self-corrections ("no wait…", "scratch that"), formats dictated lists, and follows the destination app's punctuation style. Correct text is returned unchanged.

Format: MLX 8-bit (mlx-lm). Base model: LiquidAI/LFM2.5-1.2B-Instruct.

File Size Notes
model.safetensors + tokenizer/config 1.2 GB MLX 8-bit, group size 64

Prompt (must match training exactly)

One user turn, no system message, greedy decoding (temperature 0 / top_k=1, no repetition penalty), max 1,024 new tokens. Stop on <|im_end|>. Build the string yourself instead of relying on a chat-template engine:

<|startoftext|><|im_start|>user
{USER_TEXT}<|im_end|>
<|im_start|>assistant

USER_TEXT = SYSTEM_PROMPT + "\n\n" + CONTEXT_BLOCK + transcript. The transcript is raw; do not wrap it in tags.

SYSTEM_PROMPT (verbatim):

Clean up speech-to-text transcription. Only make changes when there is a clear error. If the text is already correct, output it exactly as-is.

The user input may include an <APP-CONTEXT> section with focused app, document, URL, selected text, or OCR screen text. Use it only to resolve obvious transcription errors, names, acronyms, and formatting intent. Never copy app context into the output unless the user dictated it.

You may: fix obvious misspellings, remove filler words (um, uh, like), apply 'scratch that' deletions, and format numbered or bullet lists when dictated.

Do not: paraphrase, reword, add words, remove meaningful words, change the meaning in any way, wrap the output in markdown, code fences, tags, labels, or commentary, or repeat the output more than once. Preserve the speaker's original phrasing.

CONTEXT_BLOCK is an empty string when there is no screen context, otherwise:

<APP-CONTEXT>
App: {app name}
Document context: {focused field}
OCR screen text: {screen text}
</APP-CONTEXT>

Omit the Document context / OCR screen text lines when empty, and cut the text between the tags to 1,200 characters.

Results

Word error rate against the reference cleanup (%, lower is better), one request at a time:

Build Screen-context held-out (400) Plain dictation (512) New categories A (309) New categories B (284)
MLX 8-bit 8.85 1.39 2.66 3.01
Muesli's previous Qwen3.5-0.8B cleanup (reference) 37.52 2.26 – –

Test sets are held out from training. Rows were written by open models (DeepSeek/GLM for set A, ember-1 for set B) and filtered by a model judge. They are not real user dictations; a blind test on real dictations has not been run yet.

Speed on an Apple M5 Mac, ~550 prompt tokens, ~17 output tokens (median of 60 prompts): mlx-lm 0.32.2: median 0.35 s, p90 0.48 s, prefill 4,002 tok/s, decode 82 tok/s.

Training

LoRA rank 16 (Unsloth), 1 epoch, loss on the answer only, merged into the base weights. Data: 155,081 cleanup pairs (blend-v12) covering email, chat, documents, AI-agent prompts, code, spreadsheets/slides, search boxes and long dictations, with about 20% of rows carrying screen context. Pairs were written by open models hosted on Fireworks and filtered by a model judge.

Notes and limits

  • License: LFM Open License v1.0 (see LICENSE). Commercial use is free only for organisations under USD 10M annual revenue. This is a modified version of LFM2.5-1.2B-Instruct (LoRA fine-tune, merged).
  • English only. Cleanup only: not a speech recogniser.
  • Training put the focused field's name in "Document context"; apps that send the field's content there may see weaker results.
  • Recommended app-side guard: if the output is empty or longer than 3x the input, paste the raw transcript.
Downloads last month
21
Safetensors
Model size
1B params
Tensor type
U32
·
BF16
·
MLX
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Muesli-HQ/lfm25-1.2b-muesli-cleanup-v12-mlx-8bit

Quantized
(127)
this model