diff --git a/app/controllers/discourse_ai/ai_helper/assistant_controller.rb b/app/controllers/discourse_ai/ai_helper/assistant_controller.rb index d8cb3074..684f6ee0 100644 --- a/app/controllers/discourse_ai/ai_helper/assistant_controller.rb +++ b/app/controllers/discourse_ai/ai_helper/assistant_controller.rb @@ -109,11 +109,16 @@ module DiscourseAi image_url = params[:image_url] raise Discourse::InvalidParameters.new(:image_url) if !image_url - image = Upload.where(url: params[:image_url]) + image = Upload.find_by(sha1: Upload.sha1_from_long_url(image_url)) + + if image&.secure? + url = Upload.signed_url_from_secure_uploads_url(image_url) + else + url = UrlHelper.absolute(image_url) + end hijack do - caption = - DiscourseAi::AiHelper::Assistant.new.generate_image_caption(image_url, current_user) + caption = DiscourseAi::AiHelper::Assistant.new.generate_image_caption(url, current_user) render json: { caption: caption }, status: 200 end rescue DiscourseAi::Completions::Endpoints::Base::CompletionFailed, Net::HTTPBadResponse diff --git a/assets/javascripts/initializers/ai-image-caption.js b/assets/javascripts/initializers/ai-image-caption.js index a99884c3..15577471 100644 --- a/assets/javascripts/initializers/ai-image-caption.js +++ b/assets/javascripts/initializers/ai-image-caption.js @@ -10,7 +10,11 @@ export default apiInitializer("1.25.0", (api) => { class: "generate-caption", }; const imageCaptionPopup = api.container.lookup("service:imageCaptionPopup"); + const settings = api.container.lookup("service:site-settings"); + if (!settings.ai_helper_enabled_features.includes("image_caption")) { + return; + } api.addComposerImageWrapperButton( buttonAttrs.label, buttonAttrs.class, diff --git a/config/settings.yml b/config/settings.yml index 44e8bf0e..78df0ebd 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -224,6 +224,7 @@ discourse_ai: choices: - "suggestions" - "context_menu" + - "image_caption" ai_helper_image_caption_model: default: "llava" type: enum