Status:
retained_consumer_gpu_full_compatibilityon 2026-03-29 for a full repo-owned Hermeschat.completionsproof on native Psionicqwen35.
This document records the canonical retained Hermes compatibility proof for
native Psionic qwen35 on one consumer GPU.
The current honest boundary is:
- native Psionic now closes the full Hermes acceptance matrix
6/6on the localarchlinuxRTX 4080lane - the previously red same-turn
parallel_tool_turncase is now green in the full checker on2b - the same strict parallel row is also green in the separate attribution
matrix on
2b,4b, and9bagainst both Psionic and Ollama on the same host - the older
5/6retained reports remain useful historical evidence, but they are no longer the canonical current boundary
- Psionic revision:
f4788f38cc04febf5d9e9eb526694de048ceabc2 - Hermes revision:
e295a2215acd55f2ee930fc7a4cd2df1c5464234 - Host:
archlinux
Run the retained checker from the repo root:
scripts/release/check-psionic-hermes-qwen35-compatibility.shExact retained command:
TMPDIR=/home/christopherdavid/scratch/tmp/hermes-check-final \
PSIONIC_HERMES_SKIP_BUILD=1 \
PSIONIC_HERMES_ROOT=/home/christopherdavid/scratch/hermes-agent-proof2 \
PSIONIC_HERMES_PYTHON=/home/christopherdavid/scratch/hermes-min/.venv/bin/python \
PSIONIC_HERMES_SERVER_BIN=/home/christopherdavid/.cache/psionic-hermes-target/debug/psionic-openai-server \
PSIONIC_HERMES_QWEN35_MODEL_PATH=/home/christopherdavid/models/qwen3.5/qwen3.5-2b-q8_0-registry.gguf \
PSIONIC_HERMES_REPORT_PATH=/home/christopherdavid/scratch/psionic-hermes-final/fixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260329_archlinux_2b_f4788f38.json \
PSIONIC_HERMES_SERVER_LOG_PATH=/home/christopherdavid/scratch/logs/hermes_qwen35_psionic_compatibility_20260329_archlinux_2b_f4788f38.log \
scripts/release/check-psionic-hermes-qwen35-compatibility.sh- full compatibility proof:
fixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260329_archlinux_2b_f4788f38.json - grounded rerun of the full checker with the stricter parallel-row acceptance:
fixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260329_archlinux_2b_grounded.json - strict same-turn parallel matrix:
fixtures/qwen35/hermes/hermes_qwen35_parallel_tool_attribution_matrix_20260329_archlinux.json
Historical reports kept for comparison:
fixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260328_archlinux_2b.jsonfixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260328_archlinux_2b_b2277ed5.jsonfixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260328_archlinux_2b_9f67d65b.jsonfixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260328_archlinux_9b.jsonfixtures/qwen35/hermes/hermes_qwen35_psionic_compatibility_report_20260328_archlinux_9b_9f67d65b.json
Canonical retained 2b result on pushed f4788f38:
| Case | Result | Retained Summary |
|---|---|---|
required_tool_turn |
pass |
one required weather tool call emitted |
auto_plain_text_turn |
pass |
plain text answer, no tool call |
multi_turn_tool_loop |
pass |
tool replay reached final answer |
parallel_tool_turn |
pass |
same-turn assistant response emitted both tools and grounded the final answer in their results |
invalid_argument_truthful_refusal |
pass |
truthful unsupported-city refusal |
streamed_tool_turn |
pass |
streamed tool-call turn preserved |
Overall:
overall_pass = truepassing_case_count = 6total_case_count = 6
The old red row was not resolved by pretending the local model family had changed. The fix was in the native Psionic tool contract:
- required/named tool turns now prefer a plain JSON-schema tool-call batch instead of relying on the older tagged wrapper shape
- the required parallel contract now carries a real
minimum_required_tool_callsfloor - that floor is derived from backticked declared tool names in the request
messages when
tool_choice = requiredandparallel_tool_calls = true - the prompt contract now tells the model to emit at least that many tools on the required same-turn batch
That is why the canonical retained full checker now clears the formerly red
parallel row instead of stopping at 5/6.
One additional correction matters here: the parallel row is no longer counted
green merely because the first assistant turn emitted both tools. The current
retained checker requires the final assistant message to land as the grounded
summary Paris is sunny at 18C. Tokyo is rainy at 12C. after those two tool
results are replayed.
- strict same-turn parity receipts now live in
docs/HERMES_QWEN35_PARALLEL_ATTRIBUTION.md - same-host benchmark truth still lives in
docs/HERMES_BACKEND_BENCHMARK.md - serialized two-city proof still lives in
docs/HERMES_QWEN35_SERIALIZED_TWO_CITY.md - fast-path versus fallback runtime truth still lives in
docs/HERMES_QWEN35_FAST_PATH.md - repeated-loop warm-path truth still lives in
docs/HERMES_QWEN35_REUSE_BENCHMARK.md
It is now honest to say the repo retains a direct Hermes-on-Psionic
compatibility proof on one consumer GPU through the normal custom-provider
chat.completions path.
It is still not honest to say every Hermes question is solved:
- Ollama still wins wallclock on the older easy same-host benchmark rows
llama.cppis still not a runnable apples-to-apples comparator for thisqwen35artifact contract on the current host- raw-versus-registry artifact attribution on the local Ollama-managed
2bblob is still permission-blocked
But the old direct compatibility blocker is no longer open. The retained consumer-GPU Psionic lane is now green on the full Hermes acceptance matrix.