diff --git a/app/controllers/discourse_ai/ai_helper/assistant_controller.rb b/app/controllers/discourse_ai/ai_helper/assistant_controller.rb new file mode 100644 index 00000000..d9863e67 --- /dev/null +++ b/app/controllers/discourse_ai/ai_helper/assistant_controller.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module DiscourseAi + module AiHelper + class AssistantController < ::ApplicationController + requires_plugin ::DiscourseAi::PLUGIN_NAME + requires_login + before_action :ensure_can_request_suggestions + + def suggest + raise Discourse::InvalidParameters.new(:text) if params[:text].blank? + + if !DiscourseAi::AiHelper::OpenAiPrompt::VALID_TYPES.include?(params[:mode]) + raise Discourse::InvalidParameters.new(:mode) + end + + RateLimiter.new(current_user, "ai_assistant", 6, 3.minutes).performed! + + hijack do + render json: + DiscourseAi::AiHelper::OpenAiPrompt.new.generate_and_send_prompt( + params[:mode], + params[:text], + ), + status: 200 + end + end + + private + + def ensure_can_request_suggestions + user_group_ids = current_user.group_ids + + allowed = + SiteSetting.ai_helper_allowed_groups_map.any? do |group_id| + user_group_ids.include?(group_id) + end + + raise Discourse::InvalidAccess if !allowed + end + end + end +end diff --git a/assets/javascripts/discourse/components/ai-helper.hbs b/assets/javascripts/discourse/components/ai-helper.hbs new file mode 100644 index 00000000..bcec19f8 --- /dev/null +++ b/assets/javascripts/discourse/components/ai-helper.hbs @@ -0,0 +1,67 @@ + + {{i18n "discourse_ai.ai_helper.description"}} + + + +
+