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
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 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/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 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
- 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"
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. It succeeds Emberon-1.2B in WisperCode: 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). 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 (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)
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 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.
- 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
LICENSEandNOTICE.
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: a dictation-cleanup fine-tune of LiquidAI/LFM2.5-350M.
Citation
@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}
}
- Downloads last month
- 57
4-bit
16-bit