mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-06 21:35:52 +08:00
fix(AnthropicProvider): update usage and metrics handling to prevent TypeError (#6813)
This commit is contained in:
parent
a17e2ca4de
commit
ff2b7e0474
@ -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()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user