Skip to content

支持流式 Chat Completions 输出 usage chunk#21

Merged
zqbxdev merged 1 commit into
zqbxdev:devfrom
Zker67:fix-chat-stream-usage-dev
May 25, 2026
Merged

支持流式 Chat Completions 输出 usage chunk#21
zqbxdev merged 1 commit into
zqbxdev:devfrom
Zker67:fix-chat-stream-usage-dev

Conversation

@Zker67
Copy link
Copy Markdown
Contributor

@Zker67 Zker67 commented May 25, 2026

改动

  • 支持 stream_options.include_usage=true 的 Chat Completions 流式 usage 输出。
  • 普通文本、Grok Console、Grok app-chat 流式路径结束前都会额外发送 choices: [] 且包含 usage 的 chunk。
  • 普通内容 chunk 在开启该选项时补充 usage: null
  • 复用现有 token 计数函数,统计 prompt_tokenscompletion_tokenstotal_tokens
  • 增加三条回归测试,覆盖普通文本、Grok Console 和 Grok app-chat 流式路径。

验证

  • python -m py_compile services/protocol/openai_v1_chat_complete.py test/test_grok_provider.py
  • python -m unittest test.test_grok_provider.GrokProviderTests.test_streaming_grok_chat_completion_returns_openai_chunks test.test_grok_provider.GrokProviderTests.test_streaming_grok_console_completion_emits_reasoning_content test.test_grok_provider.GrokProviderTests.test_streaming_grok_console_completion_includes_usage_when_requested test.test_grok_provider.GrokProviderTests.test_streaming_grok_app_chat_completion_emits_reasoning_content test.test_grok_provider.GrokProviderTests.test_streaming_grok_app_chat_completion_includes_usage_when_requested test.test_grok_provider.GrokProviderTests.test_streaming_text_completion_includes_usage_when_requested

关联 #19

Copy link
Copy Markdown

@ghost ghost left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI PR Review

Decision: comment
Confidence: 0.86

Summary

整体实现与 PR 描述一致:为流式 Chat Completions 增加了 stream_options.include_usage=true 时的 usage 输出,并覆盖了文本、Grok Console、Grok app-chat 三条流式路径;测试也验证了 usage: null 普通 chunk、choices: [] 最终 usage chunk 以及 token 统计聚合逻辑。未发现明确阻塞性问题。

Findings

No specific findings were returned.

Recent Comment Summary

实现方向正确、测试覆盖到位,当前未发现需要阻塞的缺陷。建议后续可补充一个“messages 为空时 completion/reasoning token 是否应继续统计”的行为说明或测试,以明确边界语义。

@Zker67
Copy link
Copy Markdown
Contributor Author

Zker67 commented May 25, 2026

补充说明:本 PR 已指向 devreview 检查通过;当前 enforce 失败来自上游目标分支检查 workflow 对 fork PR 删除标签时权限不足,已单独提交 issue #22

@zqbxdev zqbxdev merged commit 9ea6a2d into zqbxdev:dev May 25, 2026
2 of 4 checks passed
@zqbxdev
Copy link
Copy Markdown
Owner

zqbxdev commented May 25, 2026

感谢贡献,PR #21 已完成审查并 merge 到 dev。

合并信息:

合并前处理:

  • PR 与当前 dev 存在冲突,原因是 dev 已改为 Grok Console 真实 SSE streaming 路径。
  • 冲突解决时保留当前 Console streaming 架构,只把 stream_options.include_usage=true 的 usage chunk 逻辑集成进去。
  • 对应测试也改为 mock console_chat_completion_events,避免回退到旧的 blocking Console completion 路径。

验证结果:

  • focused PR streaming tests: Ran 6 tests ... OK
  • full Grok provider tests: Ran 74 tests ... OK
  • adjacent Responses + Grok tests: Ran 80 tests ... OK (skipped=6)
  • compileall for changed Python files: passed
  • whitespace check: passed
  • Docker build: passed, image webchat2api:pr21-merged (sha256:a16bdb23b9707feb6708402b0f3de7408a5fbe0b8a5ab6a90aaf502d25d12fd6)
  • Docker smoke: /health 返回 {"status":"ok"}/version 返回 {"version":"0.0.7"}

安全与兼容性审查未发现新增依赖、脚本、CI/Docker 变更、敏感信息泄露或可疑外联/执行逻辑。PR 页面上旧的 enforce failure 仍是此前 fork PR label cleanup 权限问题,不是本次合并后的代码阻断。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants