Amnis Light cleanup — English v1
Turn spoken English into readable text.
Made by Amnis, this small dictation cleanup model takes a raw speech-to-text transcript and returns cleaner writing. It removes common fillers, adds punctuation and capitalization, and smooths spoken phrasing while aiming to keep the speaker's meaning.
It accepts text, not audio. Put it after a speech recognizer such as Whisper or Parakeet:
Speech → speech recognition → Amnis Light cleanup → cleaned text
This is an English-only, single-style cleanup model. It is not trained for translation, email composition, custom writing styles, or general chat. It can make meaningful mistakes; see the actual examples and limitations below.
Try Amnis · Download the model · License
Model at a glance
| Base | Qwen3-0.6B, full-parameter fine-tune |
| Task | English dictation transcript cleanup |
| Input / output | Plain-text transcript / cleaned plain text |
| Published format | GGUF, Q4_K_M |
| Download size | 396.7 MB / 378.3 MiB |
| Tested context | 4,096 tokens, including input and output |
| Decoding | Greedy; thinking disabled |
This repository contains the quantized GGUF release. Use a compatible llama.cpp runtime; it does not contain the full-precision Transformers checkpoint.
Quickstart with llama.cpp
Install llama.cpp, then download the model. No Hugging Face account or token is required.
curl -L --fail \
'https://huggingface.co/DRTR-J/amnis-light-cleanup-en-v1/resolve/c9f2ff365554d4dca9428b457213e401f6172401/amnis-light-cleanup-en-v1.gguf' \
-o amnis-light-cleanup-en-v1.gguf
Start a local server. Keep the native Qwen chat template and disable thinking:
llama-server \
--model amnis-light-cleanup-en-v1.gguf \
--alias amnis-light-cleanup-en-v1 \
--host 127.0.0.1 --port 8080 \
--ctx-size 4096 --parallel 1 \
--n-gpu-layers 99 \
--cache-type-k f16 --cache-type-v f16 \
--jinja --chat-template-kwargs '{"enable_thinking":false}' \
--temp 0 --repeat-penalty 1
Send one user message, starting with Clean up text. followed by two newlines. Do not add a system message, style controls, or a conversation history.
curl --fail http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "amnis-light-cleanup-en-v1",
"messages": [{
"role": "user",
"content": "Clean up text.\n\num could you send me the updated agenda before lunch"
}],
"temperature": 0,
"repeat_penalty": 1,
"presence_penalty": 0,
"max_tokens": 2048,
"cache_prompt": false,
"chat_template_kwargs": {"enable_thinking": false},
"stream": false
}'
Read choices[0].message.content from the JSON response:
Could you send me the updated agenda before lunch?
The short instruction and non-thinking template are part of the tested input format. Changing them can change the output. On CPU-only builds, use --n-gpu-layers 0; the Mac GPU timings below do not apply to CPU inference.
Actual examples
These are outputs from the released Q4_K_M file, tested on 9 September 2026 with the settings above. The inputs were written for this model card; they are not customer transcripts. Outputs are shown without editorial corrections.
| Raw transcript | Model output |
|---|---|
| um could you send me the updated agenda before lunch | Could you send me the updated agenda before lunch? |
| please don't cancel the booking just change the arrival time to six | Please don't cancel the booking. Just change the arrival time to six. |
| i'm not sure the estimate includes shipping can you check before we approve it | I'm not sure the estimate includes shipping. Can you check before we approve it? |
| we need twelve chairs and three tables for the workshop | We need twelve chairs and three tables for the workshop. |
| the total is forty eight dollars and fifty cents | The total is forty-eight dollars and fifty cents. |
Spoken numbers may remain written as words. Do not depend on conversion to digits, currency symbols, or formatted dates.
Input
hey Maya um thanks for sending the revised plan i looked through it this morning and the overall approach makes sense i have two small changes could we move the review meeting from tuesday to wednesday and give the design team one more day to check the screenshots please keep the budget at twelve thousand dollars for now we can revisit it after the supplier sends the final quote also i don't want to announce a launch date yet let's wait until the remaining tests are complete i'll update the schedule this afternoon and send it over before five thanks again for pulling everything together
Output
Maya, thanks for sending the revised plan. I looked through it this morning and the overall approach makes sense. I have two small changes. Could we move the review meeting from Tuesday to Wednesday and give the design team one more day to check the screenshots? Please keep the budget at twelve thousand dollars for now. We can revisit it after the supplier sends the final quote. I don't want to announce a launch date yet. Let's wait until the remaining tests are complete. I'll update the schedule this afternoon and send it over before five.
The closing thanks was removed. This model aims for light cleanup, but does not guarantee that every phrase survives.
Speed: time to the complete output
Measured locally on an Apple M4 Pro with 48 GB unified memory, macOS 26.6.2, using llama.cpp 8191 (24350fdf9) with Metal GPU offload. Q4_K_M weights, F16 KV cache, 4,096-token context, one slot, greedy decoding, thinking off.
Each example had one untimed warm-up request followed by five timed requests. The model was already loaded; prompt caching was disabled. Times include the local HTTP request and generation through the complete response, not just the first token.
| Example above | Input words | Output tokens | Median | Observed range |
|---|---|---|---|---|
| Agenda before lunch | 10 | 11 | 128 ms | 98–165 ms |
| Don't cancel the booking | 12 | 16 | 100 ms | 97–171 ms |
| Check shipping | 14 | 18 | 181 ms | 114–210 ms |
| Longer message | 105 | 111 | 799 ms | 743–880 ms |
Word counts are whitespace-delimited; tokens use the model's tokenizer. This small run excludes model download/loading, microphone capture, speech recognition, and insertion into another app. Other machine activity was not controlled. These are measurements on one Mac, not latency guarantees or a comparison with another model. All example outputs and timing samples are included for inspection.
A separate coexistence test measured 67 / 208 / 563 ms on different 12 / 44 / 127-word transcripts on the same Mac, with three requests per case. The corresponding 64 / 209 / 561 ms results measured this same Light model with a general model loaded but idle. That experiment tested coexistence, not Light versus general-model generation speed. It did not test simultaneous generation or transcription.
The 378.3 MiB download size is not the RAM requirement. Earlier runs observed about 978 MiB worker RSS for three short cases and roughly 2.1 GiB over a 100-case run. RSS does not capture the full system/Metal memory impact.
Integration and limits
- Keep the original transcript. The model can omit details or change meaning. Compare important facts, names, negations, and requests before using the result.
- Reserve room for the output. The tested setup uses a 4,096-token context with up to 2,048 output tokens. Count the fully templated input, including special tokens. If it does not fit with that reserve, route the whole transcript to a suitable alternative. Do not silently truncate it.
- Check completion. If
finish_reasonislength, the output may be cut off. Handle failures and incomplete output without losing the original transcript. - Use English input and the exact prompt. Other languages, mixed-language dictation, translation, and custom styles have not been validated.
Two examples show why a fallback matters:
| Input | Actual output | Problem |
|---|---|---|
| i i can take the first draft and uh Maya can review it tomorrow | Maya can review the first draft tomorrow. | Drops the speaker's commitment to write the draft. |
| let's move the call to tuesday no sorry wednesday at ten | Let's move the call to Tuesday. No, sorry, Wednesday at ten. | Leaves the correction in the text instead of resolving it. |
Internal evaluation used an LLM judge with an Amnis-calibrated rubric. On one frozen 100-case dictation set, 95 outputs were judged usable, 30 send-ready, and five had material errors. A separate 100-case short-dictation set scored 95 usable, 71 send-ready, and five material errors. These small internal sets are not a standardized accuracy benchmark or a promise of a 5% error rate in your application.
Built by Amnis
Amnis built this model for its optional Light cleanup feature. On Mac, the setting is off by default and appears for English-only, on-device dictation with local AI access. It applies to Clean mode, including Automatic when it resolves to Clean; Instant bypasses cleanup. Other writing modes use Amnis's existing models.
The model was fine-tuned from the official post-trained Qwen3-0.6B checkpoint with MLX-LM: 2,700 training pairs, 300 validation pairs, full-parameter supervised fine-tuning, 2,700 updates, and a 4,096-token training sequence limit. Training data and transcript-level evaluation records are not distributed in this repository.
License and attribution
This public release currently permits personal and commercial dictation with the Amnis application under the Amnis runtime terms. Those terms do not grant reuse or redistribution in other applications. Public download access and permission to redistribute are separate. See NOTICE for attribution; no Amnis or Qwen trademark rights are granted.
Built on Qwen/Qwen3-0.6B. Its upstream license is retained in LICENSE.qwen.
If you share work using the model, please credit Amnis Light cleanup and link to amnis.one and this repository.
Pinned artifact: revision c9f2ff365554d4dca9428b457213e401f6172401; file amnis-light-cleanup-en-v1.gguf; SHA-256 1f31e00ebbf3c760a6a370e642d3ca50824e14a71bda9f4f94a5778704886cfd.