Text Generation
GGUF
English
dictation
voice
speech-postprocessing
text-cleanup
lfm2
llama-cpp
on-device
conversational
Instructions to use PromethicLabs/Emberon-2 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 PromethicLabs/Emberon-2 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 PromethicLabs/Emberon-2:F16 # Run inference directly in the terminal: llama cli -hf PromethicLabs/Emberon-2:F16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf PromethicLabs/Emberon-2:F16 # Run inference directly in the terminal: llama cli -hf PromethicLabs/Emberon-2:F16
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 PromethicLabs/Emberon-2:F16 # Run inference directly in the terminal: ./build/bin/llama cli -hf PromethicLabs/Emberon-2:F16
Use Docker
docker model run hf.co/PromethicLabs/Emberon-2:F16
- Llama new
- LM Studio
- Jan
- vLLM
How to use PromethicLabs/Emberon-2 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "PromethicLabs/Emberon-2" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "PromethicLabs/Emberon-2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/PromethicLabs/Emberon-2:F16
- Ollama
How to use PromethicLabs/Emberon-2 with Ollama:
ollama run hf.co/PromethicLabs/Emberon-2:F16
- Unsloth Desktop
- Pi
How to use PromethicLabs/Emberon-2 with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf PromethicLabs/Emberon-2:F16
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": "PromethicLabs/Emberon-2:F16" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use PromethicLabs/Emberon-2 with Docker Model Runner:
docker model run hf.co/PromethicLabs/Emberon-2:F16
- Lemonade
How to use PromethicLabs/Emberon-2 with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull PromethicLabs/Emberon-2:F16
Run and chat with the model
lemonade run user.Emberon-2-F16
List all available models
lemonade list
- Hermes Agent
How to use PromethicLabs/Emberon-2 with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf PromethicLabs/Emberon-2:F16
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 PromethicLabs/Emberon-2:F16
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use PromethicLabs/Emberon-2 with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf PromethicLabs/Emberon-2:F16
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 "PromethicLabs/Emberon-2:F16" \ --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"
|
Download README.md from PromethicLabs/Emberon-2: direct link, hf CLI and curl.
- Browser
- Download file 9.64 kB
-
https://huggingface.co/PromethicLabs/Emberon-2/resolve/main/README.md
- Command line
-
hf download hf://PromethicLabs/Emberon-2/README.md
-
curl -L -o README.md https://huggingface.co/PromethicLabs/Emberon-2/resolve/main/README.md
9.64 kB
| 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} | |
| } | |
| ``` | |