fix(prompt-caching): skip top-level cache_control on role:tool for OpenRouter

On the native Anthropic Messages API path, convert_messages_to_anthropic()
moves top-level cache_control on role:tool messages inside the tool_result
block. On OpenRouter (chat_completions), no such conversion happens — the
unexpected top-level field causes a silent hang on the second tool call.

Add native_anthropic parameter to _apply_cache_marker() and
apply_anthropic_cache_control(). When False (OpenRouter), role:tool messages
are skipped entirely. When True (native Anthropic), existing behaviour is
preserved.

Fixes #2362
This commit is contained in:
teyrebaz33 2026-03-22 01:05:26 +03:00 committed by Teknium
parent 52dd479214
commit bd49bce278
No known key found for this signature in database
4 changed files with 17 additions and 8 deletions

View file

@ -5627,7 +5627,7 @@ class AIAgent:
# inject cache_control breakpoints (system + last 3 messages) to reduce
# input token costs by ~75% on multi-turn conversations.
if self._use_prompt_caching:
api_messages = apply_anthropic_cache_control(api_messages, cache_ttl=self._cache_ttl)
api_messages = apply_anthropic_cache_control(api_messages, cache_ttl=self._cache_ttl, native_anthropic=(self.api_mode == 'anthropic_messages'))
# Safety net: strip orphaned tool results / add stubs for missing
# results before sending to the API. Runs unconditionally — not