Utter cleanup models

The cleanup models of Utter, a local voice dictation app. They take what the speech recognizer (NVIDIA Parakeet) heard and return the text the speaker meant to type:

  • Punctuation and capitals nobody said.
  • Spoken symbols and numbers written as people type them ("four x faster" -> "4× faster", "about two forty" -> "~240").
  • Fillers and false starts removed.
  • Corrections applied: "at 2, actually 3"; "scratch that" (the last sentence); "let's start over" (everything).
  • Far-back edits: "actually, change the eggs to three boxes".
  • Spoken lists as bullets, numbered for steps.
  • Grammar fixed, in the speaker's own words.
  • The person's own words spelled right when they are in their dictionary.
  • Dictated text is typed, never answered: a question or an instruction to an AI comes out as text.

Utter offers two, and the person chooses in the app.

Files

File Model What
utter-quality-v2-q4_0.gguf Quality, v2 Gemma 4 E4B fine-tuned, Q4_0, for llama.cpp (b11535 or later); about 3.3 GB of GPU memory when the per-layer embeddings stay in system RAM
adapters/utter-quality-v2/ Its LoRA adapter (rank 16) on the base checkpoint, for merging or further training
utter-light-v2-q4_0.gguf Light, v2 Gemma 4 E2B fine-tuned, Q4_0; about 1.8 GB of GPU memory, for machines with little of it (Utter then runs speech recognition on the CPU)
adapters/utter-light-v2/ Its LoRA adapter (rank 16)

v1 (utter-quality-v1-q4_0.gguf, utter-light-v1-q4_0.gguf and their adapters) stays here: it was trained before the data was published, on pairs that overlap today's test split.

How it must be prompted

The rules are in the weights, so the system prompt is short, and it must be exactly this:

Turn this dictation into the text the speaker meant to type: punctuated, formatted and corrected the way a careful writer would type it, in the speaker's own words.

The user message is the transcript after Dictated: , optionally preceded by context lines:

App: email
Before: "text before the cursor"
Lists: off
Dictionary: Utter, Nguyen
Dictated: <what the recognizer heard>

Dictionary: carries only the person's terms that sound like something in this dictation, not the whole list. The reply is the cleaned text only. Thinking must be off (chat_template_kwargs: {"enable_thinking": false}).

Training

  • Method: LoRA (rank 16, alpha 32) on Google's unquantized QAT checkpoint of Gemma 4 (E4B for Quality, E2B for Light), then merged and quantized to Q4_0, the format the QAT was trained for.
    • Both tiers, one recipe: one pass over the train split of ductai199x/dictation-to-text (79,246 pairs), lr 2e-4, 1 epoch. A share of the pairs carry Dictionary: lines: some hold the right spelling of a misheard word, some near-miss words that must not be forced in.
  • Data: pairs of (recognizer output, intended text):
    • Written side: real passages from Common Pile (Stack Exchange, GitHub, arXiv abstracts, Ubuntu IRC) and Wikipedia, plus lists and LLM-written everyday messages.
    • Spoken side: written by Gemma 4 26B-A4B in eight kinds (plain, spoken punctuation, disfluent, self-correction, retraction command, sentence restatement, grammar mistakes, far-back edit), checked by code, spoken by Kokoro TTS and recognized by Parakeet.
  • Answer keys: fixed for typos and grammar, with each fix verified as grammar by ERRANT.
  • Held out: the dataset splits by passage; no test or evaluation passage was trained on.

Evaluation

Ready to send: the share of dictations a careful writer would send exactly as typed. Gemma 4 26B-A4B judges each one against the intended text, with a rubric calibrated on human review.

Test sets:

  • Realistic: 950 held-out dictations, everyday messages, emails, notes and AI prompts plus short real forum and chat posts. Each is spoken one way: plainly, with fillers, a self-correction, a command, a later edit, spoken punctuation or broken grammar.
  • Directed: 292 dictations of questions, requests to AI assistants, instructions to coding agents, and text telling the dictation app itself to do something.
Ready to send Quality v2 Light v2
Realistic, Kokoro voices 88.1% 85.4%
Realistic, with a 300-term dictionary 87.8% 85.7%
Realistic, unseen Chatterbox voices 80.1% 75.5%
Directed, with a dictionary 87.7% 83.6%
Cleanup time, median (RTX 3090 Ti) about 250 ms about 180 ms

Known gaps:

  • A leading filler with a comma ("Uh, so...") can survive.
  • Pronoun case ("me and him went") is not always fixed.
  • Speech in the evaluation is synthetic (two TTS engines), not recorded dictation.

License

Apache 2.0, as the base model. The training text came from openly licensed sources (public domain, CC0, CC BY-SA, MIT, Apache-2.0).

Downloads last month
133
GGUF
Model size
5B params
Architecture
gemma4
Hardware compatibility
Log In to add your hardware

4-bit

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

Model tree for ductai199x/utter

Adapter
(5)
this model