修复: token 汇总正确性(会话级双计/is_estimated跨端/流式usage传递) + is_estimated SELECT 缺失修复
This commit is contained in:
@@ -328,6 +328,11 @@ pub(crate) async fn stream_llm(
|
||||
),
|
||||
};
|
||||
}
|
||||
// 已收到 finish_reason 仅剩等 usage 帧:慢 provider 拖过 idle 窗口不降 Partial,
|
||||
// 按正常完成收尾(usage 缺失用默认 0,文本/tool_calls 已完整)。
|
||||
if finished_received {
|
||||
break;
|
||||
}
|
||||
warn!(
|
||||
provider = %provider.name(),
|
||||
conv_id = %conv_id,
|
||||
@@ -379,6 +384,11 @@ pub(crate) async fn stream_llm(
|
||||
),
|
||||
};
|
||||
}
|
||||
// 已收到 finish_reason 仅剩等 usage 帧:慢/坏 provider 拖过 15s 不降 Partial,
|
||||
// 按正常完成收尾(与 idle_deadline 分支同口径,usage 缺失用默认 0)。
|
||||
if finished_received {
|
||||
break;
|
||||
}
|
||||
warn!(
|
||||
provider = %provider.name(),
|
||||
conv_id = %conv_id,
|
||||
@@ -461,7 +471,14 @@ pub(crate) async fn stream_llm(
|
||||
}
|
||||
if chunk.finished {
|
||||
finished_received = true;
|
||||
break;
|
||||
// usage 携带点:OpenAI 兼容流中 usage 挂在 [DONE] 帧(或 usage-only 帧),
|
||||
// 而 finish_reason 帧(finished=true, usage=None)在其之前到达。
|
||||
// 若此刻 break 会错过 [DONE] 帧的 usage → 真实 completion_tokens 丢失,
|
||||
// 前端 token 显示 0。拿到真实 usage 才停;usage 仍 None 则继续读到
|
||||
// usage-only/[DONE] 帧或通道关闭(Ok(None) 兜底退出,不断连误判)。
|
||||
if chunk.usage.is_some() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(Some(Err(err_str))) => {
|
||||
|
||||
Reference in New Issue
Block a user