From 5549e4d5b38e465d6cdca49a731a73137c60495f Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Tue, 4 Apr 2023 11:24:09 -0300 Subject: [PATCH] FEATURE: Chat channel summarization. (#32) * start summary module * chat channel summarization * FEATURE: modal for channel summarization --------- Co-authored-by: Roman Rizzi --- .../summarization/summary_controller.rb | 33 +++++++++ .../discourse/components/ai-helper.hbs | 4 +- .../components/chat-channel-summary.hbs | 23 ++++++ .../components/chat-channel-summary.js | 69 ++++++++++++++++++ .../modal/composer-chat-channel-summary.hbs | 4 ++ .../javascripts/initializers/chat-summary.js | 42 +++++++++++ .../summarization/common/summarization.scss | 10 +++ config/locales/client.en.yml | 8 +++ config/locales/server.en.yml | 6 ++ config/routes.rb | 6 +- config/settings.yml | 17 +++++ lib/modules/summarization/entry_point.rb | 14 ++++ .../summarization/summary_generator.rb | 71 +++++++++++++++++++ lib/shared/inference/openai_completions.rb | 4 +- plugin.rb | 3 + .../summarization/summary_controller_spec.rb | 25 +++++++ 16 files changed, 333 insertions(+), 6 deletions(-) create mode 100644 app/controllers/discourse_ai/summarization/summary_controller.rb create mode 100644 assets/javascripts/discourse/components/chat-channel-summary.hbs create mode 100644 assets/javascripts/discourse/components/chat-channel-summary.js create mode 100644 assets/javascripts/discourse/templates/modal/composer-chat-channel-summary.hbs create mode 100644 assets/javascripts/initializers/chat-summary.js create mode 100644 assets/stylesheets/modules/summarization/common/summarization.scss create mode 100644 lib/modules/summarization/entry_point.rb create mode 100644 lib/modules/summarization/summary_generator.rb create mode 100644 spec/requests/summarization/summary_controller_spec.rb 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}} +