import type { LanguageModelV3Middleware, LanguageModelV3Prompt } from '@ai-sdk/provider'; /** * Creates middleware that adds Anthropic prompt caching directives. * Marks the last system message and last user message with ephemeral cache control, * reducing input token cost and latency on repeated calls. */ export function createAnthropicCachingMiddleware(): LanguageModelV3Middleware { return { specificationVersion: 'v3', transformParams: async ({ params }) => { const messages = [...params.prompt] as Array>; // Find the last system message and last user message let lastSystemIdx = -1; let lastUserIdx = -1; for (let i = 0; i < messages.length; i++) { if (messages[i].role === 'system') lastSystemIdx = i; if (messages[i].role === 'user') lastUserIdx = i; } const targets = [lastSystemIdx, lastUserIdx].filter(i => i >= 0); for (const idx of targets) { const msg = { ...messages[idx] }; msg.providerOptions = { ...(msg.providerOptions as Record || {}), anthropic: { ...((msg.providerOptions as Record)?.anthropic as Record || {}), cacheControl: { type: 'ephemeral' }, }, }; messages[idx] = msg; } return { ...params, prompt: messages as unknown as LanguageModelV3Prompt }; }, }; }