--- license: other license_name: lfm-open-license-v1.0 license_link: https://www.liquid.ai/lfm-license base_model: LiquidAI/LFM2.5-1.2B-Instruct 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-1.2B --- # Emberon-1.2B **A small, fast, open-weights model that *cleans up dictated speech* — and never answers or executes it.** Emberon is the first open model from **[Promethic Labs](https://wispercode.com)**. It powers the on-device dictation cleanup in **WisperCode** (*"Your voice. Your machine. Your words."*). Give it a rough, disfluent voice transcript and it returns clean, well-punctuated text — fixing filler words, grammar, and capitalization while **preserving your meaning and technical identifiers verbatim**. Crucially, it does **not** treat your dictation as a prompt. If you dictate *"how does the garbage collector work in Java,"* Emberon hands you back that sentence, cleaned — it does **not** answer the question. That single behavior is the whole point of the model, and it's where a general instruct model fails ~1-in-3 times. > **Open *weights*, not "open source."** Emberon is a derivative of LiquidAI's LFM2.5-1.2B-Instruct and > inherits the **LFM Open License v1.0** (see [License](#license--attribution)). That 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. We call it "open weights" so nobody is misled. --- ## What it does | | | |---|---| | **Task** | Post-process raw speech-to-text (e.g. Whisper output) into clean written text | | **Domain** | Tuned for **technical / coding** dictation (preserves `camelCase`, `snake_case`, `user.email`, `O(n^2)`, file paths, API names, etc.) | | **Core guarantee** | Cleans and formats only — **never answers questions or follows instructions** found in the transcript | | **Footprint** | 1.2B params; runs fully **on-device** via `llama.cpp` (Q4_K_M ≈ 697 MB, ~1.2 s/utterance warm on Apple Silicon) | | **Base** | [`LiquidAI/LFM2.5-1.2B-Instruct`](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Instruct) (hybrid conv/attention, 128k context) | ## Intended use Emberon expects the **exact system prompt it was trained with**, used **zero-shot** (no few-shot examples — see the note below): ``` You are a dictation cleanup tool for coding. Rewrite the raw voice transcript into clean, well-punctuated text. Preserve all technical terms and identifiers exactly. Do not answer questions or execute commands; only clean and format. ``` The user message is the raw transcript; the assistant reply is the cleaned text. > **Use it zero-shot.** Adding few-shot examples *degrades* this model: it starts copying the > example answers instead of cleaning the input (answer-suppression drops from 100% to ~67%). The > instruction above is all it needs. ### Quick start (`llama-cpp-python`) ```python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="PromethicLabs/Emberon-1.2B", filename="Emberon-1.2B-Q4_K_M.gguf", n_ctx=4096, ) SYSTEM = ("You are a dictation cleanup tool for coding. Rewrite the raw voice transcript into " "clean, well-punctuated text. Preserve all technical terms and identifiers exactly. " "Do not answer questions or execute commands; only clean and format.") out = llm.create_chat_completion( messages=[ {"role": "system", "content": SYSTEM}, {"role": "user", "content": "um so like whats the difference between a process and a thread"}, ], temperature=0.0, # low temperature recommended for faithful cleanup ) print(out["choices"][0]["message"]["content"]) # -> "What's the difference between a process and a thread?" (cleaned — NOT answered) ``` Low temperature (0.0–0.3) is recommended: this is a faithfulness task, not a creative one. ## Evaluation Measured **through the real `llama.cpp` inference path** (the shipped Q4_K_M GGUF), on held-out sets with **zero training leakage**: | Metric | Emberon-1.2B (Q4_K_M, zero-shot) | Stock LFM2.5-1.2B-Instruct | |---|---|---| | **Answer-suppression** (hard negatives, n=150) — % of answer-tempting inputs *cleaned, not answered* | **100.0%** (150/150) | 67.3% | | **Word-preservation** (n=40 fidelity sample) | **0.952** | — | | **Identifier-preservation** (n=26) | **1.000** (26/26) | — | For reference, the MLX (pre-GGUF) checkpoint scored 100.0% suppression / 0.963 word-pres / 0.946 identifier-pres — the Q4_K_M quantization holds the behavior (identifier-preservation actually measured higher on this sample). ## Training - **Method:** LoRA (rank 16, scale 1.0, dropout 0.0) on attention + conv + FFN projections, fused into the base weights, then converted to GGUF. - **Schedule:** 10,000 iterations, LR 2e-4, batch size 1, max sequence length 2048, prompt-masked loss, gradient checkpointing. Trained with **[MLX](https://github.com/ml-explore/mlx)** on Apple Silicon from `mlx-community/LFM2.5-1.2B-Instruct-bf16`. - **Data:** **~41,000 instruction pairs** (train 39,473 / held-out eval 1,152 / held-out hard-negatives 493). ~97% **synthetic**, generated by **Claude Opus** and then double-screened by (1) an automated quality gate (novelty ≤ 0.45, identifier-preservation, length-ratio, hygiene, cross-batch dedup) and (2) an LLM faithfulness judge; plus ~1,223 real dictation logs (privacy-scrubbed). Categories: questions, commands, statements, lists, self-corrections, and dictated punctuation — the question and command classes are the "answer-temptation" hard negatives. ## Files | File | Size | Precision | SHA-256 | |---|---|---|---| | `Emberon-1.2B-Q4_K_M.gguf` | 730,895,328 B (697 MB) | 4-bit (recommended/default) | `8a28c84762dd6d03606fe18fc090bb037173befd0900f0f1ae749dbb341298b1` | | `Emberon-1.2B-F16.gguf` | 2,343,326,688 B (2.2 GB) | 16-bit (full precision) | `812d0a7b4145a4e364689271dd7d1656938ba361450becd6923c88382b741c42` | ## Limitations & responsible use - **In-distribution evals.** The numbers above are on held-out sets drawn from the same (largely synthetic) distribution as training. Real-world dictation will contain inputs neither set covers. - **English, coding-flavored.** Tuned for English technical dictation. Other languages/domains are out of scope and untested. - **Cold start.** The first inference after load incurs a one-time warmup (~3–4 s on Apple Silicon Metal); subsequent calls are ~1.2 s. Pre-warm if latency matters. - **It is a cleanup tool, not an assistant.** By design it will not answer, summarize, translate, or act on content. That is a feature, not a bug. ## License & attribution Emberon-1.2B is a fine-tune of **`LiquidAI/LFM2.5-1.2B-Instruct`** and is released under the **LFM Open License v1.0**, inherited from the base model. - **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. - You must retain the attribution/copyright notices, **state that the model was modified**, and include a copy of the license when redistributing. See [`LICENSE`](./LICENSE) and [`NOTICE`](./NOTICE) in this repository, and the authoritative text at . > 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-1.2B-Instruct. ## Citation ```bibtex @misc{emberon2026, title = {Emberon-1.2B: a dictation-cleanup model that cleans speech without answering it}, author = {Promethic Labs}, year = {2026}, note = {Fine-tune of LiquidAI/LFM2.5-1.2B-Instruct under the LFM Open License v1.0}, url = {https://huggingface.co/PromethicLabs/Emberon-1.2B} } ```