Skip to content

Commit c584ba3

Browse files
committed
Add multi-image upload
1 parent 0415dcd commit c584ba3

File tree

3 files changed

+121
-3
lines changed

3 files changed

+121
-3
lines changed

lib/openai/images.rb

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,23 @@ def variations(parameters: {})
1919
private
2020

2121
def open_files(parameters)
22-
parameters = parameters.merge(image: File.open(parameters[:image]))
23-
parameters = parameters.merge(mask: File.open(parameters[:mask])) if parameters[:mask]
24-
parameters
22+
params = parameters.dup
23+
24+
if params[:image].is_a?(Array)
25+
# Create indexed image parameters (image[0], image[1], etc.)
26+
image_array = params[:image]
27+
params.delete(:image)
28+
29+
image_array.each_with_index do |img_path, index|
30+
params[:"image[#{index}]"] = File.open(img_path)
31+
end
32+
else
33+
params[:image] = File.open(params[:image])
34+
end
35+
36+
params[:mask] = File.open(params[:mask]) if params[:mask]
37+
38+
params
2539
end
2640
end
2741
end

spec/fixtures/cassettes/images_edit_multiple.yml

Lines changed: 83 additions & 0 deletions
Large diffs are not rendered by default.

spec/openai/client/images_spec.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,5 +123,26 @@
123123
end
124124
end
125125
end
126+
127+
describe "with multiple images", :vcr do
128+
let(:response) do
129+
OpenAI::Client.new.images.edit(
130+
parameters: {
131+
image: [
132+
File.join(RSPEC_ROOT, "fixtures/files", "image.png"),
133+
File.join(RSPEC_ROOT, "fixtures/files", "mask.png")
134+
],
135+
prompt: "Create a collage from these images",
136+
model: "gpt-image-1" # Required for multiple images
137+
}
138+
)
139+
end
140+
141+
it "converts array of images to image[] parameter" do
142+
VCR.use_cassette("images edit multiple") do
143+
expect(response.dig("data",0, "b64_json")).to be_a(String)
144+
end
145+
end
146+
end
126147
end
127148
end

0 commit comments

Comments
 (0)