Release notes, v0.12.0
TandemLLM 0.12.0 gives API clients that offer tools a conductor profile of their own. An OpenAI SDK, curl or an unnamed client that sends tools and names no profile now gets tools: the prompt as the client sent it, token for token the raw path's, with the loop guards and the tool-call checks acting. Every change is in CHANGELOG.md, and the PDF below is the manual.
Tool calls
- The
toolsprofile. A request resolves to theX-Tandem-Profileheader, else the profile mapped to its client, elsetoolswhen no profile maps the client and the request offers a function tool. It adds no note, package, memory or effort change. D1, D1b, D2, E1, C3, C4 and C5 act, and each act is journaled. A call goes out whole once the checks have seen it. - Structured outputs with tools. A
response_formatorstructured_outputsbeside tools was a 400. The answer is now a tool call or the document, and the model's own first answer token picks which. Speculation changes no token. - C5, one mutation per turn. An answer with two or more calls that change something outside the conversation (send, schedule, create, write, delete) is written again one call at a time, each after the last one's result. It acts in
toolsand journals in shadow incoding,chat-app,hermesandchat. - The secret echo mask. A key that a tool result showed the model is masked where the answer repeats it:
sk-abc123becomessk-[redacted]. Call arguments are untouched. - On the raw path an SDK, curl or unnamed client gets the thinking in
reasoning_contentand the answer alone incontent.
tool-eval-bench
We ran tool-eval-bench on one DGX Spark with Qwen3.8-27B in the EXL3 6.0 pack, seed 42, temperature 0, each row one run. On the 69 scenarios:
| path | score | time |
|---|---|---|
| raw, thinking off | 92 | 8.0 min |
raw, effort low |
96 | 12.7 min |
raw, effort medium |
96 | 13.4 min |
raw, effort high |
95 | 11.9 min |
raw, effort xhigh |
97 | 12.4 min |
conductor, tools |
95 | 15.0 min |
| conductor, effort by turn class, no packages | 96 | 13.5 min |
| conductor, effort by turn class, packages | 94 | 26.0 min |
conductor, chat |
91 | 28.0 min |
Two runs of the same prompt scored 95 and 97, so rows within 2 points are the same. In the bench's hard mode, 28 scenarios, the conductor scored 91 and raw 84, one run a side. docs/tool-eval-bench.md has every row with its settings and command, and docs/benchmarks.md says how to run the bench.
Fixes
/v1/models/{id}asks for the key/v1/modelsasks for. The standalone proxy times out a request that sends nothing for 60 s. chatd compacts and retries once on a 400 that says the request is over the window. An operator sets a relayed model's output limit under Backends (#21).- Pull requests #36, #46, #47, #49, #50, #51, #53 to #61, #64, #67, #70, #71 and #73 to #76 by AgentSparko fix the conductor's journal writer and session pages, the collectors, the proxy's TLS sockets and model cards, the sandbox relay, chatd's
finish_guard, and stale responses in the dashboard.
Update
Run the installer again: bash ~/TandemLLM/src/install.sh --yes --ref v0.12.0. A box with stored conductor documents gets the tools profile at its next start; a stored monitor document gets C5 with tools/monitor_migrate.py --put http://127.0.0.1:8000 --tasks C5, run on the box.
Files of the release
- tandemllm-manual-0.12.0.pdf (4487 KiB)