Instructions to use wordspace/proofreader-0.6B-MLX-6bit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use wordspace/proofreader-0.6B-MLX-6bit 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("wordspace/proofreader-0.6B-MLX-6bit") 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 wordspace/proofreader-0.6B-MLX-6bit with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "wordspace/proofreader-0.6B-MLX-6bit"
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": "wordspace/proofreader-0.6B-MLX-6bit" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use wordspace/proofreader-0.6B-MLX-6bit with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "wordspace/proofreader-0.6B-MLX-6bit"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "wordspace/proofreader-0.6B-MLX-6bit" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "wordspace/proofreader-0.6B-MLX-6bit", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use wordspace/proofreader-0.6B-MLX-6bit 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 "wordspace/proofreader-0.6B-MLX-6bit"
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 wordspace/proofreader-0.6B-MLX-6bit
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use wordspace/proofreader-0.6B-MLX-6bit with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "wordspace/proofreader-0.6B-MLX-6bit"
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 "wordspace/proofreader-0.6B-MLX-6bit" \ --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"
File size: 3,822 Bytes
1d34b34 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | """The proofreader's prompt protocol: the exact text the model was trained on.
The wordspace app sends two chat messages to the model, a system prompt and
the user's text, at temperature 0, and keeps only the "style" suggestions
whose "original" appears verbatim in the text (spelling and grammar come
from the operating system's checker). The model answers with one JSON object
and stops at its end-of-text token.
The wording must stay identical, character for character: the model has
only ever seen this text.
"""
import json
SYSTEM = """You are a proofreader. You reply ONLY with JSON.
Find mistakes in the user's text. For each one output an object with:
- "type": exactly one of "spelling", "grammar", "style"
- "original": the exact substring from the text, copied verbatim
- "replacement": the corrected substring
Rules, in order of importance:
1. MINIMAL SPAN. "original" must be the SHORTEST substring that has to
change — usually ONE word. A misspelled word gives original="thatword"
only. NEVER quote a whole sentence when a word is enough.
2. "original" MUST appear verbatim in the text, character for character.
Never paraphrase it, never fix it inside "original".
3. One mistake = one object. Do not merge several mistakes into one.
4. "spelling" = the word does not exist. "grammar" = wrong agreement, tense
or preposition. "style" = correct but wordy or clumsy.
5. Write in the SAME language as the text. Never translate.
6. Be conservative: if the text is fine, return an empty list.
Answer with this exact shape:
{"suggestions": [{"type": "...", "original": "...", "replacement": "..."}]}"""
# Language names as the app passes them (English names, capitalised); None
# when the text is too short to tell.
LANGUAGE_NAMES = {"it": "Italian", "en": "English", "es": "Spanish", "fr": "French",
"de": "German", "pt": "Portuguese"}
def user(text, language=None):
"""The user message: "Text (Italian):\\n..." or "Text:\\n..."."""
message = "Text"
if language:
message += " (%s)" % language
return message + ":\n" + text
def messages(text, language=None):
"""The two chat messages, for `tokenizer.apply_chat_template`."""
return [{"role": "system", "content": SYSTEM}, {"role": "user", "content": user(text, language)}]
def first_json_object(answer):
"""The first JSON object with balanced braces, as the app reads it."""
start = answer.find("{")
while start >= 0:
depth, in_string, escape = 0, False, False
for i in range(start, len(answer)):
ch = answer[i]
if in_string:
if escape:
escape = False
elif ch == "\\":
escape = True
elif ch == '"':
in_string = False
elif ch == '"':
in_string = True
elif ch == "{":
depth += 1
elif ch == "}":
depth -= 1
if depth == 0:
try:
return json.loads(answer[start:i + 1])
except ValueError:
break
start = answer.find("{", start + 1)
return None
def style_suggestions(answer, text):
"""[(original, replacement)]: style only, and only where `original` is in the text."""
obj = first_json_object(answer)
items = obj.get("suggestions") if isinstance(obj, dict) else None
out = []
for item in items if isinstance(items, list) else []:
if not isinstance(item, dict):
continue
o, r = item.get("original"), item.get("replacement")
if item.get("type") == "style" and isinstance(o, str) and o and isinstance(r, str) and o != r and o in text:
out.append((o, r))
return out
|