Skip to content

feat(gateway): P3-B streaming SSE cross-protocol conversion (v0.5.0) - #85

Merged
argszero merged 1 commit into
mainfrom
feat/p3b-stream-convert
Aug 18, 2026
Merged

argszero merged 1 commit into
mainfrom
feat/p3b-stream-convert

Conversation

@argszero

Copy link
Copy Markdown
Owner

Summary

Streaming SSE cross-protocol conversion: stream:true requests can now forward to any upstream protocol (previously cross-protocol streaming → 400).

  • src/sse.rs (new): ported openai_sse_to_anthropic + openai_sse_to_openai_responses from openlocalrouter streaming.rs (buffered block parsing, tool-call/thinking deltas, usage extraction), plus new converters:
    • anthropic_sse_to_openai: content_block_delta text → choices delta, tool_use/input_json_delta → tool_calls delta, message_delta usage+stop → finish_reason + [DONE]
    • anthropic_sse_to_responses: via openai chat intermediate state
    • responses_sse_to_openai_chat: output_text.delta / function_call_arguments.delta → choices
  • forward_stream: per-key resolve_outbound; cross-protocol request body transformed (P3-A transform_request); response SSE stream converted by (upstream, client) protocol pair; usage extracted in-stream via UsageSlot → settle_usage
  • responses → anthropic streaming deferred (clear 400)
  • Version bump 0.4.1 → 0.5.0; README endpoint/status docs updated

Related

  • Rant 2026-08-18T18:59:29: P3-B 流式 SSE 协议转换(宿主指示继续,P3-A 已完成)

Tests

  • cargo test → 102/102 (+7 sse converter tests, +1 gateway e2e conversion with settlement)
  • cargo fmt --check clean, cargo clippy --all-targets -D warnings clean
  • Live smoke (temp DB + mock openai SSE upstream): anthropic client → request converted to openai, response SSE converted to content_block_delta events, usage (100/50) recorded, [DONE] termination

Streaming SSE events interconversion between openai_chat / anthropic /
responses protocols, so stream:true requests can forward to any upstream
protocol (previously cross-protocol streaming -> 400):

- src/sse.rs (new): ported openai_sse_to_anthropic + openai_sse_to_openai_responses
  from openlocalrouter streaming.rs (buffered parsing, tool/thinking/usage),
  plus new anthropic_sse_to_openai (text/tool deltas -> choices, [DONE]),
  anthropic_sse_to_responses (via openai intermediate), responses_sse_to_openai_chat
  (output_text.delta / function_call_arguments.delta -> choices)
- forward_stream: picks outbound per key (resolve_outbound), transforms request
  body cross-protocol, converts response SSE stream by (upstream, client)
  protocol pair; usage extracted in-stream via UsageSlot -> settle_usage
- responses -> anthropic streaming deferred (clear 400)
- tests 94 -> 102 (+7 sse converter tests, +1 gateway e2e conversion w/ settlement)
- live smoke: anthropic client -> openai upstream SSE round-trip verified

Closes rant 2026-08-18T18:59:29 (P3-B streaming SSE protocol conversion).
@argszero
argszero merged commit 6095ef0 into main Aug 18, 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