Skip to content

feat: v1.6 SSE 逐块流式(LIMITATIONS #1 部分闭环:chat 客户端 ← anthropic 上游) - #12

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

H2Rhan merged 1 commit into
masterfrom
feat/sse-streaming

Conversation

@H2Rhan

@H2Rhan H2Rhan commented Sep 9, 2026

Copy link
Copy Markdown
Owner

目的

闭环 LIMITATIONS #1 中最常用的一条方向:openai_chat 客户端 stream:true → anthropic 上游。此前该方向经网关要么 502(上游返回 SSE,post_json 按 JSON 解析必炸),要么只能非流式绕行——首 token 延迟(TTFB)是协议转换层最直观的体验指标。

方案

  • 新增 src/gateway/sse.py:
    • parse_sse_lines:行流分帧(空行边界、注释/心跳行跳过、尾部半帧容错丢弃),urllib 响应对象直接喂入——实测 urllib 按行增量吐数据,无需引入第三方 SSE 库,保持零依赖
    • AnthropicToChatStream:事件 → Chat completion.chunk。text_delta 即时下发(TTFB 与直连一致);input_json_delta 是非完整 JSON 片段,按既定折损缓冲到 content_block_stop 一次性发(LIMITATIONS 早已声明);usage 在 message_start / message_delta 分次到达,流尾合并后照常进 5 项埋点;synthetic_response() 拼出 Anthropic 非流式形状,复用 assistant_from_upstream——流式与非流式的落库/埋点走同一条代码路径,不另造语义
  • 网关:抽 _backend_headers / _backend_opener / open_stream;do_POST 尾部逻辑收敛为 finalize_turn()(两条传输路径共用);流式请求同样占 _GATE 并发名额;客户端中途断开仍完成流尾落库(费用已实际发生)
  • mock:Anthropic 路径发完整官方事件序列(message_start 带 usage + 缓存字段 → content_block_* → message_delta → message_stop)

测试(53 单测 + 18 冒烟全过)

  • TestSseConversion 7 项:分帧容错 / text 即时下发 / 工具参数缓冲 / stop_reason 映射(end_turn→stop、max_tokens→length、tool_use→tool_calls)/ usage 合并 + 落库复用 / 上游错误帧
  • 冒烟第 6 组 7 项:多帧到达、role 首帧、delta 拼合完整、finish 帧、[DONE] 收尾、实测首尾帧间隔 30.7ms(证明逐块到达而非整读补吐)、流式轮照常进埋点

范围声明(诚实边界)

仍为整读透传的方向:chat←chat、response 源、anthropic 客户端;流式轮的 dropped 清单对客户端不可见(SSE 帧无其位置,埋点中 degradation 仍如实记录)——均已写入 LIMITATIONS #1。

- 新增 src/gateway/sse.py:Anthropic 事件逐块翻 Chat chunk 即时下发;工具参数按既定折损缓冲到 content_block_stop;usage 流尾合并照常进 5 项埋点;synthetic_response() 复用 assistant_from_upstream(流式与非流式落库同一路径)
- 网关:open_stream 行级增量读取(urllib 行迭代实测可行,保持零依赖);do_POST 尾部收敛为 finalize_turn() 共用;流式占 _GATE 并发名额
- mock:Anthropic 路径发完整官方事件序列(含 usage/缓存字段)
- 测试:TestSseConversion 7 项单测 + 冒烟第 6 组 7 项(实测首尾帧间隔 30.7ms,证明逐块到达非整读补吐);53 单测 + 18 冒烟全过
- 文档:LIMITATIONS #1 标部分闭环(未闭环方向与 dropped 可见性写明);README/REVIEW/capability-matrix/CHANGELOG 同步
@H2Rhan
H2Rhan merged commit 9891b3c into master Sep 9, 2026
1 check passed
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