diff --git a/src/agents/anthropic-payload-policy.test.ts b/src/agents/anthropic-payload-policy.test.ts index 954ec0f36b60..c3d26b3f6dfc 100644 --- a/src/agents/anthropic-payload-policy.test.ts +++ b/src/agents/anthropic-payload-policy.test.ts @@ -100,12 +100,13 @@ describe("anthropic payload policy", () => { type: "tool_result", tool_use_id: "tool_1", content: "done", + cache_control: { type: "ephemeral", ttl: "1h" }, }, ], }); }); - it("keeps the conversation cache marker on user text through trailing tool results", () => { + it("keeps a stable user marker while advancing through trailing tool results", () => { const policy = resolveAnthropicPayloadPolicy({ provider: "anthropic", api: "anthropic-messages", @@ -157,7 +158,14 @@ describe("anthropic payload policy", () => { }); expect(payload.messages[4]).toEqual({ role: "user", - content: [{ type: "tool_result", tool_use_id: "tool_2", content: "next chunk" }], + content: [ + { + type: "tool_result", + tool_use_id: "tool_2", + content: "next chunk", + cache_control: { type: "ephemeral" }, + }, + ], }); }); diff --git a/src/agents/anthropic-payload-policy.ts b/src/agents/anthropic-payload-policy.ts index bc1507a9d51a..c44c9ef1b0f3 100644 --- a/src/agents/anthropic-payload-policy.ts +++ b/src/agents/anthropic-payload-policy.ts @@ -185,6 +185,9 @@ function applyAnthropicCacheControlToMessages( const blockRecord = block as Record; if (blockRecord.type === "text" || blockRecord.type === "image") { blockRecord.cache_control = cacheControl; + if (fallbackToolResult) { + fallbackToolResult.cache_control = cacheControl; + } return; } if (blockRecord.type === "tool_result" && fallbackToolResult === undefined) { diff --git a/src/llm/providers/anthropic.ts b/src/llm/providers/anthropic.ts index d10a848de5dc..b1a76d1452b9 100644 --- a/src/llm/providers/anthropic.ts +++ b/src/llm/providers/anthropic.ts @@ -1193,6 +1193,13 @@ function convertMessages( if (block.type === "text" || block.type === "image") { (block as typeof block & { cache_control?: typeof cacheControl }).cache_control = cacheControl; + if (fallbackToolResult) { + ( + fallbackToolResult as typeof fallbackToolResult & { + cache_control?: typeof cacheControl; + } + ).cache_control = cacheControl; + } return params; } if (block.type === "tool_result" && fallbackToolResult === undefined) {