llama.cpp rejects tool calls: tools param requires --jinja flag
Changing an explicit --no-jinja to --jinja restored the complete tested tool-call task; a separate agent repeated the result on the same Mac.
Retained qualification evidence · October 15, 2026Tested by the author and rerun by a separate agent on the same Mac. These are bounded task results, not a second-machine or human reproduction. This release reuses those runs; no new model inference was performed.
Download evidence ZIP
125,810 bytes
SHA-256: ebd44834c846092ab6a5121d5664d827c5782be0ccc23694442a7f55add4f5c0
The unchanged report below describes the original pilot. Statements that production was unchanged refer to that pilot, before this publication. Files mentioned in the report are inside the ZIP.
Repair 001 results
Qualified October 15, 2026 Pacific. Replacing an explicit --no-jinja with --jinja restored a complete tool-backed inventory task on llama.cpp 0.6.0 build 11429, commit d81235049, with the pinned Qwen3-4B Q4_K_M model. A separate agent reproduced the result from a frozen ZIP in a fresh directory on the same Mac.
The exact baseline and reverted error was HTTP 500:
{"error":{"code":500,"message":"tools param requires --jinja flag","type":"server_error"}}
| Execution | Baseline full-task passes | Corrected full-task passes | Reverted full-task passes | Qualification |
| Author, original fixture | 0/3 | 0/3 | 0/1 | Failed; retained |
| Author, clarified fixture revision 2 | 0/3 | 3/3 | 0/1 | Passed |
| Independent agent, frozen revision 2 ZIP | 0/3 | 3/3 | 0/1 | Passed |
The original fixture's corrected arm emitted and executed the right tool, but answered Stock for SKU: 37, failing the original strict SKU/exact-answer check. It was not counted as successful. Revision 2 clarified the formatting instruction, kept the stock count out of the initial request, and retained the exact acceptance checker. Both configurations were rerun. The v1 source and all failed attempts are included in evidence/qualification-v1-source/ and evidence/author-run-001/.
In both qualifying executions, all three corrected requests produced lookup_stock with exactly {"sku":"KINGY-017"}. The client executed its synthetic lookup, returned stock 37 to the model, and received exactly Stock for KINGY-017: 37. with finish reason stop. Every successful response reported zero cached tokens. The complete command arrays differed only at the Jinja flag within each run. Reversion restored the same error.
Verification that can be inspected offline
The verifier independently checked requests, raw responses, exact baseline error, runtime/model/runner/fixture identities, command invariants, tool execution/result return, answer text, stop reasons and cache counters. Its audit rejected 11 negative controls, including wrong SKU/stock/error, a changed correction flag, missing tool result, cached output and modified runner/fixture. The author revision 2 receipts also passed the independently written audit and all 11 controls.
From this extracted distribution, rerun the independent evidence audit without loading a model:
python3 evidence/independent-audit.py \
--archive evidence/verifier-input.zip \
--package . \
--results evidence/independent-run-001 \
--port 18086 \
--out /tmp/kingy-fix-001-offline-audit.json
Use README.md to execute fresh model inference. The outer distribution contains the unchanged executable, fixture and original seven-file verifier ZIP. SHA256SUMS covers its individual files; the outer archive hash is supplied separately.
Evidence boundaries
The stock lookup is a synthetic fixture with no external side effects. It exercises actual local model inference and complete client tool handling, not a live inventory service. The frozen ZIP SHA-256 is edfd318f009ff2fa9aa09147765b5ca9619aaf0c9c822ee3826266537385e4d2. Its runner hash is 07e757424b4fa73fea43db09791928b423eb33fc4a74683a6a4fffb13194db4e and revision 2 fixture hash is 353b9222fa0dfa68ca0a99eda79e39a65b66d476ddf3f016f984513434b3bba2.
Testing used macOS 26.3 build 25D125, Darwin arm64, Mac16,7, 24 GiB unified memory, Python 3.14.0 and CPU-only inference. Independent execution occurred October 15, 00:27:24–00:28:49 Pacific. This is same-host agent reproduction, not human or second-machine reproduction. Three fixed repeats per arm are not a reliability estimate. This fixture was refined during qualification and is not held out.
Jinja is enabled by default in this runtime. This correction applies to an explicitly disabled Jinja configuration, not to every tool-call failure or an omitted flag. It does not establish general model accuracy, GPU/streaming/parallel-tool behavior, other models or minimum memory.
No runtime or model was installed/downloaded, no paid API was called, and no repair was published to production during this pilot. Existing hardware, electricity, agent use and hosting are not priced as zero. Local model paths are redacted from distributed receipts; redaction manifests retain source/export hashes. Numeric results and model answers are unchanged.
Read the repair steps in Fix Finder →