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