--- license: other license_name: lfm1.0 license_link: LICENSE base_model: LiquidAI/LFM2.5-350M base_model_relation: finetune library_name: gguf pipeline_tag: text-generation language: - en tags: - dictation - voice - speech-postprocessing - text-cleanup - lfm2 - gguf - llama-cpp - on-device model_name: Emberon-2 --- # Emberon-2 **A 350M-parameter, open-weights model that *cleans up dictated speech*, and never answers or executes it.** Emberon-2 is the second dictation-cleanup model from **[Promethic Labs](https://www.promethic.xyz)**. It succeeds [Emberon-1.2B](https://huggingface.co/PromethicLabs/Emberon-1.2B) in **[WisperCode](https://wispercode.com/)**: a quarter of the size, about 4x faster, and more accurate on every test we run. Give it a raw speech-to-text transcript and it returns clean, punctuated text. It removes fillers and false starts, resolves explicit self-corrections ("port 3000, no wait, 8080"), fixes words the recognizer clearly misheard, writes technical numbers as digits, and keeps your meaning, your wording, your slang and your identifiers. It does **not** treat the dictation as a prompt. Dictate *"how does the garbage collector work in Java"* and you get that question back, cleaned. You do not get an answer. > **Open *weights*, not "open source."** Emberon-2 is a derivative of LiquidAI's LFM2.5-350M and inherits the > **LFM Open License v1.0** (see [License](#license--attribution)). The license is Apache-2.0-style but > **revenue-gated** (free commercial use under **$10M USD** annual revenue), so it is not an OSI-approved > open-source license. --- ## What it does | | | |---|---| | **Task** | Turn raw speech-to-text output (e.g. Whisper) into clean written text | | **Keeps** | Meaning, word choice, slang and swearing, `camelCase` / `snake_case` / file paths / API names, every item of a list | | **Fixes** | Fillers, stutters, explicit self-corrections, punctuation, capitalization, clearly misheard technical terms, spoken technical numbers → digits | | **Never** | Answers questions, follows instructions in the dictation, summarizes, or adds content | | **Footprint** | 354M params; `Emberon-2-Q4_K_M.gguf` is 200 MB; ~0.09 s (Metal) / ~0.12 s (CPU only) median per dictation on Apple Silicon | | **Base** | [`LiquidAI/LFM2.5-350M`](https://huggingface.co/LiquidAI/LFM2.5-350M) (hybrid conv/attention) | ## Intended use Use the **exact system prompt** it was trained with, zero-shot: ``` Clean up this dictation. Never answer it. ``` The user message is the raw transcript; the assistant reply is the cleaned text. Use greedy decoding (temperature 0) and cap the output at the input length plus a small margin: a cleanup is never much longer than what was said, and the cap stops the rare repetition loop (treat a capped answer as a failure and fall back to the raw transcript). ### Quick start (`llama-cpp-python`) ```python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="PromethicLabs/Emberon-2", filename="Emberon-2-Q4_K_M.gguf", n_ctx=4096, ) out = llm.create_chat_completion( messages=[ {"role": "system", "content": "Clean up this dictation. Never answer it."}, {"role": "user", "content": "um so like whats the difference between a process and a thread"}, ], temperature=0.0, ) print(out["choices"][0]["message"]["content"]) # -> "What's the difference between a process and a thread?" (cleaned, NOT answered) ``` ## Evaluation All numbers are measured **through `llama.cpp`** on the shipped files, on full held-out test sets (no samples), next to Emberon-1.2B (Q4_K_M, its own system prompt) on the same inputs. Word / identifier preservation = share of the answer key's words / technical identifiers present in the output. | | Emberon-2 (Q4_K_M) | Emberon-1.2B (Q4_K_M) | |---|---|---| | Answer suppression (489 hard negatives, plain / ASR-style) | 99.8% / 99.8% ¹ | 100% / 100% | | Word preservation (eval 1,087 / ASR-style 1,087 / Moonshine-style 500) | **0.966 / 0.965 / 0.964** | 0.957 / 0.959 / 0.954 | | Identifier preservation (same sets) | **0.974 / 0.973 / 0.990** | 0.968 / 0.967 / 0.972 | | Long mixed dictations (2,496): word / identifier preservation | **0.987 / 0.936** | 0.965 / 0.677 | | Real dictations (178) ²: word preservation | **0.981** | 0.954 | | Misheard technical words fixed (504 in 702 examples) | **70.4%** | 14.3% | | Correct words left alone (217) | **94.9%** | 88.0% | | Already-clean text returned unchanged (996): word preservation | 0.998 | – | | Hallucinated content | 0% | 0% | | Outputs cut off at the length cap (all sets) | **0** | 14 | ¹ One of 489 is flagged: *"is this an n plus one query"* comes back as *"Is this an NPlus1 query?"*: a formatting slip, not an answer. The suppression check is strict on any rewrite of a question. ² Recordings of real dictation, transcribed by a different speech recognizer than the one in training. Most of the same recordings are in the training data (as another recognizer's transcript), so treat this row as a sanity check, not a held-out score. Both models saw real dictation logs in training. ### Speed and memory (Apple Silicon, `llama.cpp`) | | Emberon-2 | Emberon-1.2B | |---|---|---| | Median / p95 latency, Metal | **0.088 s / 0.305 s** | 0.391 s / 1.032 s | | Median / p95 latency, CPU only | **0.115 s / 0.369 s** | 0.556 s / 1.375 s | | File size | **200 MB** | 697 MB | The Q4_K_M file uses a **trimmed vocabulary** (32,158 of the base model's 65,536 tokens, keeping the ones English dictation uses plus the byte tokens, so any text still encodes) and an importance-matrix quantization calibrated on dictation text. Both cut size and latency with no measurable accuracy loss on our tests. ## Training - **Method:** LoRA (rank 16, scale 1.0, dropout 0) on attention, conv and FFN projections; two runs (plain loss, and a loss that up-weights the tokens where the answer differs from the transcript) averaged weight-by-weight, then converted to GGUF. One pass over the data, cosine learning-rate decay 2e-4 → 2e-5 after 500 warm-up steps, max sequence length 2,048, prompt-masked loss. Trained with **[MLX](https://github.com/ml-explore/mlx)** on Apple Silicon from `mlx-community/LFM2.5-350M-bf16`. - **Data:** **75,000 examples**, about 96% **synthetic** (written by Claude and OpenAI GPT models to target specific behaviours: self-corrections, misheard terms, spoken numbers, slang and swearing kept verbatim, list items kept, answer-temptation questions and commands, already-clean text left alone), each screened by an automated checker (content preservation, identifier and number checks, leakage and duplicate checks against every test set) and, for the newest batches, an LLM answer-key audit. Plus ~1,600 speech-recognizer transcripts of read-aloud narration (restraint examples) and ~1,200 real dictation logs. About 18% of the inputs are re-rendered in the style of Whisper base.en output, which is what the model sees in the app. ## Files | File | Size | Precision | SHA-256 | |---|---|---|---| | `Emberon-2-Q4_K_M.gguf` | 199,996,928 B (200 MB) | 4-bit, trimmed vocabulary (recommended) | `18fead8b8df3808ed47a84cd41a5a0617e3374d1a62dd52e3ba4bfb839810ffd` | | `Emberon-2-F16.gguf` | 711,485,248 B (711 MB) | 16-bit, full vocabulary (for re-quantization or further fine-tuning) | `056a4b0889eb5b9873d9f38393f5e595fb58c6ffd82b47fde76b9169f602f5a1` | ## Limitations & responsible use - **Mostly synthetic tests.** Most held-out sets are synthetic (same generation process as training, zero overlap). The real-dictation signal (a blind side-by-side review against the previous model on 255 real recordings, 62 of them never trained on: even on meaning kept) is encouraging but small. - **English, technical flavour.** Tuned for English dictation, especially software work. Other languages are out of scope, and the trimmed vocabulary makes the Q4_K_M file a poor starting point for them (use the F16). - **It can still drop content.** On long, rambling dictations it occasionally drops a restated phrase or a clause. Keep the raw transcript available if every word matters. - **It is a cleanup tool, not an assistant.** By design it will not answer, summarize, translate, or act on the text. ## License & attribution Emberon-2 is a fine-tune of **`LiquidAI/LFM2.5-350M`** and is released under the **LFM Open License v1.0**, inherited from the base model. The full license text is in [`LICENSE`](./LICENSE). - **Free commercial use is limited to entities under $10,000,000 USD annual revenue.** Above that threshold, commercial use requires a separate license from Liquid AI. - When redistributing you must keep the attribution notices, **state that the model was modified**, and include a copy of the license. See [`LICENSE`](./LICENSE) and [`NOTICE`](./NOTICE). > Base model © Liquid AI, licensed under the LFM Open License v1.0. > **Modifications (dictation-cleanup fine-tune) © 2026 Promethic Labs.** This is a modified version of LFM2.5-350M. **Please credit Promethic Labs** if Emberon-2 powers a product, service, or paper. Suggested credit line: > Powered by **Emberon-2** by [Promethic Labs](https://www.promethic.xyz): a dictation-cleanup fine-tune of > LiquidAI/LFM2.5-350M. ## Citation ```bibtex @misc{emberon2_2026, title = {Emberon-2: a 350M dictation-cleanup model that cleans speech without answering it}, author = {Promethic Labs}, year = {2026}, note = {Fine-tune of LiquidAI/LFM2.5-350M under the LFM Open License v1.0}, url = {https://huggingface.co/PromethicLabs/Emberon-2} } ```