Instructions to use ductai199x/utter with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use ductai199x/utter with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf ductai199x/utter:Q4_0 # Run inference directly in the terminal: llama cli -hf ductai199x/utter:Q4_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf ductai199x/utter:Q4_0 # Run inference directly in the terminal: llama cli -hf ductai199x/utter:Q4_0
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf ductai199x/utter:Q4_0 # Run inference directly in the terminal: ./llama-cli -hf ductai199x/utter:Q4_0
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf ductai199x/utter:Q4_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf ductai199x/utter:Q4_0
Use Docker
docker model run hf.co/ductai199x/utter:Q4_0
- LM Studio
- Jan
- Ollama
How to use ductai199x/utter with Ollama:
ollama run hf.co/ductai199x/utter:Q4_0
- Unsloth Desktop
- Pi
How to use ductai199x/utter with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ductai199x/utter:Q4_0
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "ductai199x/utter:Q4_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use ductai199x/utter with Docker Model Runner:
docker model run hf.co/ductai199x/utter:Q4_0
- Lemonade
How to use ductai199x/utter with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull ductai199x/utter:Q4_0
Run and chat with the model
lemonade run user.utter-Q4_0
List all available models
lemonade list
- Hermes Agent
How to use ductai199x/utter with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ductai199x/utter:Q4_0
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default ductai199x/utter:Q4_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use ductai199x/utter with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf ductai199x/utter:Q4_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "ductai199x/utter:Q4_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
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.
- 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
- 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
4-bit
Model tree for ductai199x/utter
Base model
google/gemma-4-E2B