diff --git a/src/routes/messages/anthropic-types.ts b/src/routes/messages/anthropic-types.ts index 31c6e86e2..881fffcc8 100644 --- a/src/routes/messages/anthropic-types.ts +++ b/src/routes/messages/anthropic-types.ts @@ -157,7 +157,12 @@ export interface AnthropicMessageDeltaEvent { stop_reason?: AnthropicResponse["stop_reason"] stop_sequence?: string | null } - usage?: { output_tokens: number } + usage?: { + input_tokens?: number + output_tokens: number + cache_creation_input_tokens?: number + cache_read_input_tokens?: number + } } export interface AnthropicMessageStopEvent { diff --git a/src/routes/messages/stream-translation.ts b/src/routes/messages/stream-translation.ts index 55af6cbde..c8c20a07f 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,13 @@ export function translateChunkToAnthropicEvents( stop_sequence: null, }, usage: { - output_tokens: 1, + 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 1f76cca01..5d38bb452 100644 --- a/src/services/copilot/create-chat-completions.ts +++ b/src/services/copilot/create-chat-completions.ts @@ -55,6 +55,18 @@ 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 + } + completion_tokens_details?: { + accepted_prediction_tokens: number + rejected_prediction_tokens: number + } + } } interface Delta {