From 6a37adaee05c89941a11f937d1bf7bd5ed1e24e9 Mon Sep 17 00:00:00 2001 From: cpf Date: Sat, 23 Aug 2025 20:59:16 +0800 Subject: [PATCH 1/2] feat: update usage structure in message events and chat completion types --- src/routes/messages/anthropic-types.ts | 5 ++++- src/routes/messages/stream-translation.ts | 7 ++++--- src/services/copilot/create-chat-completions.ts | 8 ++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/routes/messages/anthropic-types.ts b/src/routes/messages/anthropic-types.ts index 31c6e86e..7abf70bd 100644 --- a/src/routes/messages/anthropic-types.ts +++ b/src/routes/messages/anthropic-types.ts @@ -157,7 +157,10 @@ export interface AnthropicMessageDeltaEvent { stop_reason?: AnthropicResponse["stop_reason"] stop_sequence?: string | null } - usage?: { output_tokens: number } + usage?: { + input_tokens?: number + output_tokens: number + } } export interface AnthropicMessageStopEvent { diff --git a/src/routes/messages/stream-translation.ts b/src/routes/messages/stream-translation.ts index 55af6cbd..5536e060 100644 --- a/src/routes/messages/stream-translation.ts +++ b/src/routes/messages/stream-translation.ts @@ -42,8 +42,8 @@ export function translateChunkToAnthropicEvents( stop_reason: null, stop_sequence: null, usage: { - input_tokens: 1, - output_tokens: 1, // Anthropic requires this to be > 0 + input_tokens: chunk.usage?.prompt_tokens ?? 0, + output_tokens: 0, // Will be updated in message_delta when finished }, }, }) @@ -152,7 +152,8 @@ export function translateChunkToAnthropicEvents( stop_sequence: null, }, usage: { - output_tokens: 1, + input_tokens: chunk.usage?.prompt_tokens ?? 0, + output_tokens: chunk.usage?.completion_tokens ?? 0, }, }, { diff --git a/src/services/copilot/create-chat-completions.ts b/src/services/copilot/create-chat-completions.ts index 1f76cca0..fe18a893 100644 --- a/src/services/copilot/create-chat-completions.ts +++ b/src/services/copilot/create-chat-completions.ts @@ -55,6 +55,14 @@ export interface ChatCompletionChunk { model: string choices: Array system_fingerprint?: string + usage?: { + prompt_tokens: number + completion_tokens: number + total_tokens: number + prompt_tokens_details?: { + cached_tokens: number + } + } } interface Delta { From 1b8c9d427112078cb12cdb32053a4795dcc1af93 Mon Sep 17 00:00:00 2001 From: cpf Date: Sat, 23 Aug 2025 21:15:02 +0800 Subject: [PATCH 2/2] feat: add cache token details to usage and completion token structures --- src/routes/messages/anthropic-types.ts | 2 ++ src/routes/messages/stream-translation.ts | 5 +++++ src/services/copilot/create-chat-completions.ts | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/src/routes/messages/anthropic-types.ts b/src/routes/messages/anthropic-types.ts index 7abf70bd..881fffcc 100644 --- a/src/routes/messages/anthropic-types.ts +++ b/src/routes/messages/anthropic-types.ts @@ -160,6 +160,8 @@ export interface AnthropicMessageDeltaEvent { usage?: { input_tokens?: number output_tokens: number + cache_creation_input_tokens?: number + cache_read_input_tokens?: number } } diff --git a/src/routes/messages/stream-translation.ts b/src/routes/messages/stream-translation.ts index 5536e060..c8c20a07 100644 --- a/src/routes/messages/stream-translation.ts +++ b/src/routes/messages/stream-translation.ts @@ -154,6 +154,11 @@ export function translateChunkToAnthropicEvents( usage: { input_tokens: chunk.usage?.prompt_tokens ?? 0, output_tokens: chunk.usage?.completion_tokens ?? 0, + ...(chunk.usage?.prompt_tokens_details?.cached_tokens + !== undefined && { + cache_read_input_tokens: + chunk.usage.prompt_tokens_details.cached_tokens, + }), }, }, { diff --git a/src/services/copilot/create-chat-completions.ts b/src/services/copilot/create-chat-completions.ts index fe18a893..5d38bb45 100644 --- a/src/services/copilot/create-chat-completions.ts +++ b/src/services/copilot/create-chat-completions.ts @@ -62,6 +62,10 @@ export interface ChatCompletionChunk { prompt_tokens_details?: { cached_tokens: number } + completion_tokens_details?: { + accepted_prediction_tokens: number + rejected_prediction_tokens: number + } } }