diff options
| author | Frank <[email protected]> | 2025-09-12 11:57:12 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2025-09-12 11:57:14 -0400 |
| commit | c294a181559185dedf6a65e00e1db597721a815b (patch) | |
| tree | 3a9569986462b8d399d903092451dcb534f4dcb0 /cloud/app/src/routes | |
| parent | c3dc6d6df647f8e21dfcd9aeaf4d69bc45580020 (diff) | |
| download | opencode-c294a181559185dedf6a65e00e1db597721a815b.tar.gz opencode-c294a181559185dedf6a65e00e1db597721a815b.zip | |
wip: zen
Diffstat (limited to 'cloud/app/src/routes')
| -rw-r--r-- | cloud/app/src/routes/zen/v1/chat/completions.ts | 28 | ||||
| -rw-r--r-- | cloud/app/src/routes/zen/v1/messages.ts | 6 | ||||
| -rw-r--r-- | cloud/app/src/routes/zen/v1/responses.ts | 26 |
3 files changed, 45 insertions, 15 deletions
diff --git a/cloud/app/src/routes/zen/v1/chat/completions.ts b/cloud/app/src/routes/zen/v1/chat/completions.ts index dc69bb514..13a75a4a4 100644 --- a/cloud/app/src/routes/zen/v1/chat/completions.ts +++ b/cloud/app/src/routes/zen/v1/chat/completions.ts @@ -1,8 +1,26 @@ import type { APIEvent } from "@solidjs/start/server" import { handler } from "~/util/zen" +type Usage = { + prompt_tokens?: number + completion_tokens?: number + total_tokens?: number + prompt_tokens_details?: { + text_tokens?: number + audio_tokens?: number + image_tokens?: number + cached_tokens?: number + } + completion_tokens_details?: { + reasoning_tokens?: number + audio_tokens?: number + accepted_prediction_tokens?: number + rejected_prediction_tokens?: number + } +} + export function POST(input: APIEvent) { - let usage: any + let usage: Usage return handler(input, { modifyBody: (body: any) => ({ ...body, @@ -17,7 +35,7 @@ export function POST(input: APIEvent) { let json try { - json = JSON.parse(chunk.slice(6)) + json = JSON.parse(chunk.slice(6)) as { usage?: Usage } } catch (e) { return } @@ -26,11 +44,11 @@ export function POST(input: APIEvent) { usage = json.usage }, getStreamUsage: () => usage, - normalizeUsage: (usage: any) => ({ + normalizeUsage: (usage: Usage) => ({ inputTokens: usage.prompt_tokens ?? 0, outputTokens: usage.completion_tokens ?? 0, - reasoningTokens: usage.completion_tokens_details?.reasoning_tokens ?? 0, - cacheReadTokens: usage.prompt_tokens_details?.cached_tokens ?? 0, + reasoningTokens: usage.completion_tokens_details?.reasoning_tokens ?? undefined, + cacheReadTokens: usage.prompt_tokens_details?.cached_tokens ?? undefined, }), }) } diff --git a/cloud/app/src/routes/zen/v1/messages.ts b/cloud/app/src/routes/zen/v1/messages.ts index ff399b034..b2e9e275a 100644 --- a/cloud/app/src/routes/zen/v1/messages.ts +++ b/cloud/app/src/routes/zen/v1/messages.ts @@ -53,9 +53,9 @@ export function POST(input: APIEvent) { normalizeUsage: (usage: Usage) => ({ inputTokens: usage.input_tokens ?? 0, outputTokens: usage.output_tokens ?? 0, - cacheReadTokens: usage.cache_read_input_tokens ?? 0, - cacheWrite5mTokens: usage.cache_creation?.ephemeral_5m_input_tokens, - cacheWrite1hTokens: usage.cache_creation?.ephemeral_1h_input_tokens, + cacheReadTokens: usage.cache_read_input_tokens ?? undefined, + cacheWrite5mTokens: usage.cache_creation?.ephemeral_5m_input_tokens ?? undefined, + cacheWrite1hTokens: usage.cache_creation?.ephemeral_1h_input_tokens ?? undefined, }), }) } diff --git a/cloud/app/src/routes/zen/v1/responses.ts b/cloud/app/src/routes/zen/v1/responses.ts index 518a431ab..1bca91f52 100644 --- a/cloud/app/src/routes/zen/v1/responses.ts +++ b/cloud/app/src/routes/zen/v1/responses.ts @@ -1,8 +1,20 @@ import type { APIEvent } from "@solidjs/start/server" import { handler } from "~/util/zen" +type Usage = { + input_tokens?: number + input_tokens_details?: { + cached_tokens?: number + } + output_tokens?: number + output_tokens_details?: { + reasoning_tokens?: number + } + total_tokens?: number +} + export function POST(input: APIEvent) { - let usage: any + let usage: Usage return handler(input, { setAuthHeader: (headers: Headers, apiKey: string) => { headers.set("authorization", `Bearer ${apiKey}`) @@ -15,7 +27,7 @@ export function POST(input: APIEvent) { let json try { - json = JSON.parse(data.slice(6)) + json = JSON.parse(data.slice(6)) as { response?: { usage?: Usage } } } catch (e) { return } @@ -24,14 +36,14 @@ export function POST(input: APIEvent) { usage = json.response.usage }, getStreamUsage: () => usage, - normalizeUsage: (usage: any) => { + normalizeUsage: (usage: Usage) => { const inputTokens = usage.input_tokens ?? 0 const outputTokens = usage.output_tokens ?? 0 - const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? 0 - const cacheReadTokens = usage.input_tokens_details?.cached_tokens ?? 0 + const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? undefined + const cacheReadTokens = usage.input_tokens_details?.cached_tokens ?? undefined return { - inputTokens: inputTokens - cacheReadTokens, - outputTokens: outputTokens - reasoningTokens, + inputTokens: inputTokens - (cacheReadTokens ?? 0), + outputTokens: outputTokens - (reasoningTokens ?? 0), reasoningTokens, cacheReadTokens, } |
