Instructions to use whisperstream/stream-1-mini 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 whisperstream/stream-1-mini 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 whisperstream/stream-1-mini:F16 # Run inference directly in the terminal: llama cli -hf whisperstream/stream-1-mini:F16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf whisperstream/stream-1-mini:F16 # Run inference directly in the terminal: llama cli -hf whisperstream/stream-1-mini:F16
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 whisperstream/stream-1-mini:F16 # Run inference directly in the terminal: ./llama-cli -hf whisperstream/stream-1-mini:F16
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 whisperstream/stream-1-mini:F16 # Run inference directly in the terminal: ./build/bin/llama-cli -hf whisperstream/stream-1-mini:F16
Use Docker
docker model run hf.co/whisperstream/stream-1-mini:F16
- Llama new
- LM Studio
- Jan
- vLLM
How to use whisperstream/stream-1-mini with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "whisperstream/stream-1-mini" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "whisperstream/stream-1-mini", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/whisperstream/stream-1-mini:F16
- Ollama
How to use whisperstream/stream-1-mini with Ollama:
ollama run hf.co/whisperstream/stream-1-mini:F16
- Unsloth Desktop
- Docker Model Runner
How to use whisperstream/stream-1-mini with Docker Model Runner:
docker model run hf.co/whisperstream/stream-1-mini:F16
- Lemonade
How to use whisperstream/stream-1-mini with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull whisperstream/stream-1-mini:F16
Run and chat with the model
lemonade run user.stream-1-mini-F16
List all available models
lemonade list
- Atomic Chat
|
Download README.md from whisperstream/stream-1-mini: direct link, hf CLI and curl.
- Browser
- Download file 10.6 kB
-
https://huggingface.co/whisperstream/stream-1-mini/resolve/main/README.md
- Command line
-
hf download hf://whisperstream/stream-1-mini/README.md
-
curl -L -o README.md https://huggingface.co/whisperstream/stream-1-mini/resolve/main/README.md
10.6 kB
| license: other | |
| license_name: stream-1-mini-license | |
| license_link: LICENSE | |
| language: | |
| - en | |
| base_model: Qwen/Qwen3-0.6B-Base | |
| base_model_relation: finetune | |
| pipeline_tag: text-generation | |
| tags: | |
| - qwen3 | |
| - dictation | |
| - text-normalization | |
| - text-generation | |
| - gguf | |
| # Stream-1 Mini by Whisperstream | |
| Stream-1 Mini turns English dictation transcripts into clean Chat and Email | |
| text on your own device. It is trained to remove fillers and accidental repeats, | |
| add punctuation, and resolve spoken corrections while preserving your meaning | |
| and voice. Email mode also formats dictated greetings, paragraphs and sign-offs. | |
| This revision adds optional custom-vocabulary hints while retaining structural | |
| dictation and numbered-list support. Use these prompts and weights together. | |
| Candidates are spelling hints, not forced substitutions. Known cleanup and entity | |
| errors remain; this revision does not establish zero regressions. | |
| Pass in text from your speech recognizer. Stream-1 Mini returns the cleaned text. | |
| | Specification | Value | | |
| | --- | --- | | |
| | Task | English dictation cleanup | | |
| | Modes | Chat and Email | | |
| | Base model | [Qwen3-0.6B-Base](https://huggingface.co/Qwen/Qwen3-0.6B-Base/tree/da87bfb608c14b7cf20ba1ce41287e8de496c0cd) | | |
| | Parameters | 751,632,384, with separate input embeddings and output weights | | |
| | Formats | Full-precision FP32 Safetensors, F16 GGUF and Q4_K_M GGUF | | |
| | GGUF download | 484,215,648 bytes (about 484 MB) | | |
| | Tested context | 4,096 tokens, with up to 512 output tokens | | |
| | License | [Stream-1 Mini License](LICENSE), permitting commercial use with attribution | | |
| ## Structural dictation | |
| The intended behavior is to convert in-place commands while preserving literal | |
| content. These examples describe the policy, not additional measured tests: | |
| | Dictation cue | Intended output | | |
| | --- | --- | | |
| | new line | One line break | | |
| | new paragraph | A blank line | | |
| | exclamation mark / exclamation point | `!` | | |
| | Packing list. Bullet point socks. Bullet point charger. | A lead-in followed by two bullet items | | |
| | First, passport. Second, charger. Third, jacket. | Three numbered items | | |
| Keep phrases such as "a new line of products" and "Please turn the report into | |
| bullet points" as dictated text. Spoken period, full stop, comma and question | |
| mark conversion is outside this release's structural-command scope. | |
| ## Quickstart | |
| Use Python 3, the | |
| [Hugging Face CLI](https://huggingface.co/docs/huggingface_hub/guides/cli) (`hf`), and | |
| [llama.cpp b10537](https://github.com/ggml-org/llama.cpp/releases/tag/b10537). | |
| Download the model and its prompts into a local folder: | |
| ```shell | |
| hf download whisperstream/stream-1-mini stream-1-mini-vocabulary-q4_k_m.gguf prompts.json chat_template.jinja vocabulary_contract.py --local-dir stream-1-mini | |
| ``` | |
| Start the CPU server. On Windows, the executable may be named `llama-server.exe`. | |
| ```shell | |
| llama-server -m stream-1-mini/stream-1-mini-vocabulary-q4_k_m.gguf --host 127.0.0.1 --port 8080 -c 4096 -b 256 -t 6 -np 1 -ngl 0 --chat-template-file stream-1-mini/chat_template.jinja | |
| ``` | |
| Save this as `clean.py` beside the `stream-1-mini` folder. It sends one dictation | |
| to the local server: | |
| ```python | |
| import json | |
| import sys | |
| from pathlib import Path | |
| from urllib.request import Request, urlopen | |
| prompts = json.loads(Path("stream-1-mini/prompts.json").read_text(encoding="utf-8")) | |
| sys.path.insert(0, str(Path("stream-1-mini").resolve())) | |
| from vocabulary_contract import render_messages | |
| vocabulary = [] # Optional relevant dictionary spellings, not the entire dictionary. | |
| mode = "chat" # Use "email" for Email mode. | |
| transcript = "um let's meet on tuesday no wednesday at three pm" | |
| payload = { | |
| "messages": render_messages(prompts[mode], transcript, vocabulary), | |
| "temperature": 0, | |
| "top_k": 1, | |
| "top_p": 1, | |
| "repeat_penalty": 1, | |
| "max_tokens": 512, | |
| "cache_prompt": True, | |
| "chat_template_kwargs": {"enable_thinking": False}, | |
| } | |
| request = Request( | |
| "http://127.0.0.1:8080/v1/chat/completions", | |
| data=json.dumps(payload).encode("utf-8"), | |
| headers={"Content-Type": "application/json"}, | |
| ) | |
| with urlopen(request, timeout=120) as response: | |
| choice = json.load(response)["choices"][0] | |
| if choice["finish_reason"] != "stop": | |
| raise RuntimeError("Cleanup did not finish. Keep the original transcript.") | |
| print(choice["message"]["content"]) | |
| ``` | |
| In another terminal, run `python clean.py` from that same folder. Change `mode` | |
| to `"email"` and replace `transcript` to try Email mode. Keep each request limited | |
| to its current transcript. | |
| ## Files | |
| The full-precision distribution contains four FP32 Safetensors shards, their | |
| index, tokenizer, configuration and chat template. It supports further | |
| modification without starting from quantized weights. Those full-precision | |
| weights are the retained source of the GGUF conversion; the evaluation below | |
| applies specifically to Q4_K_M with the stated serving setup. | |
| `stream-1-mini-f16.gguf` provides the 16-bit GGUF export for llama.cpp-compatible | |
| runtimes. It contains 1,509,343,072 bytes (about 1.51 GB). | |
| `stream-1-mini-vocabulary-q4_k_m.gguf` is the selected inference artifact. It contains | |
| 484,215,648 bytes; SHA256: | |
| ```text | |
| 32bef61bdbc98787ac278d96a2aad120a9fc61f588f1f0a4746441e9d6d89ae7 | |
| ``` | |
| `prompts.json` contains the exact Chat and Email system prompts. Keep these | |
| prompts and the supplied template together with the model. See `LICENSE`, | |
| `LICENSE-APACHE-2.0`, and `NOTICE` for terms and attribution. | |
| ## Integration notes | |
| > [!IMPORTANT] | |
| > Use the chosen mode's system prompt and one user message containing only the | |
| > current transcript, enclosed by `<TRANSCRIPT>` and `</TRANSCRIPT>`. An optional | |
| > JSON `<VOCABULARY>` block follows it; append the canonical spelling exception | |
| > to the system prompt only when the block is nonempty. The supplied | |
| > `vocabulary_contract.py` renders this exact contract (32 terms, 512 UTF-8 bytes). Render with | |
| > the supplied plain ChatML template, add the assistant generation prefix and | |
| > do not inject a thinking preamble or conversation history. | |
| The full regression collection used llama.cpp b10537 on Vulkan. CPU app smoke | |
| checks are separate runtime evidence. Use the evaluated greedy contract with | |
| 4,096-token context, batch size 256, one slot and one request at a time. | |
| Decode greedily: temperature 0, top-k 1, top-p 1, repeat penalty 1, and at most | |
| 512 output tokens. Stop at the end-of-turn token. The training/export stop IDs | |
| are 151643 and 151645; the GGUF end-of-turn ID is 151645. | |
| Enable prefix caching and keep Chat and Email sessions separate. Reuse a prompt | |
| prefix without adding earlier dictations to the current request. Reject | |
| incomplete or invalid generations and retain the original transcript when | |
| cleanup fails. Users should be able to inspect and recover the original text. | |
| ## Training and evaluation | |
| This revision continues the published v2 model with a balanced cleanup, | |
| structural/list and vocabulary mixture. The selected terminal checkpoint used | |
| training seed 23 and 648 optimizer updates. Training data and internal transcripts | |
| are not distributed. FP32 and F16 files retain the conversion source; evaluation | |
| applies specifically to Q4_K_M with the fixed prompts, decoder and cache contract. | |
| The selected candidate completed 3,409 registered requests, including all 1,600 | |
| historical C/D/E cleanup memberships, structure/list tests, vocabulary tests, | |
| preservation controls and actual production chunk requests. These are observed | |
| benchmark cases, with repeated memberships; they are not independent production | |
| events or untouched confirmation. | |
| Provisional delivered cleanup counts across those 1,600 memberships are 1,216 | |
| pass, 12 warning, 202 hard failure, 53 critical failure and 117 unresolved. | |
| Unresolved judgments are not passes. Later focused feature review retained | |
| substantial vocabulary gains as well as failures: | |
| | Fresh positive-repair condition / 60 | Previous v2 pass / unresolved | This revision pass / unresolved | | |
| | --- | ---: | ---: | | |
| | Supplied vocabulary | 7 / 1 | 31 / 11 | | |
| | Retrieved vocabulary | 13 / 2 | 30 / 9 | | |
| These purposively difficult cases do not estimate production recovery rates. | |
| Feature success requires the whole output, not just inclusion of a target name. | |
| Supplied-list negative controls can worsen even where vocabulary repair improves. | |
| Known critical regressions include deleting an independent reported account and | |
| substituting a distractor entity for a protected ordinary phrase. | |
| Twenty separate observed-case CPU app calls completed without transport failures, | |
| timeouts or output caps. On the measured host, median request time was 0.97 s, | |
| maximum 2.54 s and peak server working set about 0.96 GiB. These are runtime smoke | |
| measurements, not quality qualification, whole-app RAM or microphone-to-insertion | |
| latency. Three of six paired repeats differed byte-for-byte; one repeat reversed | |
| an explicit host correction. Greedy settings and prefix reuse do not guarantee | |
| identical outputs across cache histories. | |
| Fresh untouched confirmation was waived for this publication. Remaining critical | |
| errors and unresolved judgments are disclosed, not rescored as passes. No claim | |
| of general non-regression, CPU/GPU equivalence or dependable laptop tail latency | |
| is made. Verify consequential names, numbers, conditions and corrections. | |
| ## Limitations | |
| > [!WARNING] | |
| > The model can change meaning, retain an incorrect number after a correction, | |
| > or infer the wrong numeric scale. Review names, numbers, restrictions and | |
| > other consequential details before relying on cleaned text. | |
| This release has not established support for code, arbitrary style controls, | |
| multilingual cleanup or general question answering. Instructions within a | |
| transcript should remain dictated content, except the supported in-place | |
| structural dictation cues described above. The model has not been validated | |
| for medical, legal or other high-stakes decisions. Smaller quantizations and | |
| changed prompts may behave differently. | |
| ## License | |
| > [!IMPORTANT] | |
| > Personal and commercial use, modification and redistribution are permitted | |
| > under the [Stream-1 Mini License](LICENSE), which combines Apache-2.0 terms | |
| > with an identification requirement for **Stream-1 Mini by Whisperstream**. | |
| > This is a custom license, not unmodified Apache-2.0. See the license for | |
| > permitted attribution locations and treatment of modified versions. | |