57 lines
1.4 KiB
JavaScript
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
|
|
);
|
|
});
|