feat: add SSE/chunked streaming to call_runner#25
Conversation
Add open_stream() for unbuffered streaming HTTP responses, and a LiveRunnerCallStream handle returned by call_runner(..., stream=True). The stream owns its aiohttp session/response, works as an async context manager (aclose for cleanup), and exposes the body via aiter_bytes / aiter_lines plus status/headers/content_type. Payment reuses the existing 402 challenge/retry path: open_stream raises LivepeerHTTPError on >= 400 before any body, so the streaming and non-streaming branches share the same per-call payment handling. Export LiveRunnerCallStream from the package root. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This to support SSE with single shot selection requests, right? SSE should already be supported out of the box with reserved sessions. Also I suppose it won't do much for payments until we get single-shot payments figured out, but the selection support is good to have. Curious, how does this compose with existing SSE clients / libraries? Is there an example of how to use this? Small naming suggestion, maybe name the param |
@j0sh thanks for the review. Agreed, go-livepeer already has full SSE support. This PR is only about the To see this in action, set the gateway SDK branch to On naming: I kept
Also it matches the |
What
Adds streaming support to
call_runnerfor SSE / chunked responses, on top of the live-runner work in #20.http.open_stream()— opens an HTTP request and hands back the live(session, response)without reading the body, for streaming responses. Caller owns both. No total timeout (streams run indefinitely); only connect/first-byte are bounded. RaisesLivepeerHTTPErroron>= 400.LiveRunnerCallStream— returned bycall_runner(..., stream=True). Owns the aiohttp session/response, is an async context manager (or callaclose()), and exposes the body viaaiter_bytes()/aiter_lines()plusstatus/headers/content_type/runner.open_streamraises before any body, so the payment retry catches it exactly like the non-streaming path.LiveRunnerCallStreamfrom the package root.Notes