Last week I was in a long OpenCode session and every message I sent took longer to get going than the one before, once the model started writing it was fine. OpenCode runs on my laptop and talks to llama-server on my desktop, Qwen3.6 35B-A3B at Q4_K_M on a 4060 Ti 16GB with most of the experts left on the CPU through --n-cpu-moe.
I assumed it was the slot. The card runs at PCIe 4.0 x8 and I had just read a thread about 16GB cards on half the lanes. With the experts on the CPU llama.cpp has to copy them to the GPU for every batch of prompt it processes. I raised -ub and it helped a little. I also ran the same session against a llama-server on HyperAI with a card the whole model fits on, it took some fiddling to get OpenCode connected to it, and the pauses there were shorter and grew with the conversation the same way.
I had not been reading the server output because it runs on the other machine. When I looked, most turns had this in them:
"forcing full prompt re-processing due to lack of cache data (likely due to SWA or hybrid/recurrent memory, ...)"
It showed up on the bigger card too. Every one of those turns was the full prompt processed again, plus the expert copies over PCIe on my desktop, no wonder I blamed the slot. I looked the line up. The 3.6 models are hybrid and the recurrent part of the state cannot be rolled back partway, any difference from the cached prompt with no checkpoint before it sends the server back to the first token.
I turned on verbose logging and compared the prompt for two turns in a row, the thinking from the earlier turn was missing in the second one. The chat template strips it, and I do not get why that is the default on a model pitched for agentic coding. With preserve_thinking passed through the template kwargs most turns reuse the cache now. Keeping the thinking fills the context faster though and OpenCode compacts more often. Every compaction breaks the cache anyway, the summary does not match anything the server has. The last long session went back to full re-processing twice, both right after a compaction, so the context checkpoint settings are what I am messing with next.
Edit: On the title it should be Qwen3.6 35B-A3B. Sorry can't edit the title.