Instructions to use gary23w/the-veil-12b 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 gary23w/the-veil-12b 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 gary23w/the-veil-12b:Q4_K_M # Run inference directly in the terminal: llama cli -hf gary23w/the-veil-12b:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf gary23w/the-veil-12b:Q4_K_M # Run inference directly in the terminal: llama cli -hf gary23w/the-veil-12b: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 gary23w/the-veil-12b:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf gary23w/the-veil-12b: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 gary23w/the-veil-12b:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf gary23w/the-veil-12b:Q4_K_M
Use Docker
docker model run hf.co/gary23w/the-veil-12b:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use gary23w/the-veil-12b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "gary23w/the-veil-12b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "gary23w/the-veil-12b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/gary23w/the-veil-12b:Q4_K_M
- Ollama
How to use gary23w/the-veil-12b with Ollama:
ollama run hf.co/gary23w/the-veil-12b:Q4_K_M
- Unsloth Studio
How to use gary23w/the-veil-12b with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for gary23w/the-veil-12b to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for gary23w/the-veil-12b to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for gary23w/the-veil-12b to start chatting
- Pi
How to use gary23w/the-veil-12b with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf gary23w/the-veil-12b:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "gary23w/the-veil-12b:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use gary23w/the-veil-12b with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf gary23w/the-veil-12b: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 gary23w/the-veil-12b:Q4_K_M
Run Hermes
hermes
- Atomic Chat new
- OpenClaw new
How to use gary23w/the-veil-12b with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf gary23w/the-veil-12b: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 "gary23w/the-veil-12b: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"
- Docker Model Runner
How to use gary23w/the-veil-12b with Docker Model Runner:
docker model run hf.co/gary23w/the-veil-12b:Q4_K_M
- Lemonade
How to use gary23w/the-veil-12b with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull gary23w/the-veil-12b:Q4_K_M
Run and chat with the model
lemonade run user.the-veil-12b-Q4_K_M
List all available models
lemonade list
Install from WinGet (Windows)
winget install llama.cpp
# Start a local OpenAI-compatible server with a web UI:
llama serve -hf gary23w/the-veil-12b:Q4_K_M# Run inference directly in the terminal:
llama cli -hf gary23w/the-veil-12b:Q4_K_MUse 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 gary23w/the-veil-12b:Q4_K_M# Run inference directly in the terminal:
./llama-cli -hf gary23w/the-veil-12b:Q4_K_MBuild 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 gary23w/the-veil-12b:Q4_K_M# Run inference directly in the terminal:
./build/bin/llama-cli -hf gary23w/the-veil-12b:Q4_K_MUse Docker
docker model run hf.co/gary23w/the-veil-12b:Q4_K_Mthe-veil-12b
The first official model for the nl-veil harness.
A Gemma 4 12B derivative, fine-tuned on nl-veil's own tool surface. One 7.4 GB file, no adapters to stack, no config to reconcile — point your client at it and it works.
What it's for
nl-veil hands a model a tool belt — a JSON array of everything it can do this turn — and that belt changes constantly. The chat surface ships twenty tools; a scout gets fifteen; an assembler gets eight; a browser session bolts on twelve more. A model that memorises one belt is useless the moment it sees another.
Most local models never learn to read the array at all. Handed read_file, they answer
Read. Handed web_search, they answer WebSearch. Handed stop_process, StopProcess.
Every one of those is rejected as an unknown tool and the turn is simply lost — which reads
as "small models can't do tool use" when the real problem is that the model is answering
from memory instead of from the belt in front of it.
the-veil-12b is trained so the belt is the only thing that can produce the right answer. Every training example carries a different tool array, sampled across nine schemas plus random subsets of a 58-tool registry. Memorising any single belt cannot help; reading the supplied one always can.
Results
Measured on 94 held-out drills against the stock model it was tuned from:
| stock | the-veil-12b | |
|---|---|---|
| general tool-use | 18/30 | 25/30 |
| tools it has never seen in training | 18/24 | 23/24 |
| invented tool names | 13 | 4 |
That middle row is the one worth dwelling on. Those twenty-four drills use tools —
journal, host_command, stage_delivery, browser_console, mcp_discover, osint_scan
— that appear in no training example whatsoever. Scoring 23/24 on them means the model
learned a policy, not a vocabulary: read the array you were handed, use its exact names.
Point it at a tool belt invented tomorrow and it will use that too.
Plug it in
With nl-veil
ollama create the-veil-12b -f Modelfile
Then pick the-veil-12b in nl-veil's model dropdown. That's the whole setup — the harness already speaks Gemma 4's native tool protocol, and this model speaks it back.
With Ollama directly
ollama create the-veil-12b -f Modelfile
ollama run the-veil-12b
Tools go over /api/chat the ordinary way:
curl http://localhost:11434/api/chat -d '{
"model": "the-veil-12b",
"messages": [{"role":"user","content":"Read notes/todo.txt and tell me the first line."}],
"tools": [{"type":"function","function":{
"name":"read_file","description":"Read a text file.",
"parameters":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]}}}],
"stream": false
}'
examples/tool_call.py runs a full round trip — offer a belt, get a structured call, execute
it, feed the result back, get the answer. Copy it as a starting point.
With llama.cpp
llama-cli -m the-veil-12b-Q4_K_M.gguf --jinja -p "your prompt"
--jinja is required: the tool protocol lives in the model's own chat template.
Getting the most out of it
Render the chat template yourself if you can. Tool-name accuracy is materially higher when the host renders Gemma 4's template and posts a raw completion than when a runtime's built-in renderer does it — we measured a ~17-drill swing on identical weights. nl-veil does this automatically when it detects the difference. If you're building your own client, it's the single highest-value thing you can do.
Give tools honest descriptions. The model reads them. A tool described as "Read a text file. A whole-file read is CLIPPED — pass start_line/end_line for a big file" gets used correctly far more often than one described as "reads files".
Keep the belt to what the turn needs. It handles twenty-plus tools fine, but precision rises as the belt narrows to what's actually relevant.
Limitations
Worth knowing before you wire it into anything real:
- It is a tool router, not a reasoner. Multi-step inference, mathematics and open-ended analysis are ordinary-12B quality. It is tuned for knowing which tool, not for thinking hard about the answer.
- Ground anything time-sensitive. Like any model it will produce fluent, confident, wrong specifics for current facts if it answers from weights instead of searching. Give it a search tool and it will generally reach for it.
- Phrasing shifts its behaviour. Naming the action — "search the web for …", "read the file …" — is the most reliable way to get the call you want.
Specifications
| architecture | gemma4 — 48 layers, 3840 hidden, 16 heads, 262144 vocab |
| context | 262144 |
| quantisation | Q4_K_M, 7.38 GB |
| method | QLoRA rank 16 / alpha 32 on attention + MLP, merged into the base |
| tool protocol | Gemma 4 native (<|tool_call>call:name{...}<tool_call|>) |
Files
| file | purpose |
|---|---|
the-veil-12b-Q4_K_M.gguf |
the model |
Modelfile |
Ollama recipe — renderer, parser, stop token |
examples/tool_call.py |
end-to-end tool-call round trip |
NOTICE |
attribution required by Apache-2.0 |
Origins
Built on Gemma 4 12B, Google's open model family, whose architecture, tokenizer and pretrained weights make all of this possible. The tool-routing behaviour described here is ours; everything underneath it is Gemma's, and the quality of that foundation is why a 12B can do this at all.
Apache-2.0. See NOTICE for the full attribution chain.
The harness
This model exists to drive nl-veil — a single-binary hive-mind orchestration engine: server, CLI and desktop client in one process, with a tool surface that spans the filesystem, the live web, a real browser, and a shared associative memory. the-veil-12b is the first model tuned specifically for it.
If you build something with either, we'd like to hear about it.
- Downloads last month
- 32
4-bit
Install (macOS, Linux)
# Start a local OpenAI-compatible server with a web UI: llama serve -hf gary23w/the-veil-12b:Q4_K_M# Run inference directly in the terminal: llama cli -hf gary23w/the-veil-12b:Q4_K_M