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

Commit b2794c9

Browse files
committed
FIX: also handle error for edit_image
1 parent d2caf0f commit b2794c9

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed

lib/inference/open_ai_image_generator.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,16 @@ def self.edit_images(
213213
)
214214
rescue => e
215215
attempts += 1
216-
sleep 2
217-
retry if attempts < 3
218-
if Rails.env.development? || Rails.env.test?
216+
if !Rails.env.test?
217+
sleep 2
218+
retry if attempts < 3
219+
end
220+
if Rails.env.development?
219221
puts "Error editing image(s) with prompt: #{prompt} #{e}"
220222
p e
221223
end
222224
Discourse.warn_exception(e, message: "Failed to edit image(s) with prompt #{prompt}")
223-
nil
225+
raise e
224226
end
225227
end
226228

lib/personas/tools/edit_image.rb

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def prompt
3737
end
3838

3939
def chain_next_response?
40-
false
40+
!!@error
4141
end
4242

4343
def image_urls
@@ -50,19 +50,24 @@ def invoke
5050
return { prompt: prompt, error: "No valid images provided" } if image_urls.blank?
5151

5252
sha1s = image_urls.map { |url| Upload.sha1_from_short_url(url) }.compact
53-
5453
uploads = Upload.where(sha1: sha1s).order(created_at: :asc).limit(10).to_a
5554

5655
return { prompt: prompt, error: "No valid images provided" } if uploads.blank?
5756

58-
result =
59-
DiscourseAi::Inference::OpenAiImageGenerator.create_edited_upload!(
60-
uploads,
61-
prompt,
62-
user_id: bot_user.id,
63-
)
57+
begin
58+
result =
59+
DiscourseAi::Inference::OpenAiImageGenerator.create_edited_upload!(
60+
uploads,
61+
prompt,
62+
user_id: bot_user.id,
63+
)
64+
rescue => e
65+
@error = e
66+
return { prompt: prompt, error: e.message }
67+
end
6468

6569
if result.blank?
70+
@error = true
6671
return { prompt: prompt, error: "Something went wrong, could not generate image" }
6772
end
6873

spec/lib/personas/tools/edit_image_spec.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,27 @@
3535
end
3636

3737
describe "#process" do
38+
it "can reject generation of images and return a proper error to llm" do
39+
error_message = {
40+
error: {
41+
message:
42+
"Your request was rejected as a result of our safety system. Your request may contain content that is not allowed by our safety system.",
43+
type: "user_error",
44+
param: nil,
45+
code: "moderation_blocked",
46+
},
47+
}
48+
49+
WebMock.stub_request(:post, "https://api.openai.com/v1/images/edits").to_return(
50+
status: 400,
51+
body: error_message.to_json,
52+
)
53+
54+
info = edit_image.invoke(&progress_blk).to_json
55+
expect(info).to include("Your request was rejected as a result of our safety system.")
56+
expect(edit_image.chain_next_response?).to eq(true)
57+
end
58+
3859
it "can edit an image with the GPT image model" do
3960
data = [{ b64_json: base64_image, revised_prompt: "image with rainbow added in background" }]
4061

0 commit comments

Comments
 (0)