Instructions to use srock44/cipher-pro with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use srock44/cipher-pro 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 srock44/cipher-pro:Q4_K_M # Run inference directly in the terminal: llama cli -hf srock44/cipher-pro:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf srock44/cipher-pro:Q4_K_M # Run inference directly in the terminal: llama cli -hf srock44/cipher-pro: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 srock44/cipher-pro:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf srock44/cipher-pro: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 srock44/cipher-pro:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf srock44/cipher-pro:Q4_K_M
Use Docker
docker model run hf.co/srock44/cipher-pro:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use srock44/cipher-pro with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "srock44/cipher-pro" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "srock44/cipher-pro", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/srock44/cipher-pro:Q4_K_M
- Ollama
How to use srock44/cipher-pro with Ollama:
ollama run hf.co/srock44/cipher-pro:Q4_K_M
- Unsloth Desktop
- Pi
How to use srock44/cipher-pro with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf srock44/cipher-pro: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": "srock44/cipher-pro:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use srock44/cipher-pro with Docker Model Runner:
docker model run hf.co/srock44/cipher-pro:Q4_K_M
- Lemonade
How to use srock44/cipher-pro with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull srock44/cipher-pro:Q4_K_M
Run and chat with the model
lemonade run user.cipher-pro-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use srock44/cipher-pro with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf srock44/cipher-pro: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 srock44/cipher-pro:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use srock44/cipher-pro with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf srock44/cipher-pro: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 "srock44/cipher-pro: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"
Fix compose garbled-token issue; voice-intent verified 5/5 through real app retry path
Browse files- README.md +32 -13
- cipher-pro.Q4_K_M.gguf +1 -1
README.md
CHANGED
|
@@ -19,11 +19,16 @@ pipeline_tag: text-generation
|
|
| 19 |
|
| 20 |
Cipher Pro is a LoRA fine-tune of [Qwen/Qwen3-4B-Instruct-2507](https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507), trained on **every LLM-backed feature of a local-first email assistant**: email triage (importance/summary/category JSON), chat, daily-summary synthesis, draft reply, compose assist, and voice-command intent parsing β not just prompted for these tasks, actually trained on them.
|
| 21 |
|
| 22 |
-
**Update:** added a 6th task, voice-command intent parsing
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
| 28 |
It's the largest of the three **Cipher** tiers (`cipher-nano` / `cipher-air` / `cipher-pro`), and the strongest on structured-output accuracy β **100% category accuracy** on the triage benchmark below. Cipher is the local-model engine for an unreleased larger email-assistant project β that project isn't public yet, but these weights, the training code, the eval script, and all five dataset generators are fully open now, in this repo.
|
| 29 |
|
|
@@ -91,14 +96,28 @@ curl http://localhost:11434/api/chat -d '{
|
|
| 91 |
- Framework: [Unsloth](https://github.com/unslothai/unsloth) + `trl.SFTTrainer`
|
| 92 |
- Sequence packing (`trl.SFTConfig(packing=True)`) was tried to speed up training given most examples are well under the 2048-token context window β it crashed outright (`ValueError: Expected input batch_size (2048) to match target batch_size (3636)`, an Unsloth fused-loss/trl packing-collator incompatibility in this exact library version pairing), not a quality tradeoff. Disabled.
|
| 93 |
- Reproduce with `train_cipher_pro.py` β `export_gguf_cipher_pro.py`
|
| 94 |
-
- Voice-intent retrain (
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
|
| 103 |
## License
|
| 104 |
|
|
|
|
| 19 |
|
| 20 |
Cipher Pro is a LoRA fine-tune of [Qwen/Qwen3-4B-Instruct-2507](https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507), trained on **every LLM-backed feature of a local-first email assistant**: email triage (importance/summary/category JSON), chat, daily-summary synthesis, draft reply, compose assist, and voice-command intent parsing β not just prompted for these tasks, actually trained on them.
|
| 21 |
|
| 22 |
+
**Update:** added a 6th task, voice-command intent parsing, across 4 retrain passes total β
|
| 23 |
+
each one targeting a specific failure mode found in real end-to-end testing (not just raw
|
| 24 |
+
model output) rather than broad re-training. See `Training` below for the full progression;
|
| 25 |
+
current state on `eval_voice_intent.py`'s 5 fixtures, verified through the actual calling
|
| 26 |
+
app's retry-and-fallback logic (not a single raw completion), is **5/5**.
|
| 27 |
+
|
| 28 |
+
Also fixed in this update: a garbled-leading-token failure mode specific to the compose-
|
| 29 |
+
assist task (a stray non-ASCII token before otherwise-correct output, unrelated to the
|
| 30 |
+
`<think>`/`<tool_call>` leak below) β caught by manual spot-checking since compose has no
|
| 31 |
+
automated schema to catch it against, not by any benchmark number.
|
| 32 |
|
| 33 |
It's the largest of the three **Cipher** tiers (`cipher-nano` / `cipher-air` / `cipher-pro`), and the strongest on structured-output accuracy β **100% category accuracy** on the triage benchmark below. Cipher is the local-model engine for an unreleased larger email-assistant project β that project isn't public yet, but these weights, the training code, the eval script, and all five dataset generators are fully open now, in this repo.
|
| 34 |
|
|
|
|
| 96 |
- Framework: [Unsloth](https://github.com/unslothai/unsloth) + `trl.SFTTrainer`
|
| 97 |
- Sequence packing (`trl.SFTConfig(packing=True)`) was tried to speed up training given most examples are well under the 2048-token context window β it crashed outright (`ValueError: Expected input batch_size (2048) to match target batch_size (3636)`, an Unsloth fused-loss/trl packing-collator incompatibility in this exact library version pairing), not a quality tradeoff. Disabled.
|
| 98 |
- Reproduce with `train_cipher_pro.py` β `export_gguf_cipher_pro.py`
|
| 99 |
+
- Voice-intent retrain (4 passes, each continuing LoRA training from the previous pass's
|
| 100 |
+
adapter rather than starting over):
|
| 101 |
+
1. ~1,800 voice-intent examples added to the mix β fixed the core hallucinated-address
|
| 102 |
+
bug, but introduced two new rule-violations (leaking a resolved recipient into
|
| 103 |
+
`search_email` queries; dropping a valid address match under an injection attempt).
|
| 104 |
+
2. ~2,800 examples targeting both failure modes specifically (heavier weight on
|
| 105 |
+
search-with-a-real-match-that-must-stay-null and injection-with-a-real-match cases) β
|
| 106 |
+
both fixed, but a 3rd failure mode surfaced: the `unknown` action (unsupported
|
| 107 |
+
requests like "forward this to my team") sometimes degenerated into an empty,
|
| 108 |
+
repeating `<tool_call>` loop instead of valid JSON.
|
| 109 |
+
3. A small (~1,500 example) continue-train pass β mostly expanded, more diverse `unknown`
|
| 110 |
+
phrasing plus a light replay slice of everything else to avoid regressing what already
|
| 111 |
+
worked β fixed the degenerate-loop case. At this point raw single-shot eval showed 4/5;
|
| 112 |
+
testing through the actual calling app's `chat_json` (which retries with the
|
| 113 |
+
validation error fed back, and falls back to `action: unknown` if all retries still
|
| 114 |
+
fail) showed this was already a real 5/5 in practice β the raw eval script's single
|
| 115 |
+
request just didn't reflect the app's actual behavior.
|
| 116 |
+
4. A final ~4,200 example pass fixed the separately-discovered compose garbled-leading-
|
| 117 |
+
token issue (see the note above), continuing from pass 3's adapter with the full
|
| 118 |
+
`unknown`-fixup data included in the replay slice specifically so that fix wouldn't
|
| 119 |
+
regress. Re-verified 5/5 on voice-intent afterward, no regression on triage/daily-
|
| 120 |
+
summary/chat.
|
| 121 |
|
| 122 |
## License
|
| 123 |
|
cipher-pro.Q4_K_M.gguf
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 2497278944
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b7ecf4c9acb5559fd05749e93730359d0e9d40bf4b4be90e576545181b067ddd
|
| 3 |
size 2497278944
|