Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit bf51ede

Browse files
committed
cleanup downloaded files right away
1 parent 3ff155d commit bf51ede

File tree

1 file changed

+10
-43
lines changed

1 file changed

+10
-43
lines changed

lib/inference/open_ai_image_generator.rb

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ def self.create_uploads!(
4646
def self.create_edited_upload!(
4747
images,
4848
prompt,
49-
mask: nil,
5049
model: "gpt-image-1",
5150
size: "auto",
5251
api_key: nil,
@@ -60,7 +59,6 @@ def self.create_edited_upload!(
6059
edit_images(
6160
images,
6261
prompt,
63-
mask: mask,
6462
model: model,
6563
size: size,
6664
api_key: api_key,
@@ -168,7 +166,6 @@ def self.generate_images_in_threads(
168166
def self.edit_images(
169167
images,
170168
prompt,
171-
mask: nil,
172169
model: "gpt-image-1",
173170
size: "auto",
174171
api_key: nil,
@@ -196,7 +193,6 @@ def self.edit_images(
196193
perform_edit_api_call!(
197194
images,
198195
prompt,
199-
mask: mask,
200196
model: model,
201197
size: size,
202198
api_key: api_key,
@@ -297,7 +293,6 @@ def self.perform_generation_api_call!(
297293
def self.perform_edit_api_call!(
298294
images,
299295
prompt,
300-
mask: nil,
301296
model: "gpt-image-1",
302297
size: "auto",
303298
api_key:,
@@ -326,6 +321,8 @@ def self.perform_edit_api_call!(
326321

327322
body << "#{model}\r\n"
328323

324+
files_to_delete = []
325+
329326
# Add images
330327
images.each do |image|
331328
image_data = nil
@@ -337,7 +334,10 @@ def self.perform_edit_api_call!(
337334
if image.local?
338335
Discourse.store.path_for(image)
339336
else
340-
Discourse.store.download_safe(image, max_file_size_kb: MAX_IMAGE_SIZE)&.path
337+
filename =
338+
Discourse.store.download_safe(image, max_file_size_kb: MAX_IMAGE_SIZE)&.path
339+
files_to_delete << filename if filename
340+
filename
341341
end
342342
image_data = File.read(image_path)
343343
image_filename = File.basename(image.url)
@@ -352,43 +352,6 @@ def self.perform_edit_api_call!(
352352
body << "\r\n"
353353
end
354354

355-
# Add mask if provided
356-
if mask
357-
mask_data = nil
358-
mask_filename = nil
359-
360-
# Handle different mask input types (similar to images)
361-
if mask.is_a?(Upload)
362-
mask_data = File.read(Discourse.store.path_for(mask))
363-
mask_filename = File.basename(mask.url)
364-
elsif mask.is_a?(File) || mask.is_a?(Tempfile)
365-
mask_data = File.read(mask.path)
366-
mask_filename = File.basename(mask.path)
367-
elsif mask.is_a?(String) && File.exist?(mask)
368-
mask_data = File.read(mask)
369-
mask_filename = File.basename(mask)
370-
elsif mask.is_a?(String) && mask.start_with?("http")
371-
# Download mask from URL
372-
mask_temp =
373-
FileHelper.download(
374-
mask,
375-
max_file_size: 4.megabytes,
376-
tmp_file_name: "edit_mask_download",
377-
follow_redirect: true,
378-
)
379-
mask_data = File.read(mask_temp)
380-
mask_filename = File.basename(mask)
381-
else
382-
raise "Unsupported mask format. Must be Upload, File, path string, or URL."
383-
end
384-
385-
body << "--#{boundary}\r\n"
386-
body << "Content-Disposition: form-data; name=\"mask\"; filename=\"#{mask_filename}\"\r\n"
387-
body << "Content-Type: image/png\r\n\r\n"
388-
body << mask_data
389-
body << "\r\n"
390-
end
391-
392355
# Add prompt
393356
body << "--#{boundary}\r\n"
394357
body << "Content-Disposition: form-data; name=\"prompt\"\r\n\r\n"
@@ -452,6 +415,10 @@ def self.perform_edit_api_call!(
452415
end
453416
json
454417
end
418+
ensure
419+
if files_to_delete.present?
420+
files_to_delete.each { |file| File.delete(file) if File.exist?(file) }
421+
end
455422
end
456423
end
457424
end

0 commit comments

Comments
 (0)