fix(AnthropicProvider): update usage and metrics handling to prevent TypeError (#6813)

This commit is contained in:
SuYao 2025-06-05 09:33:40 +08:00 committed by GitHub
parent a17e2ca4de
commit ff2b7e0474

View File

@ -445,6 +445,14 @@ export default class AnthropicProvider extends BaseProvider {
) )
} }
if (thinking_content) {
onChunk({
type: ChunkType.THINKING_COMPLETE,
text: thinking_content,
thinking_millsec: new Date().getTime() - time_first_token_millsec
})
}
userMessages.push({ userMessages.push({
role: message.role, role: message.role,
content: message.content content: message.content
@ -464,18 +472,31 @@ export default class AnthropicProvider extends BaseProvider {
} }
} }
finalUsage.prompt_tokens += message.usage?.input_tokens || 0 // 直接修改finalUsage对象会报错TypeError: Cannot assign to read only property 'prompt_tokens' of object '#<Object>'
finalUsage.completion_tokens += message.usage?.output_tokens || 0 // 暂未找到原因
finalUsage.total_tokens += finalUsage.prompt_tokens + finalUsage.completion_tokens const updatedUsage: Usage = {
finalMetrics.completion_tokens = finalUsage.completion_tokens ...finalUsage,
finalMetrics.time_completion_millsec += new Date().getTime() - start_time_millsec prompt_tokens: finalUsage.prompt_tokens + (message.usage?.input_tokens || 0),
finalMetrics.time_first_token_millsec = time_first_token_millsec - start_time_millsec completion_tokens: finalUsage.completion_tokens + (message.usage?.output_tokens || 0)
}
updatedUsage.total_tokens = updatedUsage.prompt_tokens + updatedUsage.completion_tokens
const updatedMetrics: Metrics = {
...finalMetrics,
completion_tokens: updatedUsage.completion_tokens,
time_completion_millsec:
finalMetrics.time_completion_millsec + (new Date().getTime() - start_time_millsec),
time_first_token_millsec: time_first_token_millsec - start_time_millsec
}
Object.assign(finalUsage, updatedUsage)
Object.assign(finalMetrics, updatedMetrics)
onChunk({ onChunk({
type: ChunkType.BLOCK_COMPLETE, type: ChunkType.BLOCK_COMPLETE,
response: { response: {
usage: finalUsage, usage: updatedUsage,
metrics: finalMetrics metrics: updatedMetrics
} }
}) })
resolve() resolve()
@ -488,7 +509,9 @@ export default class AnthropicProvider extends BaseProvider {
} }
onChunk({ type: ChunkType.LLM_RESPONSE_CREATED }) onChunk({ type: ChunkType.LLM_RESPONSE_CREATED })
const start_time_millsec = new Date().getTime() const start_time_millsec = new Date().getTime()
await processStream(body, 0).finally(cleanup) await processStream(body, 0).finally(() => {
cleanup()
})
} }
/** /**