Instructions to use 0x56696B/S1-mini-dev-dictation with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use 0x56696B/S1-mini-dev-dictation with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="0x56696B/S1-mini-dev-dictation") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("0x56696B/S1-mini-dev-dictation") model = AutoModelForCausalLM.from_pretrained("0x56696B/S1-mini-dev-dictation", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use 0x56696B/S1-mini-dev-dictation 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 0x56696B/S1-mini-dev-dictation:Q4_K_M # Run inference directly in the terminal: llama cli -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M # Run inference directly in the terminal: llama cli -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama cli -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M
Use Docker
docker model run hf.co/0x56696B/S1-mini-dev-dictation:Q4_K_M
- Llama new
- LM Studio
- Jan
- vLLM
How to use 0x56696B/S1-mini-dev-dictation with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "0x56696B/S1-mini-dev-dictation" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "0x56696B/S1-mini-dev-dictation", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/0x56696B/S1-mini-dev-dictation:Q4_K_M
- SGLang
How to use 0x56696B/S1-mini-dev-dictation with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "0x56696B/S1-mini-dev-dictation" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "0x56696B/S1-mini-dev-dictation", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "0x56696B/S1-mini-dev-dictation" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "0x56696B/S1-mini-dev-dictation", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use 0x56696B/S1-mini-dev-dictation with Ollama:
ollama run hf.co/0x56696B/S1-mini-dev-dictation:Q4_K_M
- Unsloth Desktop
- Pi
How to use 0x56696B/S1-mini-dev-dictation with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M
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": "0x56696B/S1-mini-dev-dictation:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use 0x56696B/S1-mini-dev-dictation with Docker Model Runner:
docker model run hf.co/0x56696B/S1-mini-dev-dictation:Q4_K_M
- Lemonade
How to use 0x56696B/S1-mini-dev-dictation with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull 0x56696B/S1-mini-dev-dictation:Q4_K_M
Run and chat with the model
lemonade run user.S1-mini-dev-dictation-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use 0x56696B/S1-mini-dev-dictation with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M
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 0x56696B/S1-mini-dev-dictation:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use 0x56696B/S1-mini-dev-dictation with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M
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 "0x56696B/S1-mini-dev-dictation:Q4_K_M" \ --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"
S1-mini-dev-dictation
This card is the README of the Hugging Face model repo. The
LICENSEandNOTICEfiles in that repo are S1-mini's own files.
This model is "S1-mini" by "Superwhisper", fine-tuned for dictating software engineering, DevOps and AI-tooling text. It is a modified version of superwhisper/s1-mini, itself a fine-tune of Qwen/Qwen3-0.6B. The input format, the output style and the control line are unchanged: it is a drop-in replacement for S1-mini.
Naming (licence term)
The LICENSE adds one term to Apache 2.0: any use, distribution, or integration of this model, whether unmodified or as part of a derivative work or product, must continue to identify it by its original name, "S1-mini" by "Superwhisper", using that exact capitalization, regardless of any other name under which the model or a product incorporating it is marketed or distributed. "S1-mini-dev-dictation" is only the name of this fine-tune. The model is S1-mini by Superwhisper.
What changed
Modified from S1-mini (Apache 2.0, section 4(b) notice):
- LoRA fine-tune (rank 16, scale 4.0, dropout 0.05) on every linear layer of all 28 blocks, trained with
mlx-lm at batch size 8 in two rounds. Round 1: 4 epochs at learning
rate 1e-4. Round 2: training continued from the round 1 adapter (
resume_adapter_file) on the old and the new rows at learning rate 5e-5 with gradient checkpointing, to remove stutters, repeated words and phrases, restarts and more filler sounds. The run was set to 2 epochs (553 iterations). The released round 2 adapter is the iteration 300 checkpoint, about 1.1 epochs (lowest saved validation loss: 0.269; the final one was 0.305). The loss covers the cleaned text only; the system prompt, control line, transcript and the empty<think>block are masked. - The adapter is merged into the bf16 weights. Architecture, vocabulary, tokenizer, chat template and system prompt are the original S1-mini files.
- GGUF builds (
Q8_0,Q4_K_M) are converted from the merged weights with llama.cpp.
Target behaviour added by the fine-tune (these are training targets, not measured results):
| Spoken (ASR) | Written |
|---|---|
so the a d o ticket needs the m c p config |
The ADO ticket needs the MCP config. |
queen three point five four b through sherpa on x |
Qwen3.5-4B through sherpa-onnx. |
tilde slash dot omp slash agent slash watchdog dot yml |
~/.omp/agent/WATCHDOG.yml |
whisper dot c p p with the d e r metric |
whisper.cpp with the DER metric |
we should we need to merge the p r first |
We need to merge the PR first. |
can you che check the the o m p server um |
Can you check the OMP server? |
the deploy is really really slow so run it with dash dash verbose |
The deploy is really really slow, so run it with --verbose. |
A leading filler "so" is dropped. Dictated requests are cleaned, never answered. Stutters (the the,
dep deploy), restarts and filler sounds (um, uh, er, om, aaa, ah, eh, mm, hmm, uhm, umm,
erm, ummm) are dropped, and a transcript of fillers only gives an empty output. Repeats that carry meaning
stay (really really, that that, --, spelled letters such as a a d). hmm is dropped in semi-formal and
formal; casual and semi-casual keep it, as S1-mini does.
Training data
Pairs of raw ASR-style transcripts and cleaned text. Round 1 used 1,248 rows (1,123 for training, 125 for validation):
- 249 pairs for the failure cases above, drafted with an AI assistant from the author's dictation style;
- 564 rows from sentence templates filled from a vocabulary list (written form, spoken forms, category), with injected fillers and self-corrections; the template outputs were drafted the same way;
- 36 transcripts cleaned by a larger model (Qwen3.5-9B) with a fixed instruction prompt, then read row by row (32 labels corrected);
- 399 synthetic general non-technical transcripts cleaned by stock S1-mini and then read row by row (59 labels corrected, 1 row dropped), to keep its general behaviour (anti-forgetting).
The round 1 rows cover all four styles (1,013 semi-formal, 81 formal, 78 casual, 76 semi-casual) and include 175
Context: email rows. 69 rows show a bullet list.
Round 2 trained on those rows plus:
- 86 more hand-written pairs: stutters on technical terms, restarts, filler sounds (
om,aaa,hmm, ...), filler-only input with an empty output, repeats that must stay (dash dash,slash slash, digits said one by one,that that,really really, spelled letters such asa a d), a few transcripts in the cased, punctuated shape some ASR engines write, and casual, semi-casual, formal, list and email variants; - rows from 52 new templates (stutters, restarts, repeats to keep, filler sounds) plus injected noise: filler sounds, repeated words, repeated phrases, part-word stumbles ("dep deploy") and whole terms said twice;
- a few hundred real dictations of the author, scrubbed of names and numbers with a private rules file (the import stops if a listed name or number survives). Each dictation is in the data as transcribed (cased, punctuated) and lowercased without punctuation, and both forms stay on the same side of the train/validation split. A sample of the dictations was held out for the evaluation.
Every row passes five checks: no number that the transcript does not say, no filler sound (um, uh, er, om,
ah, eh, mm, hmm, ...; hmm only in semi-formal and formal), no doubled word unless it is a real repeat
(that that, really really, ...), no bullets under Structure: prose, and no kept leading "so" in the
semi-formal and formal styles.
No customer or credential data is included. The held-out set (hand-written cases and the real dictations held out before training) was never trained on.
Usage
Identical to S1-mini. Send the system prompt and the control line exactly, decode greedily, and turn thinking off:
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL = "0x56696B/S1-mini-dev-dictation"
tok = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForCausalLM.from_pretrained(MODEL, torch_dtype="auto")
SYSTEM = (
"You are a text normalizer for speech-to-text transcripts. The input begins "
"with a control line specifying the styling, structure, and context settings; "
"clean the transcript to match those settings and output only the cleaned text."
)
control = "[Styling: semi-formal] [Structure: prose] [Context: general]"
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": f"{control}\nso the a d o ticket needs the m c p config"},
]
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, enable_thinking=False)
inputs = tok(text, return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(tok.decode(out[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
llama.cpp: llama-server -hf 0x56696B/S1-mini-dev-dictation:Q4_K_M --jinja --chat-template-kwargs '{"enable_thinking":false}' --temp 0.
Ollama: create a Modelfile that starts the assistant turn with the empty think block, set
PARAMETER repeat_penalty 1 and PARAMETER temperature 0, and send "think": false with every request.
Evaluation
Held-out set: 109 cases never used in training (59 round 1 cases, 25 stutter and filler cases, 25 scrubbed real dictations), scored on the Q4_K_M GGUF through Ollama (greedy).
| model | cases | exact match | word accuracy | char accuracy |
|---|---|---|---|---|
| S1-mini-dev-dictation, round 1 | 109 | 68.8% | 90.6% | 94.1% |
| S1-mini-dev-dictation, round 2 (this model) | 109 | 73.4% | 92.1% | 95.2% |
By group (exact match, round 1 โ round 2): round 1 cases 50 โ 52 of 59, stutter cases 19 โ 23 of 25, real dictations 6 โ 5 of 25 (word accuracy 77.2% โ 76.9%). The real dictation labels rephrase the speech, so exact match on them is low for both rounds.
Round 1 on its 59 original cases against the base model:
| model | cases | exact match | word accuracy | char accuracy |
|---|---|---|---|---|
| S1-mini (base) | 59 | 32.2% | 78.2% | 91.0% |
| S1-mini-dev-dictation, round 1 | 59 | 84.7% | 93.8% | 97.3% |
On the ten examples in the S1-mini card (semi-formal, formal and casual, plus a list and an email) round 1 matches the card output in 9 and the base Q4_K_M build in 7. Round 2 was not checked on them.
Limitations
- English only, tuned to one speaker's dictation vocabulary. Terms outside the training vocabulary get no
special handling:
tsconfig.jsonandparakeet-unified-en-0.6bare not built from the spoken parts. Structure: listsandContext: emailare not a focus of the fine-tune. In round 1 it reproduced the list example in the S1-mini card but dropped that example's leading "So", and one three-itemlistscase in the held-out set stayed prose.- Known held-out failures of round 1 (9 of 59): the
WATCHDOG.ymlfile name comes out lowercase,pyannoteandWezTermget a wrong capital, a sentence after a spoken "period" can start lowercase, spoken "colon" and "new line" can stay words, and one email case gets an extra comma. - Long run-on dictations: in a round 1 spot check of 15 long real dictations kept out of the training data, 4 outputs lost or changed words (a dropped clause, a dropped opening phrase, a rarely seen name replaced by a trained term). The base model kept more of the text there. Compare long outputs with the input.
- Inherits the limits of S1-mini and Qwen3-0.6B. Check the output before you rely on it.
License
Apache License 2.0 plus the S1-mini naming term, the same terms as S1-mini. LICENSE and NOTICE are
included unchanged. S1-mini is Copyright 2026 Superwhisper and a derivative of Qwen3-0.6B, Copyright 2024
Alibaba Cloud.
Citation
@misc{s1mini2026,
title = {S1-mini: a small text normalizer for speech-to-text output},
author = {Superwhisper},
year = {2026},
url = {https://huggingface.co/superwhisper/s1-mini}
}
@misc{qwen3technicalreport,
title = {Qwen3 Technical Report},
author = {Qwen Team},
year = {2025},
eprint = {2505.09388},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2505.09388}
}
- Downloads last month
- 530