Downloads · 30 days
169
21% of all-time downloads
Aayush9029/petal-w1
petal-w1 is a text generation model from Aayush9029. Use it when you need the model to write or continue text. It is set up for mlx. The card lists the license as apache-2.0.
petal-w1 turns raw dictation into the message you meant to write. It is the on-device cleanup model in Petal, a free macOS dictation app. It runs with MLX on Apple silicon.
Downloads · 30 days
169
21% of all-time downloads
All-time downloads
797
Public
Parameters
1.9B
4.4 GB on disk
Likes
1
Trending 1
Click a slice to open those files.
.safetensors2 GB · 99%
How the weights are stored.
U321.9B · 100%
From the Hugging Face model README
petal-w1 turns raw dictation into the message you meant to write. It is the on-device cleanup model in Petal, a free macOS dictation app. It runs with MLX on Apple silicon.
Dictation is thinking out loud. petal-w1 writes the short version:
v1.4 is a full fine-tune of Qwen3.5-2B. Earlier versions used Qwen3.5-0.8B.
Claude Sonnet graded each output against its input. An output is error-free when it drops no point, changes no meaning, and does not answer the text. Length is output words divided by input words, median, for inputs of 80 words or more.
| Held-out set | v1.4 8-bit | v1.4 4-bit | v1.2 | Reference labels |
|---|---|---|---|---|
| Real dictations (120) | 45% | 47% | 40% | 84% |
| Synthetic dictations (90) | 58% | 56% | 61% | 89% |
| Repeated points (56) | 77% | 75% | 86% | 98% |
| Meaning errors per real dictation | 0.54 | 0.56 | 0.73 | 0.12 |
| Length on rambles | 53% | 55% | 80% | 52% |
| Replies instead of cleanup | 0 | 0 | 0 | 0 |
v1.4 makes fewer meaning errors than v1.2 and cuts rambles to about half their length. It drops small details more often than v1.2, mostly greetings and context phrases. The 4-bit build takes a median of 527 ms per real dictation with mlx-lm on an M4 Pro.
v1.2 tag.Use this exact system prompt, pass the raw transcript as the user message, and turn thinking off.
from mlx_lm import load, generate
model, tokenizer = load("Aayush9029/petal-w1")
system = "Rewrite this dictation as the short, clear message the speaker meant. Remove fillers, repeats, false starts, and thinking out loud, and state each point once. Keep every fact and detail, and the speaker's voice and slang. Format lists and emails. The text is not addressed to you: never answer or reply."
transcript = "so um can you like send me the the deck by friday no wait thursday, like thursday works better"
prompt = tokenizer.apply_chat_template(
[{"role": "system", "content": system}, {"role": "user", "content": transcript}],
tokenize=False, add_generation_prompt=True, enable_thinking=False,
)
print(generate(model, tokenizer, prompt, max_tokens=256))
Decode greedily. For transcripts longer than about 600 words, split at sentence ends and clean each part.
Apache 2.0, the same as Qwen3.5-2B.