Browse Source

zen: track openai cache_write_tokens

Frank 4 tuần trước cách đây
mục cha
commit
d0ba538924

+ 10 - 0
artifacts/glm52-rise-video/sst-env.d.ts

@@ -0,0 +1,10 @@
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
+/* biome-ignore-all lint: auto-generated */
+
+/// <reference path="../../sst-env.d.ts" />
+
+import "sst"
+export {}

+ 10 - 0
packages/codemode/sst-env.d.ts

@@ -0,0 +1,10 @@
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
+/* biome-ignore-all lint: auto-generated */
+
+/// <reference path="../../sst-env.d.ts" />
+
+import "sst"
+export {}

+ 3 - 1
packages/console/app/src/routes/zen/util/provider/openai.ts

@@ -4,6 +4,7 @@ type Usage = {
   input_tokens?: number
   input_tokens_details?: {
     cached_tokens?: number
+    cache_write_tokens?: number
   }
   output_tokens?: number
   output_tokens_details?: {
@@ -48,12 +49,13 @@ export const openaiHelper: ProviderHelper = ({ workspaceID }) => ({
     const outputTokens = usage.output_tokens ?? 0
     const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? undefined
     const cacheReadTokens = usage.input_tokens_details?.cached_tokens ?? undefined
+    const cacheWriteTokens = usage.input_tokens_details?.cache_write_tokens ?? undefined
     return {
       inputTokens: inputTokens - (cacheReadTokens ?? 0),
       outputTokens,
       reasoningTokens,
       cacheReadTokens,
-      cacheWrite5mTokens: undefined,
+      cacheWrite5mTokens: cacheWriteTokens,
       cacheWrite1hTokens: undefined,
     }
   },

+ 16 - 0
packages/console/app/test/providerUsage.test.ts

@@ -65,4 +65,20 @@ describe("provider usage extraction", () => {
       output_tokens: 7,
     })
   })
+
+  test("parses OpenAI stream cache write usage", () => {
+    const usageParser = providers.openai.createUsageParser()
+    usageParser.parse(
+      'event: response.completed\ndata: {"response":{"usage":{"input_tokens":10,"input_tokens_details":{"cached_tokens":4,"cache_write_tokens":3},"output_tokens":2}}}',
+    )
+
+    expect(providers.openai.normalizeUsage(usageParser.retrieve())).toEqual({
+      inputTokens: 6,
+      outputTokens: 2,
+      reasoningTokens: undefined,
+      cacheReadTokens: 4,
+      cacheWrite5mTokens: 3,
+      cacheWrite1hTokens: undefined,
+    })
+  })
 })