Files
Jyotisha/frontend/tests/agent-generation-settings.test.ts
T
Jesse_Chen bf8ad0d1ff fix(web): keep consultation conclusions across turns and surface cache hits (BUG-555, BUG-556)
Session history was silently clipped to the first 4000 characters of the last 12 messages, so follow-ups could not see timing or audit tables. Keep an append-only tail plus a checkpoint summary, retry overflow in the same request, and expose cache hit rate in admin usage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 15:16:18 +08:00

58 lines
2.2 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import {
cachedHistoryMessage,
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);
});
test("marks only the last Anthropic history message for cache", () => {
const last = { role: "assistant" as const, content: "先前结论" };
assert.deepEqual(cachedHistoryMessage(last, "anthropic/claude-sonnet"), {
role: "assistant",
content: "先前结论",
providerOptions: { anthropic: { cacheControl: { type: "ephemeral" } } },
});
assert.equal(cachedHistoryMessage(last, "openai/gpt-5"), last);
assert.equal(cachedHistoryMessage(last, { providerId: "deepseek" }), last);
});