Files
musistudio--claude-code-router/tests/main/usage-normalization.test.mjs
T
wehub-resource-sync 9f48d4a18c
Docs / Build (push) Has been cancelled
Docs / Deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:37:25 +08:00

57 lines
1.4 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import { normalizeUsageInputTokens } from "../../packages/core/src/usage/normalization.ts";
test("normalizeUsageInputTokens subtracts cache tokens for OpenAI-compatible protocols", () => {
const usage = normalizeUsageInputTokens(
{
cacheReadTokens: 20,
cacheWriteTokens: 5,
inputTokens: 100,
outputTokens: 12
},
{ providerProtocol: "openai_chat_completions" }
);
assert.deepEqual(usage, {
cacheReadTokens: 20,
cacheWriteTokens: 5,
inputTokens: 75,
outputTokens: 12
});
});
test("normalizeUsageInputTokens keeps Anthropic input tokens unchanged", () => {
const usage = normalizeUsageInputTokens(
{
cacheReadTokens: 20,
cacheWriteTokens: 5,
inputTokens: 100
},
{ providerProtocol: "anthropic_messages" }
);
assert.deepEqual(usage, {
cacheReadTokens: 20,
cacheWriteTokens: 5,
inputTokens: 100
});
});
test("normalizeUsageInputTokens falls back to path and usage hints", () => {
assert.equal(
normalizeUsageInputTokens(
{ cacheReadTokens: 8, inputTokens: 50 },
{ path: "/v1/responses" }
)?.inputTokens,
42
);
assert.equal(
normalizeUsageInputTokens(
{ cacheReadTokens: 8, inputTokens: 50 },
{ usageHint: { inputIncludesCacheTokens: false } }
)?.inputTokens,
50
);
});