Skip to content

feat: v1.7 同协议直通流式 + 未实现流式方向显式 501 - #13

Merged
H2Rhan merged 1 commit into
masterfrom
feat/sse-passthrough
Sep 9, 2026
Merged

H2Rhan merged 1 commit into
masterfrom
feat/sse-passthrough

Conversation

@H2Rhan

@H2Rhan H2Rhan commented Sep 9, 2026

Copy link
Copy Markdown
Owner

目的

PR #12 闭环了 chat←anthropic 的转换流式,但同协议方向(chat←chat、anthropic←anthropic)的 stream:true 请求经网关会直接 502——post_json 把上游 SSE 当 JSON 解析必炸。这不是「未实现的特性」,是一个会被真实用户踩到的隐藏 bug。

方案

  • 直通流式:tee_lines 三通——每行原样写给客户端(字节不动、即时 flush),同时 yield 给旁路收集器
    • anthropic 方向:复用 AnthropicToChatStream 做汇总(产出的 Chat 帧丢弃,只取 usage/文本)
    • chat 方向:新增 ChatStreamCollector(文本/usage 汇总、工具槽位拼接、脏数据容错;Chat 流默认不带 usage,收不到如实记 0,不编造)
    • 落库/埋点仍走 finalize_turn + synthetic_response() 单一路径,不另造语义
  • 未实现的流式方向显式 501(response 源三维寻址、anthropic←chat 等):错误体附已支持方向清单,提示改用 stream:false——替代此前语焉不详的 502 崩溃
  • 客户端中途断开:已收到的部分照常落账(费用已实际发生)

测试(56 单测 + 25 冒烟全过)

  • TestChatStreamCollector 3 项:文本+usage 汇总、工具槽位拼接、脏数据容错
  • 冒烟第 7 组 7 项:两个透传方向文本拼合完整、逐块到达实测 ~31ms、[DONE] 收尾、message_stop、501 显式拒绝

备注

本分支因本机代理对 github.com 的 CONNECT 隧道临时故障,经 GitHub API(git/trees + git/commits + git/refs)推送,内容与前述本地验证完全一致。

- 直通流式(chat←chat / anthropic←anthropic):tee_lines 逐行透传字节不动;旁路收集流尾汇总(anthropic 复用 AnthropicToChatStream,chat 新增 ChatStreamCollector);落库/埋点仍走 finalize_turn 单一路径
- 隐藏 bug 修复:stream:true 落到未实现方向此前被 post_json 当 JSON 解析炸成 502,现显式 501(附已支持方向清单)
- 客户端中途断开:已收部分照常落账
- mock:/chat/completions 发 Chat 形状 chunk(role 首帧 + finish + usage + [DONE])
- 测试:TestChatStreamCollector 3 项单测 + 冒烟第 7 组 7 项(透传文本拼合 / 逐块到达 ~31ms / 501);56 单测 + 25 冒烟全过
- 文档:LIMITATIONS #1 范围更新;README/REVIEW/capability-matrix/CHANGELOG 同步
@H2Rhan
H2Rhan merged commit 46a2527 into master Sep 9, 2026
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.

1 participant