Skip to content

Commit 648ddbe

Browse files
author
Martin Moron
committed
Fix Maintain Unchanged Hash Parameter in Method json_post
1 parent 181ffa5 commit 648ddbe

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

lib/openai/http.rb

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,7 @@ def get(path:)
1010

1111
def json_post(path:, parameters:)
1212
to_json(conn.post(uri(path: path)) do |req|
13-
if parameters[:stream].respond_to?(:call)
14-
req.options.on_data = to_json_stream(user_proc: parameters[:stream])
15-
parameters[:stream] = true # Necessary to tell OpenAI to stream.
16-
elsif parameters[:stream]
17-
raise ArgumentError, "The stream parameter must be a Proc or have a #call method"
18-
end
19-
20-
req.headers = headers
21-
req.body = parameters.to_json
13+
configure_json_post_request(req, parameters)
2214
end&.body)
2315
end
2416

@@ -123,5 +115,19 @@ def multipart_parameters(parameters)
123115
Faraday::UploadIO.new(value, "", value.path)
124116
end
125117
end
118+
119+
def configure_json_post_request(req, parameters)
120+
req_parameters = parameters.dup
121+
122+
if parameters[:stream].respond_to?(:call)
123+
req.options.on_data = to_json_stream(user_proc: parameters[:stream])
124+
req_parameters[:stream] = true # Necessary to tell OpenAI to stream.
125+
elsif parameters[:stream]
126+
raise ArgumentError, "The stream parameter must be a Proc or have a #call method"
127+
end
128+
129+
req.headers = headers
130+
req.body = req_parameters.to_json
131+
end
126132
end
127133
end

spec/openai/client/http_spec.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@
3131

3232
describe ".json_post" do
3333
let(:response) do
34-
OpenAI::Client.new.chat(
35-
parameters: {
36-
model: "gpt-3.5-turbo",
37-
messages: [{ role: "user", content: "Hello!" }],
38-
stream: stream
39-
}
40-
)
34+
OpenAI::Client.new.chat(parameters: parameters)
35+
end
36+
37+
let(:parameters) do
38+
{
39+
model: "gpt-3.5-turbo",
40+
messages: [{ role: "user", content: "Hello!" }],
41+
stream: stream
42+
}
4143
end
4244

4345
context "not streaming" do
@@ -63,6 +65,12 @@
6365
expect(timeout_errors).to include(error.class)
6466
end
6567
end
68+
69+
it "doesn't change the parameters stream proc" do
70+
expect { response }.to raise_error(Faraday::ConnectionFailed)
71+
72+
expect(parameters[:stream]).to eq(stream)
73+
end
6674
end
6775
end
6876

0 commit comments

Comments
 (0)