Instructions to use heavry/WordStitch-4B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use heavry/WordStitch-4B with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("rodrigomt/Qwen3.5-4B-Uncensored-Aggressive") model = PeftModel.from_pretrained(base_model, "heavry/WordStitch-4B") - Transformers
How to use heavry/WordStitch-4B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="heavry/WordStitch-4B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("heavry/WordStitch-4B") model = AutoModelForMultimodalLM.from_pretrained("heavry/WordStitch-4B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use heavry/WordStitch-4B with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf heavry/WordStitch-4B:Q4_K_M # Run inference directly in the terminal: llama cli -hf heavry/WordStitch-4B:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf heavry/WordStitch-4B:Q4_K_M # Run inference directly in the terminal: llama cli -hf heavry/WordStitch-4B:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf heavry/WordStitch-4B:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf heavry/WordStitch-4B:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf heavry/WordStitch-4B:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf heavry/WordStitch-4B:Q4_K_M
Use Docker
docker model run hf.co/heavry/WordStitch-4B:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use heavry/WordStitch-4B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "heavry/WordStitch-4B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "heavry/WordStitch-4B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/heavry/WordStitch-4B:Q4_K_M
- SGLang
How to use heavry/WordStitch-4B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "heavry/WordStitch-4B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "heavry/WordStitch-4B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "heavry/WordStitch-4B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "heavry/WordStitch-4B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use heavry/WordStitch-4B with Ollama:
ollama run hf.co/heavry/WordStitch-4B:Q4_K_M
- Unsloth Desktop
- Pi
How to use heavry/WordStitch-4B with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf heavry/WordStitch-4B:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "heavry/WordStitch-4B:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use heavry/WordStitch-4B with Docker Model Runner:
docker model run hf.co/heavry/WordStitch-4B:Q4_K_M
- Lemonade
How to use heavry/WordStitch-4B with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull heavry/WordStitch-4B:Q4_K_M
Run and chat with the model
lemonade run user.WordStitch-4B-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use heavry/WordStitch-4B with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf heavry/WordStitch-4B:Q4_K_M
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 heavry/WordStitch-4B:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use heavry/WordStitch-4B with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf heavry/WordStitch-4B:Q4_K_M
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 "heavry/WordStitch-4B:Q4_K_M" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
WordStitch-4B v0.2 Alpha
Experimental but usable. WordStitch-4B is a 4B language model fine-tuned for Chinese-Pinyin lexical rescue. It converts Chinese Pinyin placeholders embedded in English or Chinese-English mixed text into natural English.
I forgot my yusan.
→ I forgot my umbrella.
Tomorrow wo want to take ditie to xuexiao.
→ Tomorrow I want to take the subway to school.
I want to eat hanbao.
→ I want to eat a hamburger.
WordStitch is an English writing assistant for Chinese speakers. When an English word is hard to spell, type the Pinyin of its Chinese meaning. The model performs Pinyin placeholder recovery and Pinyin typo correction using sentence context, then rewrites the complete sentence as natural English. It accepts mixed Chinese / English / Pinyin input without <pinyin> tags or special delimiters.
The intended task covers Chinese Pinyin to English conversion inside short text, Chinese-English code-mixed text, and code-switching where one or more Chinese concepts are temporarily written in Pinyin. Mildly misspelled Pinyin is supported, although recovery is not guaranteed.
More examples:
I want to take ditie to xuexiao.
→ I want to take the subway to school.
wo想take ditie去school
→ I want to take the subway to school.
Project code, training scripts, and documentation: github.com/heavry/WordStitch
Files
- repository root and
adapter/: selected checkpoint-500 LoRA adapter, tokenizer, and chat template (about 142MB; the subdirectory mirror keeps downloads organized) merged/: merged BF16 Transformers checkpoint, split into three safetensors shards (9,098,688,065 bytes for the runtime files)WordStitch-4B-Q4_K_M.gguf: llama.cpp/Ollama deployment artifact, 2,708,803,936 bytesevaluation/: frozen inputs, outputs, reviews, summaries, and freeze manifestdocs/: provenance, redistribution policy, and license reviewModelfile: Ollama configuration
Which artifact should I use?
- Merged BF16 (
merged/): the simplest choice for Transformers inference or further research where about 9.10GB of weight storage and suitable RAM/VRAM are available. It already includes the WordStitch LoRA changes. - LoRA adapter (repository root or
adapter/): use this for the smallest download or when you already have the exact rodrigomt training base revision. Load it with PEFT; do not apply it to a different Qwen checkpoint and assume equivalent behavior. - Q4_K_M (
WordStitch-4B-Q4_K_M.gguf): use this for llama.cpp, Ollama, CPU inference, and compact deployment. Quantization reduced the frozen WordStitch score from 89/100 to 85/100.
The merged BF16 is published with the repository metadata set to license: other. The immediate rodrigomt conversion identifies its upstream model but did not expose an explicit license field or LICENSE file when reviewed. Publication does not resolve that uncertainty or relicense the merged weights as Apache-2.0. Review NOTICE and docs/LICENSE_REVIEW.md before redistribution or commercial use.
Evaluation
The same frozen 100-example WordStitch evaluation set was used before and after LoRA training. Checkpoint 500 was selected by validation loss before the frozen set was scored.
| Category | Base BF16 | LoRA BF16 | Mac Q4_K_M |
|---|---|---|---|
| Chinese input | 10/10 | 9/10 | 9/10 |
| Standard Pinyin rescue | 5/10 | 10/10 | 9/10 |
| Initial Pinyin | 4/10 | 9/10 | 9/10 |
| Final Pinyin | 6/10 | 9/10 | 9/10 |
| Multiple rescues | 2/10 | 8/10 | 7/10 |
| Consecutive Pinyin | 1/10 | 6/10 | 5/10 |
| Chinese/English/Pinyin | 6/10 | 10/10 | 10/10 |
| Mild Pinyin typo | 5/10 | 10/10 | 9/10 |
| Contextual ambiguity | 7/10 | 9/10 | 9/10 |
| Long mixed input | 5/10 | 9/10 | 9/10 |
| WordStitch total | 51/100 | 89/100 | 85/100 |
This means 89/100 semantic passes on the project's 100-example frozen evaluation set; Q4_K_M scored 85/100. Evaluation was reviewed by an AI evaluator (Astra), not an independent human benchmark. The benchmark is small and is not an external certification.
General QA remained 19/20 before and after LoRA. Normal English preservation remained 20/20. These are small retention checks and do not establish broad capability preservation.
Known limitations
WordStitch-4B is experimental. It performs well on common single-token Pinyin lexical rescue, but consecutive Pinyin sequences, multiple simultaneous replacements, ambiguous transliterations, uncommon vocabulary, and quantization remain challenging. It can choose the wrong word, change correct English, or produce awkward grammar. bingxiang was observed becoming “window,” and hamburger examples sometimes omitted the article “a.” Typo performance on the frozen set must not be interpreted as universal 100% reliability.
llama.cpp
hf download heavry/WordStitch-4B \
WordStitch-4B-Q4_K_M.gguf \
--local-dir .
llama-cli \
-m WordStitch-4B-Q4_K_M.gguf \
--system-prompt "Rewrite the user input as natural, complete English. The input may mix English, Chinese, toneless Mandarin pinyin, and mildly misspelled pinyin. Recover missing English words using the sentence context. Output only the final English text, without explanations or alternatives." \
-p "I forgot my yusan." \
--temp 0
For an OpenAI-compatible API, including a Grok Bot VM:
hf download heavry/WordStitch-4B WordStitch-4B-Q4_K_M.gguf --local-dir ./models/wordstitch
llama-server \
-m ./models/wordstitch/WordStitch-4B-Q4_K_M.gguf \
--host 127.0.0.1 \
--port 8080 \
-c 2048 \
-ngl 99 \
--jinja \
--chat-template-kwargs '{"enable_thinking":false}' \
--reasoning-budget 0
Send the WordStitch instruction as the system message and the mixed sentence as the user message. Keep temperature at 0 for concise rewriting. Put authentication in front of the server before exposing it outside a trusted host.
Ollama
hf download heavry/WordStitch-4B WordStitch-4B-Q4_K_M.gguf --local-dir .
ollama create wordstitch -f Modelfile
ollama run wordstitch "I forgot my yusan."
LoRA adapter
Load adapter/ with PEFT on the exact training base revision:
from transformers import AutoTokenizer, Qwen3_5ForConditionalGeneration
from peft import PeftModel
base_id = "rodrigomt/Qwen3.5-4B-Uncensored-Aggressive"
adapter_id = "heavry/WordStitch-4B"
tokenizer = AutoTokenizer.from_pretrained(adapter_id)
base = Qwen3_5ForConditionalGeneration.from_pretrained(base_id, dtype="auto", device_map="auto")
model = PeftModel.from_pretrained(base, adapter_id)
Use the system instruction shown above and disable thinking in the chat template.
Merged BF16 with Transformers
Download only the merged directory:
hf download heavry/WordStitch-4B \
--include "merged/*" \
--local-dir ./WordStitch-4B
Load it directly without PEFT:
import torch
from transformers import AutoTokenizer, Qwen3_5ForConditionalGeneration
model_dir = "./WordStitch-4B/merged"
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = Qwen3_5ForConditionalGeneration.from_pretrained(
model_dir,
dtype=torch.bfloat16,
device_map="auto",
)
The release was verified with Transformers 5.16.1: all 723 indexed tensors loaded from the three shards, the model reported 4,539,265,536 parameters in BF16, and a real forward pass produced finite logits. Per-file SHA256 values are in merged/SHA256SUMS.
Training summary
- 9,710 training rows; 576 group-isolated validation rows
- BF16 LoRA, rank 16, alpha 32, dropout 0.05
- 30,474,240 trainable parameters
- 600 steps; checkpoint 500 selected
- best validation loss: 0.192294
- effective batch size 16; maximum length 384; learning rate 5e-5
The complete mixed-source training corpus is withheld. Published materials include aggregate manifests, generation and cleaning scripts in GitHub, attribution, and the frozen evaluation. See docs/DATA.md.
License and provenance
Project-authored code and documentation are Apache-2.0. The model provenance is Qwen/Qwen3.5-4B → HauhauCS aggressive derivative → rodrigomt safetensors conversion → WordStitch LoRA → merged BF16 / Q4_K_M. Qwen and the HauhauCS repository are marked Apache-2.0, while the immediate rodrigomt conversion lacked explicit license metadata when reviewed. For that reason, this repository remains license: other; neither the merged BF16 nor other model artifacts are presented as newly Apache-2.0-licensed. Model artifact use remains subject to upstream terms. See LICENSE, NOTICE, and docs/LICENSE_REVIEW.md. This is a provenance record, not legal advice.
- Downloads last month
- 70
4-bit
Model tree for heavry/WordStitch-4B
Base model
Qwen/Qwen3.5-4B-Base