Instructions to use Gramscii-IT/ToolChooser-0.8B 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 Gramscii-IT/ToolChooser-0.8B 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 Gramscii-IT/ToolChooser-0.8B:Q8_0 # Run inference directly in the terminal: llama cli -hf Gramscii-IT/ToolChooser-0.8B:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf Gramscii-IT/ToolChooser-0.8B:Q8_0 # Run inference directly in the terminal: llama cli -hf Gramscii-IT/ToolChooser-0.8B:Q8_0
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf Gramscii-IT/ToolChooser-0.8B:Q8_0 # Run inference directly in the terminal: ./build/bin/llama cli -hf Gramscii-IT/ToolChooser-0.8B:Q8_0
Use Docker
docker model run hf.co/Gramscii-IT/ToolChooser-0.8B:Q8_0
- Llama new
- LM Studio
- Jan
- vLLM
How to use Gramscii-IT/ToolChooser-0.8B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Gramscii-IT/ToolChooser-0.8B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Gramscii-IT/ToolChooser-0.8B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Gramscii-IT/ToolChooser-0.8B:Q8_0
- Ollama
How to use Gramscii-IT/ToolChooser-0.8B with Ollama:
ollama run hf.co/Gramscii-IT/ToolChooser-0.8B:Q8_0
- Unsloth Desktop
- Pi
How to use Gramscii-IT/ToolChooser-0.8B with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Gramscii-IT/ToolChooser-0.8B:Q8_0
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": "Gramscii-IT/ToolChooser-0.8B:Q8_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use Gramscii-IT/ToolChooser-0.8B with Docker Model Runner:
docker model run hf.co/Gramscii-IT/ToolChooser-0.8B:Q8_0
- Lemonade
How to use Gramscii-IT/ToolChooser-0.8B with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull Gramscii-IT/ToolChooser-0.8B:Q8_0
Run and chat with the model
lemonade run user.ToolChooser-0.8B-Q8_0
List all available models
lemonade list
- Hermes Agent
How to use Gramscii-IT/ToolChooser-0.8B with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Gramscii-IT/ToolChooser-0.8B:Q8_0
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 Gramscii-IT/ToolChooser-0.8B:Q8_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Gramscii-IT/ToolChooser-0.8B with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Gramscii-IT/ToolChooser-0.8B:Q8_0
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 "Gramscii-IT/ToolChooser-0.8B:Q8_0" \ --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"
ToolChooser-0.8B
A LoRA adapter on Qwen3.5-0.8B that chooses which tool answers a chat message when an embedding router is unsure. The router scores the message against every capability (tool) the chat offers; when two or more are still close, ToolChooser chooses one of them, or none, in which case the person is asked to choose.
It chooses only among the capabilities the router itself offered, and the host application decides what runs: a model's output alone never authorizes an operation.
It is a distillation: it learned the choices of a teacher 34 times its size, Qwen3.8-27B. On tie-breaks it never saw it makes the teacher's choice more often than a 35-billion-parameter model asked the same thing, and a wrong choice a tenth as often:
| 201 tie-breaks of 31 October: the teacher's choice / the person asked / wrong | 106 tie-breaks of 22 October | seconds a tie-break | |
|---|---|---|---|
| ToolChooser-0.8B | 184 / 15 / 2 | 91 / 13 / 2 | 0.31 |
| its predecessor of 31 October | 176 / 24 / 1 | 83 / 21 / 2 | โ |
| Qwen3.6-35B-A3B, thinking off (MoE, 3B active) | 171 / 4 / 26 | 84 / 4 / 18 | 0.55 |
| DeepSeek-V4-Flash, thinking off | 152 / 24 / 24, 1 unreadable | 71 / 20 / 15 | 1.91 |
| LFM2.5-24B-A2B, thinking on (it cannot be turned off) | 145 / 1 / 41, 14 unreadable | 74 / 0 / 26, 6 unreadable | โ |
| Qwen3.5-4B, thinking off | 134 / 12 / 55 | 69 / 6 / 31 | 0.40 |
A wrong choice is a capability where the teacher chose none or another one; the person being asked is not a wrong choice, since nothing runs that was not asked for. The general models write their answer with the sampling their own cards give, and it is read with the host application's own parser; unreadable means the parser found no answer in it. ToolChooser's answer is read as a decision (below), in a few short requests: the template, the tokenizer and the next-token probabilities along the options; a general model writes its answer in one. Seconds are the median over the 201 tie-breaks, one request at a time on one NVIDIA A100 64 GB with llama.cpp, through the application's own call; DeepSeek-V4-Flash on three, which it needs, over its first 50.
Its sibling adapters load on the same base, each in a repository of its own: SemanticRepair-0.8B, which rewrites a message the router did not place, and QueryTranslator-0.8B, which writes a search request again in another language.
What is in this repository
| file | what it is |
|---|---|
qwen3.5-0.8b-base-2fc06364-q8_0.gguf |
the base: Qwen3.5-0.8B at revision 2fc06364, Q8_0, 833,592,320 bytes, sha256 6a94a8273ab1fc5735743967b621eb5a3baba8e36a202f61c20dc47fbb80eb51 |
tool-chooser-0.8b-20261107-lora-f16.gguf |
the adapter of 7 November 2026, F16 LoRA, 21,671,008 bytes, sha256 6713e46c8f7d2bf8a3b8f24cf7f66c6dbcb4f7acbc37c7ab747d69f59bb1bd9f |
LICENSE |
the base model's Apache-2.0 licence |
Pin the sha256 of both files: a routing decision has to be reproducible.
Where it runs
With llama-server:
llama-server -m qwen3.5-0.8b-base-2fc06364-q8_0.gguf \
--lora tool-chooser-0.8b-20261107-lora-f16.gguf \
--jinja --host 127.0.0.1 --port 9250 -ngl 99 -c 32768 --no-context-shift --cache-ram 0
When the base also carries its sibling adapters, each request names this one at full scale and the others at none.
When it is asked, and how it is read
It reads the base model's chat template (llama-server --jinja, thinking
off): a system message with the rules, and a user message listing the offered
capabilities, each with its title, its description and what it gives
(prose, tables, a chartโฆ), the documents the person selected, and the
message. The rules: choose by what the message asks for, not by the words it
shares with a title; when the person selected documents and the message asks
about what they hold, choose the capability that reads the selected
documents; otherwise choose one only when the message plainly asks for what
it gives and for nothing another one gives as well, and answer none when two
would answer it equally. Its trained answer is one Markdown item:
- capability: <one id from the list, or none>
Nothing is generated. For each offered capability and for none, the
host reads the probability of that whole answer, its end token included,
from llama-server's next-token log-probabilities (/completion with
n_probs), and normalizes them over the options. The likeliest capability is
taken only when its probability is at least 0.85; below that the person is
asked to choose. 0.85 is the lowest threshold with the fewest wrong choices on
the 201 tie-breaks of 31 October, so their figures are not independent of it;
the 106 tie-breaks of 22 October played no part in choosing it.
| threshold | 201: the teacher's choice / the person asked / wrong | 106 |
|---|---|---|
| 0.8 | 182 / 15 / 4 | 90 / 13 / 3 |
| 0.85 | 184 / 15 / 2 | 91 / 13 / 2 |
| 0.9 | 182 / 17 / 2 | 90 / 14 / 2 |
A higher threshold can add choices the same as the teacher's: where the teacher chose none, a capability below the threshold becomes none.
What it is measured to do
201 tie-breaks of 31 October, 146 Italian and 55 English, from conversation groups that share nothing with the training rows, each answered by the teacher, Qwen3.8-27B, with the rules above; in 116 of them the person had selected documents.
106 tie-breaks of 22 October, 53 Italian and 53 English, answered by the teacher with the rules of that day, before the rule on selected documents.
In the chat's routing chain on 8 November, behind SemanticRepair-0.8B of 7 November, against its predecessor of 31 October: on 100 test messages, 50 Italian and 50 English, right 92 against 90 and wrong 6 against 8; on 481 real Italian questions right 178 against 177 and wrong 32 against 32.
What it does not fix
It chooses only among what the router offered. A capability the router did not put in the contest cannot be chosen, however right it would be.
The descriptions alone often do not settle it. Without selected documents it leaves more choices to the person than with them: a description says what a capability gives, not every question it answers.
Measured in Italian and English.
The data it was trained on
49,528 training rows, 40,216 answered with a capability and 9,312 with none: the 28,662 tie-breaks of the earlier training, recorded in scripted conversations played through the application and asked again on 31 October of the teacher with the rules above, and 20,866 recorded since 1 November and answered by the teacher with the same rules. 36,449 tie-breaks the teacher answered with the rules of 22 October while documents were selected are left out, since the rule on selected documents changed their answer; an answer the host's own parser could not read is left out. The 201 tie-breaks of the table were taken out by conversation group before training, and the 106 of 22 October and every question a benchmark measures stay out too.
Training
| base | Qwen/Qwen3.5-0.8B at 2fc06364, its language model only |
| method | LoRA, rank 16, alpha 32, dropout 0.05, on every linear layer but the embeddings and the head (186 modules, 10.8M parameters) |
| schedule | one pass: 6,191 updates of 8 examples, learning rate 1ร10โปโด, 100 warm-up steps |
| tokens | 49.3M in the examples, 348K of them in the answers |
| loss | on the answer only |
| hardware | one NVIDIA A100 64 GB of the Leonardo supercomputer in Bologna, thanks to CINECA |
| release | F16 LoRA GGUF |
It starts from the original base; it does not continue an earlier round.
Licence
Apache-2.0, as its base model Qwen3.5-0.8B. What it chooses is yours to check, and so is the responsibility for what you let it decide.
- Downloads last month
- 92
8-bit
16-bit
Model tree for Gramscii-IT/ToolChooser-0.8B
Evaluation results
- Same choice as the teacher, Qwen3.8-27B (%) on 201 held-out tie-breaks of 31 October (146 Italian, 55 English), no conversation group shared with trainingtest set self-reported91.500
- Wrong choices (%), lower is better on 201 held-out tie-breaks of 31 October (146 Italian, 55 English), no conversation group shared with trainingtest set self-reported1.000
- Same choice as the teacher, Qwen3.8-27B (%) on 106 held-out tie-breaks (53 Italian, 53 English)test set self-reported85.800
- Wrong choices (%), lower is better on 106 held-out tie-breaks (53 Italian, 53 English)test set self-reported1.900