Instructions to use enconvo/tidy-1-mlx with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use enconvo/tidy-1-mlx with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("enconvo/tidy-1-mlx") prompt = "Write a story about Einstein" messages = [{"role": "user", "content": prompt}] prompt = tokenizer.apply_chat_template( messages, add_generation_prompt=True ) text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use enconvo/tidy-1-mlx with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "enconvo/tidy-1-mlx"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "enconvo/tidy-1-mlx" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use enconvo/tidy-1-mlx with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "enconvo/tidy-1-mlx"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "enconvo/tidy-1-mlx" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "enconvo/tidy-1-mlx", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use enconvo/tidy-1-mlx with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "enconvo/tidy-1-mlx"
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 enconvo/tidy-1-mlx
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use enconvo/tidy-1-mlx with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "enconvo/tidy-1-mlx"
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 "enconvo/tidy-1-mlx" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Enconvo Tidy 1 (MLX, 4-bit DWQ)
Enconvo Tidy 1 cleans up dictated text on your Mac. It takes a speech-to-text transcript and returns the same words, written the way you meant them:
- removes filler words, stutters, repeats and false starts;
- adds punctuation and fixes casing;
- writes spoken numbers, dates, times, amounts and units as digits;
- fixes obvious recognition errors where the sentence makes them clear;
- leaves text that is already correct unchanged.
It runs fully offline with MLX on Apple silicon. It powers the Enconvo Tidy 1 model in Enconvo's On-Device Cleanup for Dictation.
Languages
English, Simplified Chinese, mixed Chinese and English, Japanese, Korean, German, French, Spanish, Portuguese and Italian. The output stays in the input's language; the model does not translate. Text in other languages is out of scope (see Limitations).
Model
| Base model | Qwen3-0.6B-Base (Apache 2.0) |
| Vocabulary | Trimmed to 65,536 entries for these languages (from 151,936) |
| Fine-tuning | LoRA rank 64, merged |
| Quantization | 4-bit affine, group size 64, distilled against the BF16 model with MLX DWQ |
| Weights | 286 MB |
Usage
The input is one line: text: followed by the transcript, then a newline and
out:. The answer starts with a space and ends with <|endoftext|>. Use
greedy decoding.
from mlx_lm import load, generate
from mlx_lm.sample_utils import make_sampler
model, tokenizer = load("enconvo/tidy-1-mlx")
transcript = "um so i think we should uh meet at three thirty tomorrow at the office"
ids = tokenizer.encode(f"text: {transcript}\nout:", add_special_tokens=False)
answer = generate(model, tokenizer, prompt=ids, max_tokens=len(ids) * 2 + 16,
sampler=make_sampler(temp=0.0))
print(answer.strip())
# I think we should meet at 3:30 tomorrow at the office.
Keep the prompt and answer within about 512 tokens. For longer dictation, cut the text at sentence ends and clean up each part; join line breaks with a space first, since the model expects one line.
Speed and memory
Measured on a Mac mini (M2, 10-core GPU, 8 GB memory) with MLX 0.32.3, on 132 dictation lines, greedy decoding, after a warm-up:
| Latency per line, p50 / p90 | 86 / 110 ms |
| Decoding speed | about 195 tokens/s |
| Peak MLX memory | 0.44 GB (0.54 GB on long sentences) |
| Process memory (RSS) | 0.49 GB |
| Load from disk | about 1 s |
Training data
About 164,000 pairs of transcripts and cleaned text across the ten languages:
- rule-based synthetic dictation: filler words, repeats, self-corrections, spoken numbers, lists;
- open text with simulated recognition noise: Tatoeba (CC BY 2.0 FR), Common Voice text and Wikipedia sentences (CC0), FLEURS text (CC BY 4.0);
- real Whisper transcripts of FLEURS recordings paired with their reference text (CC BY 4.0), and ASCEND mixed Chinese and English transcripts (CC BY-SA 4.0);
- open cleanup and disfluency datasets (including Disfl-QA, CC BY-SA 4.0), each under its own license;
- synthetic speech read by macOS voices and transcribed with Whisper, to learn real recognition errors;
- pairs written by large language models and filtered by rules.
Limitations
- Exact repeats that are meant (such as a word said three times for emphasis) are sometimes shortened.
- Chinese homophone errors that need world knowledge are rarely fixed.
- Text in languages outside the list above can come back garbled or repeated. Check that the output is plausible (for example, similar in length to the input) and fall back to the transcript when it is not.
- The model has no tone or style setting; it keeps the speaker's words.
- It sees one part of the dictation at a time, so it does not use context from earlier sentences or from the app you dictate into.
License
- Downloads last month
- 18
4-bit
Model tree for enconvo/tidy-1-mlx
Base model
Qwen/Qwen3-0.6B-Base