import assert from "node:assert/strict"; import test from "node:test"; import { cachedSystemMessage, mergePromptCacheUsage, promptCacheUsage, } from "../src/lib/agent-generation-settings.ts"; test("normalizes AI SDK cache token details", () => { assert.deepEqual(promptCacheUsage({ inputTokenDetails: { cacheReadTokens: 120, cacheWriteTokens: 30, noCacheTokens: 10 }, }), { readTokens: 120, writeTokens: 30, noCacheTokens: 10 }); }); test("normalizes OpenAI and legacy cache usage", () => { assert.deepEqual(promptCacheUsage({ prompt_tokens_details: { cached_tokens: 45 } }), { readTokens: 45, writeTokens: 0, noCacheTokens: 0, }); assert.deepEqual(promptCacheUsage({ cachedInputTokens: 12, cacheCreationInputTokens: 8 }), { readTokens: 12, writeTokens: 8, noCacheTokens: 0, }); }); test("merges cache usage and only reports a hit when reads exist", () => { assert.deepEqual(mergePromptCacheUsage([ { readTokens: 4, writeTokens: 5, noCacheTokens: 6 }, { readTokens: 7, writeTokens: 0, noCacheTokens: 1 }, ]), { readTokens: 11, writeTokens: 5, noCacheTokens: 7 }); assert.equal(promptCacheUsage({ inputTokenDetails: { cacheWriteTokens: 5 } })?.readTokens, 0); assert.equal(promptCacheUsage({ inputTokenDetails: { cacheReadTokens: 5 } })?.readTokens, 5); }); test("adds an Anthropic cache boundary and safely degrades for other providers", () => { assert.deepEqual(cachedSystemMessage("stable", "anthropic/claude-sonnet"), { role: "system", content: "stable", providerOptions: { anthropic: { cacheControl: { type: "ephemeral" } } }, }); assert.equal(cachedSystemMessage("stable", "openai/gpt-5"), null); assert.equal(cachedSystemMessage("stable", { providerId: "deepseek" }), null); });