Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
cadca752
Commit
cadca752
authored
Jan 28, 2026
by
shaw
Browse files
修复SSE流式响应中usage数据被覆盖的问题
parent
edf215e6
Changes
1
Hide whitespace changes
Inline
Side-by-side
backend/internal/service/gateway_service.go
View file @
cadca752
...
...
@@ -3372,12 +3372,21 @@ func (s *GatewayService) parseSSEUsage(data string, usage *ClaudeUsage) {
}
`json:"usage"`
}
if
json
.
Unmarshal
([]
byte
(
data
),
&
msgDelta
)
==
nil
&&
msgDelta
.
Type
==
"message_delta"
{
// message_delta 是推理结束后的最终统计,应完全覆盖 message_start 的数据
// 这对于 Claude API 和 GLM 等兼容 API 都是正确的行为
usage
.
InputTokens
=
msgDelta
.
Usage
.
InputTokens
usage
.
OutputTokens
=
msgDelta
.
Usage
.
OutputTokens
usage
.
CacheCreationInputTokens
=
msgDelta
.
Usage
.
CacheCreationInputTokens
usage
.
CacheReadInputTokens
=
msgDelta
.
Usage
.
CacheReadInputTokens
// message_delta 仅覆盖存在且非0的字段
// 避免覆盖 message_start 中已有的值(如 input_tokens)
// Claude API 的 message_delta 通常只包含 output_tokens
if
msgDelta
.
Usage
.
InputTokens
>
0
{
usage
.
InputTokens
=
msgDelta
.
Usage
.
InputTokens
}
if
msgDelta
.
Usage
.
OutputTokens
>
0
{
usage
.
OutputTokens
=
msgDelta
.
Usage
.
OutputTokens
}
if
msgDelta
.
Usage
.
CacheCreationInputTokens
>
0
{
usage
.
CacheCreationInputTokens
=
msgDelta
.
Usage
.
CacheCreationInputTokens
}
if
msgDelta
.
Usage
.
CacheReadInputTokens
>
0
{
usage
.
CacheReadInputTokens
=
msgDelta
.
Usage
.
CacheReadInputTokens
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment