补齐缓存写量与请求轮廓记账,便于核对提示缓存是否真的命中。

给用量行挂上轮次步骤和分段字数,统计页能看出缓存断在哪。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 23:47:51 +08:00
co-authored by Cursor
parent d0274afb80
commit bb4f934b3d
13 changed files with 738 additions and 50 deletions
+14 -1
View File
@@ -44,6 +44,16 @@ describe("parseUsage", () => {
expect(usage?.cacheMissTokens).toBe(100);
});
it("parses cache write tokens when the provider returns them", () => {
const usage = parseUsage({
prompt_tokens: 100,
completion_tokens: 10,
total_tokens: 110,
cache_creation_input_tokens: 40,
});
expect(usage?.cacheWriteTokens).toBe(40);
});
it("returns undefined for empty usage", () => {
expect(parseUsage(null)).toBeUndefined();
expect(parseUsage({})).toBeUndefined();
@@ -52,8 +62,10 @@ describe("parseUsage", () => {
describe("TokenTrackingProvider", () => {
it("stores pending usage with cache fields on context", async () => {
let seenSession: string | undefined;
const inner: LlmProvider = {
async complete(): Promise<CompleteResult> {
async complete(_messages, options): Promise<CompleteResult> {
seenSession = options?.sessionId;
return {
content: "ok",
model: "test-model",
@@ -71,6 +83,7 @@ describe("TokenTrackingProvider", () => {
const ctx: LlmTrackingContext = { sessionId: "sess-1" };
const provider = new TokenTrackingProvider(inner, () => ctx);
await provider.complete([], { caller: "worker:write-rules" });
expect(seenSession).toBe("sess-1");
expect(ctx.pendingUsage).toMatchObject({
totalTokens: 15,