feat(backend): BACKEND_SLOT_PINNING — per-phase engine slot ownership

Each pipeline phase owns one llama-server slot (steward 0, orchestrator
1, synthesizer 2), carried as id_slot in extra_body through the same
mechanism tool_choice already uses, so the phase's stable prompt prefix
stays in that slot's KV cache and a turn re-prefills only its new
tokens. Off by default; a no-op on the Claude backend and ignored by
Ollama, so the flag is safe on any backend and the cutover itself stays
a pure env swap.

The merge helper preserves existing extra_body keys — mutation-checked
(dropping the merge fails exactly the test written for it).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-11 22:25:53 +02:00
co-authored by Claude Fable 5
parent 9ff698b55d
commit 23217bdb26
6 changed files with 80 additions and 10 deletions
+7
View File
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- `BACKEND_SLOT_PINNING` (default off): pins each pipeline phase to a
llama-server slot (steward=0, orchestrator=1, synthesizer=2) so a
phase's stable prompt prefix stays in that slot's KV cache. No-op on
Claude; ignored by Ollama.
## [2.5.0] - 2026-09-11
### Added