keysay-concise-0.8B

Turns rambling dictation into the short, direct message you meant to send, for keysay.

hey so I wanted to tell Laura to review her last pr about the the the latest bug
we saw about the thing the thing that Luis reported about the duplicated texts

-> Laura, please review your last PR about the latest bug we saw: Luis reported
   about duplicated texts.

Companion to keysay-transcription-cleaner-0.8B-v2, which is deletion-only. This model rewrites — it reorders clauses, adds function words, and turns narration into direct address. That freedom is what makes it useful and also what makes it riskier, so the training data was built around a different guarantee.

What it will not do

Because the output is pasted without the original in view, invented facts are undetectable at the point they do damage. Every training pair was rejected unless it satisfied:

  • no invented entities — no person, place, date or quantity the speaker did not say. "when you can" never becomes "by Friday".
  • relay preserveddile a Carmen que... means you are messaging somebody else and asking them to pass it on. The output keeps Dile a Carmen que... rather than re-addressing the message to Carmen. Every name survives that mistake, so it needs its own check.
  • names verbatim — a model cannot know which spelling of a proper noun is right, and one trained to fix them corrupts correct ones. Use keysay's per-user replacement list for that.
  • short messages left alone — a message that was already clear comes back essentially unchanged.

Results

44 held-out hand-authored scenarios, ~50% Spanish. The eval set is deliberately not generated by the model that produced the training data, so blind spots shared between teacher and student stay visible.

metric
invented a fact 0 / 44
relay preserved 100% (n=7)
already-tight left alone 100% (n=12)
dropped a stated fact 1 / 44
compression on rambles 71%

Usage

from mlx_lm import load, generate

model, tokenizer = load("Enriqueag26/keysay-concise-0.8B")
prompt = tokenizer.apply_chat_template(
    [{"role": "system", "content": SYSTEM_PROMPT},
     {"role": "user", "content": "oye dile a carmen que la reunión es el lunes no espera el martes a las diez"}],
    tokenize=False, add_generation_prompt=True, enable_thinking=False,
)
generate(model, tokenizer, prompt=prompt, max_tokens=200)
# -> "Dile a Carmen que la reunión es el martes a las 10."

SYSTEM_PROMPT:

You turn rambling dictated speech into the short, direct message the speaker meant to send.

Lead with the actual request. Never invent anything the speaker did not say.
Never change who the message is addressed to. Keep the original language.

Training

LoRA via mlx_lm on Qwen3.5-0.8B-8bit — 16 layers, rank 8, 1800 iters, lr 3e-5.

4,196 synthetic pairs from two generators, because neither model could do both halves: gemini-3-flash writes convincingly messy dictation but drops stated reasons when rewriting, while gpt-5.6-sol rewrites faithfully but cannot write convincing rambling. So gemini generates the inputs and Sol rewrites them. The corpus deliberately spans both a light-disfluency and a heavy-rambling regime rather than averaging to a middle that resembles neither.

320 pairs are hand-written contrast sets for words that are both retraction cues and ordinary vocabulary — espera/wait, mejor, digo, perdón, actually — each appearing in both roles. Without them the model read no espera a las siete as content and kept the retracted time.

Known limitations

  • AM/PM is inferred, sometimes wrongly. a las ocho y media for a school trip came back as 20:30. If a time matters, check it.
  • A named third party can be mistaken for the addressee. "lo del cole de Nacho" produced a message addressed to Nacho. Explicit relay phrasing (dile a X) is handled correctly; a bare mention is not always.
  • Very long rambles occasionally shed a secondary qualifier.
  • Tuned for Spanish and English chat-style dictation.
Downloads last month
-
Safetensors
Model size
0.2B params
Tensor type
BF16
·
U32
·
F32
·
MLX
Hardware compatibility
Log In to add your hardware

8-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Enriqueag26/keysay-concise-0.8B

Quantized
(181)
this model