Fix ArgumentError
in Stream#call
with faraday-net_http
2.1.0
#618
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #617
All Submissions:
Problem
After upgrading from ruby-openai 8.1 to 8.2, users encountered an
ArgumentError
when using streaming with Faraday 2.1.0:ArgumentError: wrong number of arguments (given 2, expected 3)
The error occurs because Faraday 2.1.0 calls the
on_data
callback with only 2 arguments (chunk
,size
), but the newStream#call
method expects 3 arguments (chunk
,_bytes
,env
).Root Cause
In version 8.2.0, streaming functionality was refactored from an inline Proc in
HTTP#to_json_stream
to a dedicatedStream
class (PR #589). This introduced a breaking change:Before 8.2.0 (worked fine):
proc do |chunk, _bytes, env|
nil
After 8.2.0 (breaks):
def call(chunk, _bytes, env)
ArgumentError
Faraday's Behavior
In
faraday-net_http
v2.1.0, the callback is invoked with only 2 parameters:Solution
Make the env parameter optional with a default value of nil:
def call(chunk, _bytes, env = nil)
This maintains backward compatibility with different Faraday versions while preserving the same functionality.