diff --git a/app/controllers/discourse_ai/summarization/summary_controller.rb b/app/controllers/discourse_ai/summarization/summary_controller.rb new file mode 100644 index 00000000..11ce36a5 --- /dev/null +++ b/app/controllers/discourse_ai/summarization/summary_controller.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module DiscourseAi + module Summarization + class SummaryController < ::ApplicationController + requires_plugin ::DiscourseAi::PLUGIN_NAME + requires_login + + VALID_SINCE_VALUES = [1, 3, 6, 12, 24] + + def chat_channel + since = params[:since].to_i + + raise Discourse::InvalidParameters.new(:since) if !VALID_SINCE_VALUES.include?(since) + chat_channel = Chat::Channel.find_by(id: params[:chat_channel_id]) + raise Discourse::NotFound.new(:chat_channel) if !chat_channel + + RateLimiter.new( + current_user, + "ai_summarization", + 6, + SiteSetting.ai_summarization_rate_limit_minutes.minutes, + ).performed! + + hijack do + summary = DiscourseAi::Summarization::SummaryGenerator.new(chat_channel).summarize!(since) + + render json: { summary: summary }, status: 200 + end + end + end + end +end diff --git a/assets/javascripts/discourse/components/ai-helper.hbs b/assets/javascripts/discourse/components/ai-helper.hbs index bcec19f8..69c421ca 100644 --- a/assets/javascripts/discourse/components/ai-helper.hbs +++ b/assets/javascripts/discourse/components/ai-helper.hbs @@ -62,6 +62,8 @@ /> {{else}} -
Select an option...
+
{{i18n + "discourse_ai.modals.select_option" + }}
{{/if}} \ No newline at end of file diff --git a/assets/javascripts/discourse/components/chat-channel-summary.hbs b/assets/javascripts/discourse/components/chat-channel-summary.hbs new file mode 100644 index 00000000..cf0b0733 --- /dev/null +++ b/assets/javascripts/discourse/components/chat-channel-summary.hbs @@ -0,0 +1,23 @@ + + {{i18n "discourse_ai.summarization.description"}} + + +
+ + + {{#unless this.loading}} +