Emberon-1.2B / README.md
Promethic's picture
Fix intro links: Promethic Labs -> blog/emberon, link WisperCode -> homepage
bbb594b verified
|
Raw
History Blame Contribute Delete
12.9 kB
---
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://www.promethic.xyz/blog/emberon)**. It powers the on-device
dictation cleanup in **[WisperCode](https://wispercode.com/)** (*"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
All numbers below are measured **through the real `llama.cpp` inference path** (the shipped Q4_K_M GGUF,
zero-shot with the system prompt above), on the **complete held-out sets** β€” **493 answer-temptation hard
negatives** and **1,152 fidelity items** β€” with **zero training leakage**. Metrics:
- **Answer-suppression** β€” % of answer-tempting inputs that were *cleaned, not answered* (the core behavior).
- **Word-preservation** β€” overlap of content words between output and the gold clean reference.
- **Identifier-preservation** β€” % of code identifiers (`camelCase`, `snake_case`, `user.email`, `O(n^2)`…) kept exactly.
- **Hallucination / content-addition** β€” % of outputs that introduced content not present in the transcript (lower is better).
### Headline
| Metric | **Emberon-1.2B (Q4_K_M)** | Stock LFM2.5-1.2B-InstructΒΉ | bf16 referenceΒ² |
|---|---|---|---|
| **Answer-suppression** (n=493) | **100.0%** (493/493) | 71.0% | 100.0% |
| **Word-preservation** | **0.953** (n=1,152) | 0.780 (n=300) | 0.963 |
| **Identifier-preservation** | **0.968** (1390/1436) | 0.833 | 0.946 |
| **Hallucination rate** | **0.00%** (0/1,152) | 13.3% | β€” |
ΒΉ Stock LFM2.5-1.2B-Instruct given the **identical** zero-shot prompt β€” i.e. the lift is from fine-tuning,
not prompting. Β² The bf16 MLX checkpoint (pre-quantization); Q4_K_M matches it, so 4-bit quantization
preserved the behavior.
- **Answer-suppression is a clean sweep at full scale** β€” 0 of 493 answer-tempting inputs were answered, across *both* question and command phrasings and *both* real and synthetic sources. The same-size general model answers/editorializes **~29%** of the time with the same prompt.
- **0.00% hallucination across all 1,152 items** β€” Emberon never added content that wasn't said; the stock model did so **13.3%** of the time. Faithful cleanup is the whole design goal, and it holds.
- **The gap is widest where it matters most.** On the held-out **real-dictation** hard negatives, stock suppresses only **59.5%** (vs 72.1% on synthetic) β€” real, messy speech tempts it more β€” while **Emberon stays at 100.0% on real and synthetic alike.**
### Fidelity by category (n=1,152)
| Category | n | Word-pres | Identifier-pres | Hallucination |
|---|---|---|---|---|
| command | 274 | 0.961 | 0.974 | 0.0% |
| question | 415 | 0.954 | 0.946 | 0.0% |
| statement | 225 | 0.953 | 0.987 | 0.0% |
| list | 134 | 0.964 | 0.995 | 0.0% |
| self-correction | 61 | 0.920 | 0.923 | 0.0% |
| dictated-punctuation | 43 | 0.906 | 0.971 | 0.0% |
The slightly lower word-preservation on `self-correction` and `dictated-punctuation` is **expected and correct**:
those classes legitimately *transform* the transcript β€” discarding the retracted half of *"red, no wait, blue"*,
or turning *"open paren"* into `(` β€” so the output is *supposed* to diverge from the raw words.
### Real vs. synthetic held-out
| Source | Suppression | Word-preservation | Hallucination |
|---|---|---|---|
| **Real dictation** | **100.0%** (n=42) | **0.960** (n=49) | 0.0% |
| Synthetic | 100.0% (n=451) | 0.953 (n=1,103) | 0.0% |
The real-dictation subset performs **at least as well as** synthetic β€” evidence the behavior is not an artifact
of the synthetic training distribution.
### Real-world held-out (unseen live usage)
As an out-of-distribution check, we evaluated on **79 real dictations captured from live app usage** β€” strictly
leakage-filtered against *all* training/eval data, deduped, and much longer than the eval set (median **34 words**;
these are real, messy, agentic prompts):
| Metric | Result |
|---|---|
| **Content-addition / hallucination** | **0.00%** (0/79) |
| Mean novelty (lower = more faithful) | 0.009 |
| **Suppression** (answer-tempting subset) | **9/9 = 100%** |
Zero hallucinations across 79 genuinely-unseen, long real-world prompts, and it answered none of the real spoken
questions. *(Honest scope: real usage skews toward long instructions, so the suppression sample here is small β€”
n=9 β€” while the faithfulness signal is strong.)*
### Performance (Apple Silicon, Metal, as the app runs it)
| | Q4_K_M |
|---|---|
| Warm latency (median / p90) | **0.91 s** / 1.70 s |
| Cold-start (first call after load) | ~3.9 s |
| Peak resident memory | ~1.6 GB |
Measured over 1,645 generations via `llama.cpp` (Metal). The first call pays a one-time warmup β€” pre-warm at
startup if you need the first utterance fast. *(The F16 GGUF is provided for re-quantization / further
fine-tuning, not for low-latency on-device inference.)*
## 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
- **Largely-synthetic evals.** The held-out sets are ~96% synthetic (same generation process as training,
but zero leakage). The held-out **real**-dictation subset is small (nβ‰ˆ49/42) though it scores at least as
well β€” so the real-world signal is encouraging but not yet large-sample. Production 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 <https://www.liquid.ai/lfm-license>.
> 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.
### Attribution β€” please credit Promethic Labs
**Required for redistribution & derivatives.** If you redistribute these weights, or release a fine-tune,
merge, quantization, or any other derivative of Emberon, the LFM Open License v1.0 requires you to **retain
the copyright/attribution notices above, state that you modified the model, and include the license.** Keep
**both** the Liquid AI and the Promethic Labs attributions intact.
**Requested for use in products, services, or research.** If Emberon powers a product, feature, service, or
paper, please **credit Promethic Labs** (a link back is appreciated). Suggested credit line:
> Powered by **Emberon-1.2B** by [Promethic Labs](https://promethic.xyz) β€” a dictation-cleanup fine-tune of
> LiquidAI/LFM2.5-1.2B-Instruct.
For academic or technical write-ups, please also cite the entry below.
## 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}
}
```