diff --git a/app/controllers/discourse_ai/ai_helper/assistant_controller.rb b/app/controllers/discourse_ai/ai_helper/assistant_controller.rb index 9f3a1baa..4558c5d6 100644 --- a/app/controllers/discourse_ai/ai_helper/assistant_controller.rb +++ b/app/controllers/discourse_ai/ai_helper/assistant_controller.rb @@ -25,25 +25,24 @@ module DiscourseAi input = get_text_param! force_default_locale = params[:force_default_locale] || false - prompt = CompletionPrompt.find_by(id: params[:mode]) + raise Discourse::InvalidParameters.new(:mode) if params[:mode].blank? - raise Discourse::InvalidParameters.new(:mode) if !prompt || !prompt.enabled? - - if prompt.id == CompletionPrompt::CUSTOM_PROMPT + if params[:mode] == DiscourseAi::AiHelper::Assistant::CUSTOM_PROMPT raise Discourse::InvalidParameters.new(:custom_prompt) if params[:custom_prompt].blank? - - prompt.custom_instruction = params[:custom_prompt] end - return suggest_thumbnails(input) if prompt.id == CompletionPrompt::ILLUSTRATE_POST + if params[:mode] == DiscourseAi::AiHelper::Assistant::ILLUSTRATE_POST + return suggest_thumbnails(input) + end hijack do render json: DiscourseAi::AiHelper::Assistant.new.generate_and_send_prompt( - prompt, + params[:mode], input, current_user, force_default_locale: force_default_locale, + custom_prompt: params[:custom_prompt], ), status: 200 end @@ -60,13 +59,10 @@ module DiscourseAi input = get_text_param! end - prompt = CompletionPrompt.enabled_by_name("generate_titles") - raise Discourse::InvalidParameters.new(:mode) if !prompt - hijack do render json: DiscourseAi::AiHelper::Assistant.new.generate_and_send_prompt( - prompt, + DiscourseAi::AiHelper::Assistant::GENERATE_TITLES, input, current_user, ), @@ -115,12 +111,12 @@ module DiscourseAi location = params[:location] raise Discourse::InvalidParameters.new(:location) if !location - prompt = CompletionPrompt.find_by(id: params[:mode]) + raise Discourse::InvalidParameters.new(:mode) if params[:mode].blank? + if params[:mode] == DiscourseAi::AiHelper::Assistant::ILLUSTRATE_POST + return suggest_thumbnails(input) + end - raise Discourse::InvalidParameters.new(:mode) if !prompt || !prompt.enabled? - return suggest_thumbnails(input) if prompt.id == CompletionPrompt::ILLUSTRATE_POST - - if prompt.id == CompletionPrompt::CUSTOM_PROMPT + if params[:mode] == DiscourseAi::AiHelper::Assistant::CUSTOM_PROMPT raise Discourse::InvalidParameters.new(:custom_prompt) if params[:custom_prompt].blank? end @@ -133,7 +129,7 @@ module DiscourseAi :stream_composer_helper, user_id: current_user.id, text: text, - prompt: prompt.name, + prompt: params[:mode], custom_prompt: params[:custom_prompt], force_default_locale: params[:force_default_locale] || false, client_id: params[:client_id], @@ -149,7 +145,7 @@ module DiscourseAi post_id: post.id, user_id: current_user.id, text: text, - prompt: prompt.name, + prompt: params[:mode], custom_prompt: params[:custom_prompt], client_id: params[:client_id], ) diff --git a/app/jobs/regular/stream_composer_helper.rb b/app/jobs/regular/stream_composer_helper.rb index c3066c32..ae3c5017 100644 --- a/app/jobs/regular/stream_composer_helper.rb +++ b/app/jobs/regular/stream_composer_helper.rb @@ -10,19 +10,16 @@ module Jobs return unless args[:text] return unless args[:client_id] - prompt = CompletionPrompt.enabled_by_name(args[:prompt]) - - if prompt.id == CompletionPrompt::CUSTOM_PROMPT - prompt.custom_instruction = args[:custom_prompt] - end + helper_mode = args[:prompt] DiscourseAi::AiHelper::Assistant.new.stream_prompt( - prompt, + helper_mode, args[:text], user, "/discourse-ai/ai-helper/stream_composer_suggestion", force_default_locale: args[:force_default_locale], client_id: args[:client_id], + custom_prompt: args[:custom_prompt], ) end end diff --git a/app/jobs/regular/stream_post_helper.rb b/app/jobs/regular/stream_post_helper.rb index 9272e295..56a3149f 100644 --- a/app/jobs/regular/stream_post_helper.rb +++ b/app/jobs/regular/stream_post_helper.rb @@ -14,16 +14,12 @@ module Jobs return unless user.guardian.can_see?(post) - prompt = CompletionPrompt.enabled_by_name(args[:prompt]) + helper_mode = args[:prompt] - if prompt.id == CompletionPrompt::CUSTOM_PROMPT - prompt.custom_instruction = args[:custom_prompt] - end - - if prompt.name == "explain" - input = <<~TEXT - #{args[:text]} - #{post.raw} + if helper_mode == DiscourseAi::AiHelper::Assistant::EXPLAIN + input = <<~TEXT.strip + #{args[:text]} + #{post.raw} #{topic.title} #{reply_to ? "#{reply_to.raw}" : nil} TEXT @@ -32,10 +28,11 @@ module Jobs end DiscourseAi::AiHelper::Assistant.new.stream_prompt( - prompt, + helper_mode, input, user, "/discourse-ai/ai-helper/stream_suggestion/#{post.id}", + custom_prompt: args[:custom_prompt], ) end end diff --git a/app/jobs/scheduled/topics_locale_detection_backfill.rb b/app/jobs/scheduled/topics_locale_detection_backfill.rb index 6cb3b733..075c36c1 100644 --- a/app/jobs/scheduled/topics_locale_detection_backfill.rb +++ b/app/jobs/scheduled/topics_locale_detection_backfill.rb @@ -10,6 +10,7 @@ module Jobs return if !SiteSetting.discourse_ai_enabled return if !SiteSetting.ai_translation_enabled limit = SiteSetting.ai_translation_backfill_rate + return if limit == 0 topics = Topic.where(locale: nil, deleted_at: nil).where("topics.user_id > 0") diff --git a/app/models/completion_prompt.rb b/app/models/completion_prompt.rb index 961941d2..bec27754 100644 --- a/app/models/completion_prompt.rb +++ b/app/models/completion_prompt.rb @@ -1,6 +1,11 @@ # frozen_string_literal: true class CompletionPrompt < ActiveRecord::Base + # + # DEPRECATED. + # TODO(roman): Remove after 06-17-25 + # + TRANSLATE = -301 GENERATE_TITLES = -307 PROOFREAD = -303 diff --git a/assets/javascripts/discourse/components/ai-bot-conversations.gjs b/assets/javascripts/discourse/components/ai-bot-conversations.gjs index 9e86d3f0..019b915e 100644 --- a/assets/javascripts/discourse/components/ai-bot-conversations.gjs +++ b/assets/javascripts/discourse/components/ai-bot-conversations.gjs @@ -10,6 +10,7 @@ import { TrackedArray } from "@ember-compat/tracked-built-ins"; import $ from "jquery"; import DButton from "discourse/components/d-button"; import PluginOutlet from "discourse/components/plugin-outlet"; +import bodyClass from "discourse/helpers/body-class"; import { popupAjaxError } from "discourse/lib/ajax-error"; import userAutocomplete from "discourse/lib/autocomplete/user"; import { setupHashtagAutocomplete } from "discourse/lib/hashtag-autocomplete"; @@ -279,6 +280,7 @@ export default class AiBotConversations extends Component {