df6a9e74d9
Standalone Grok Build status strip with parallel sessions, width-adaptive layout, Chinese/English settings UI, and token breakdown. Product copy no longer references third-party tools.
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
parseTokenUsageFromLines,
|
|
formatExactCount,
|
|
formatTokenBreakdownLine,
|
|
parseUsageObject,
|
|
} from "../src/token-usage.js";
|
|
|
|
describe("token-usage", () => {
|
|
it("parses turn_completed usage with cache", () => {
|
|
const lines = [
|
|
JSON.stringify({
|
|
method: "session/update",
|
|
params: {
|
|
update: {
|
|
sessionUpdate: "turn_completed",
|
|
usage: {
|
|
inputTokens: 1000,
|
|
outputTokens: 50,
|
|
cachedReadTokens: 800,
|
|
reasoningTokens: 20,
|
|
totalTokens: 1050,
|
|
modelCalls: 2,
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
JSON.stringify({
|
|
method: "_x.ai/session/update",
|
|
params: {
|
|
update: {
|
|
sessionUpdate: "turn_completed",
|
|
usage: {
|
|
inputTokens: 974820,
|
|
outputTokens: 15706,
|
|
cachedReadTokens: 944000,
|
|
reasoningTokens: 9717,
|
|
totalTokens: 990526,
|
|
modelCalls: 9,
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
];
|
|
const r = parseTokenUsageFromLines(lines);
|
|
assert.equal(r.turnCount, 2);
|
|
assert.ok(r.lastTurn);
|
|
assert.equal(r.lastTurn!.inputTokens, 974820);
|
|
assert.equal(r.lastTurn!.outputTokens, 15706);
|
|
assert.equal(r.lastTurn!.cachedReadTokens, 944000);
|
|
assert.equal(r.lastTurn!.reasoningTokens, 9717);
|
|
assert.ok(r.lastTurn!.cacheHitPct > 90);
|
|
assert.equal(r.session.inputTokens, 1000 + 974820);
|
|
assert.equal(r.session.outputTokens, 50 + 15706);
|
|
});
|
|
|
|
it("formats exact digits and breakdown line", () => {
|
|
assert.equal(formatExactCount(974820), "974,820");
|
|
const line = formatTokenBreakdownLine(
|
|
parseUsageObject({
|
|
inputTokens: 974820,
|
|
outputTokens: 15706,
|
|
cachedReadTokens: 944000,
|
|
reasoningTokens: 9717,
|
|
}),
|
|
{ mode: "exact" },
|
|
);
|
|
assert.match(line, /TOK IN 974,820/);
|
|
assert.match(line, /OUT 15,706/);
|
|
assert.match(line, /CACHE 944,000 \(97%\)/);
|
|
assert.match(line, /REASON 9,717/);
|
|
});
|
|
});
|