ToolCallBench
Find out which local language model calls tools reliably on your own machine.
ToolCallBench gives a model six tools (read, list, search, edit, patch, run a command) and 20 small tasks on a sample Python project. It checks the results with plain code, not with another model, and writes a report that compares models and quantization levels.
It is tuned for a MacBook M4 with 16 GB of memory running Ollama, and works with any OpenAI-compatible local server (llama.cpp, LM Studio, vLLM).
Install and run
pip install toolcallbench
mkdir my-bench && cd my-bench
toolcallbench init # creates configs/ with example settings
Edit configs/my-models.yaml and list the models you have pulled in Ollama, then:
toolcallbench doctor --probe --config configs/my-models.yaml # check Ollama, models, tool calling
toolcallbench run --config configs/my-models.yaml # run the 20 tasks
toolcallbench sessions # list past runs
toolcallbench report --session <id> # Markdown + HTML report in ./results/reports
Every setting can also be given as an argument, and arguments override the config file:
toolcallbench run --model qwen3:8b --model gemma4:e4b --repeats 3 --num-ctx 16384 --groups read,edit
toolcallbench run --help
Other commands: toolcallbench list-tasks, toolcallbench validate-tasks, toolcallbench init --with-tasks
(copies the tasks and sample repo so you can edit them; a folder with its own tasks/ and
fixtures/repo/ uses them instead of the built-in ones). Results are written to ./results.
No model yet? toolcallbench run --backend scripted --repeats 1 runs the whole pipeline without one.
Ollama must be running (ollama serve) with the models pulled (ollama pull qwen3:8b).
On a 16 GB Mac, start from the m4-16gb.yaml example config. See docs/USER_GUIDE.md.
Develop
git clone <repo> && cd toolcallbench
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
python -m pytest
What a report tells you
- Pass rate overall and for read, edit, run, chain and failure tasks
- Why runs failed (13 failure types, such as
invalid_json,text_tool_call,patch_failed) - Tokens per second, seconds per task, and calls compared with a reference solution
- Every setting that affects the result (context length, seed, KV cache type, versions)
Status
Version 1.0.0. The harness, tasks, scoring, backends (checked against mock servers) and
reports are covered by automated tests. No real model has been benchmarked yet; run it on
your Mac to get the first numbers (docs/TEST_PLAN.md lists exactly what was and was not tested).
Documentation
| Document | Purpose |
|---|---|
| BUILD_FROM_SCRATCH.md | Day-by-day guide to build this project yourself, with all code |
| docs/PRD.md | Why it exists, who it is for, requirements |
| docs/TECH_SPEC.md | Exact behavior: tools, scoring, config, storage |
| docs/ARCHITECTURE.md | Diagrams: context, components, data flow, sequence, states, storage |
| docs/TEST_PLAN.md | What is tested and how requirements map to tests |
| docs/SECURITY.md | What protects you and what does not |
| docs/DECISIONS.md | Why it is built this way |
| docs/USER_GUIDE.md | Install, run, read the report, troubleshoot |
| docs/CLI_REFERENCE.md | Every command, option and config key |
| docs/MODEL_GUIDE_M4_16GB.md | Memory budget and model choices for 16 GB |
| docs/TASK_CATALOG.md | All 20 tasks (generated) |
| docs/ROADMAP.md, CHANGELOG.md, CONTRIBUTING.md | Project housekeeping |
License
MIT
Metadata
Release files for toolcallbench 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| toolcallbench-1.0.1.tar.gz | 50.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| toolcallbench-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 108.4 kB
Release files / toolcallbench-1.0.1.tar.gz
| Download URL | toolcallbench-1.0.1.tar.gz |
|---|---|
| Size | 50.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4c8a5d298ac2d8c9d47a9d54fb203fc645f53dea9ea778bbf29ced5dd7156d01
|
|
BLAKE2b-256 checksum How to use checksums |
158addd0f774c5c8bf42dac97568827dbd9ab3eec910a9a0a0a50f2eef16e2ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / toolcallbench-1.0.1-py3-none-any.whl
| Download URL | toolcallbench-1.0.1-py3-none-any.whl |
|---|---|
| Size | 58.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
06ef20776c90bd3d80c1e31cb28f2124f946d100f6be65bf5c669ebf2d2c061b
|
|
BLAKE2b-256 checksum How to use checksums |
a954844105899e114e4e3188b086a1923a698387d63e0f280e35c41cdd337f1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Security for toolcallbench 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.