mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 01:34:39 +08:00
DEV: Remove summarization code (#27373)
This commit is contained in:
@ -1,40 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Chat::Api::SummariesController < Chat::ApiController
|
||||
VALID_SINCE_VALUES = [1, 3, 6, 12, 24, 72, 168]
|
||||
|
||||
def get_summary
|
||||
since = params[:since].to_i
|
||||
raise Discourse::InvalidParameters.new(:since) if !VALID_SINCE_VALUES.include?(since)
|
||||
|
||||
channel = Chat::Channel.find(params[:channel_id])
|
||||
guardian.ensure_can_join_chat_channel!(channel)
|
||||
|
||||
strategy = Summarization::Base.selected_strategy
|
||||
raise Discourse::NotFound.new unless strategy
|
||||
raise Discourse::InvalidAccess unless Summarization::Base.can_request_summary_for?(current_user)
|
||||
|
||||
RateLimiter.new(current_user, "channel_summary", 6, 5.minutes).performed!
|
||||
|
||||
hijack do
|
||||
content = { content_title: channel.name }
|
||||
|
||||
content[:contents] = channel
|
||||
.chat_messages
|
||||
.where("chat_messages.created_at > ?", since.hours.ago)
|
||||
.includes(:user)
|
||||
.order(created_at: :asc)
|
||||
.pluck(:id, :username_lower, :message)
|
||||
.map { { id: _1, poster: _2, text: _3 } }
|
||||
|
||||
summarized_text =
|
||||
if content[:contents].empty?
|
||||
I18n.t("chat.summaries.no_targets")
|
||||
else
|
||||
strategy.summarize(content, current_user).dig(:summary)
|
||||
end
|
||||
|
||||
render json: { summary: summarized_text }
|
||||
end
|
||||
end
|
||||
end
|
@ -26,7 +26,6 @@ import {
|
||||
import { cloneJSON } from "discourse-common/lib/object";
|
||||
import { findRawTemplate } from "discourse-common/lib/raw-templates";
|
||||
import I18n from "discourse-i18n";
|
||||
import ChatModalChannelSummary from "discourse/plugins/chat/discourse/components/chat/modal/channel-summary";
|
||||
import { chatComposerButtons } from "discourse/plugins/chat/discourse/lib/chat-composer-buttons";
|
||||
import ChatMessageInteractor from "discourse/plugins/chat/discourse/lib/chat-message-interactor";
|
||||
import TextareaInteractor from "discourse/plugins/chat/discourse/lib/textarea-interactor";
|
||||
@ -396,13 +395,6 @@ export default class ChatComposer extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
showChannelSummaryModal() {
|
||||
this.modal.show(ChatModalChannelSummary, {
|
||||
model: { channelId: this.args.channel.id },
|
||||
});
|
||||
}
|
||||
|
||||
#addMentionedUser(userData) {
|
||||
const user = this.store.createRecord("user", userData);
|
||||
this.draft.mentionedUsers.set(user.id, user);
|
||||
|
@ -1,78 +0,0 @@
|
||||
import Component from "@glimmer/component";
|
||||
import { tracked } from "@glimmer/tracking";
|
||||
import { action } from "@ember/object";
|
||||
import { service } from "@ember/service";
|
||||
import ConditionalLoadingSection from "discourse/components/conditional-loading-section";
|
||||
import DModal from "discourse/components/d-modal";
|
||||
import DModalCancel from "discourse/components/d-modal-cancel";
|
||||
import { popupAjaxError } from "discourse/lib/ajax-error";
|
||||
import i18n from "discourse-common/helpers/i18n";
|
||||
import I18n from "discourse-i18n";
|
||||
import ComboBox from "select-kit/components/combo-box";
|
||||
|
||||
export default class ChatModalChannelSummary extends Component {
|
||||
@service chatApi;
|
||||
|
||||
@tracked sinceHours = null;
|
||||
@tracked loading = false;
|
||||
@tracked summary = null;
|
||||
|
||||
availableSummaries = {};
|
||||
|
||||
sinceOptions = [1, 3, 6, 12, 24, 72, 168].map((hours) => {
|
||||
return {
|
||||
name: I18n.t("chat.summarization.since", { count: hours }),
|
||||
value: hours,
|
||||
};
|
||||
});
|
||||
|
||||
get channelId() {
|
||||
return this.args.model.channelId;
|
||||
}
|
||||
|
||||
@action
|
||||
summarize(since) {
|
||||
this.sinceHours = since;
|
||||
this.loading = true;
|
||||
|
||||
if (this.availableSummaries[since]) {
|
||||
this.summary = this.availableSummaries[since];
|
||||
this.loading = false;
|
||||
return;
|
||||
}
|
||||
|
||||
return this.chatApi
|
||||
.summarize(this.channelId, { since })
|
||||
.then((data) => {
|
||||
this.availableSummaries[this.sinceHours] = data.summary;
|
||||
this.summary = this.availableSummaries[this.sinceHours];
|
||||
})
|
||||
.catch(popupAjaxError)
|
||||
.finally(() => (this.loading = false));
|
||||
}
|
||||
|
||||
<template>
|
||||
<DModal
|
||||
@closeModal={{@closeModal}}
|
||||
class="chat-modal-channel-summary"
|
||||
@title={{i18n "chat.summarization.title"}}
|
||||
>
|
||||
<:body>
|
||||
<span>{{i18n "chat.summarization.description"}}</span>
|
||||
<ComboBox
|
||||
@value={{this.sinceHours}}
|
||||
@content={{this.sinceOptions}}
|
||||
@onChange={{this.summarize}}
|
||||
@valueProperty="value"
|
||||
class="summarization-since"
|
||||
/>
|
||||
<ConditionalLoadingSection @isLoading={{this.loading}}>
|
||||
<p class="summary-area">{{this.summary}}</p>
|
||||
</ConditionalLoadingSection>
|
||||
</:body>
|
||||
<:footer>
|
||||
<DModalCancel @close={{@closeModal}} />
|
||||
</:footer>
|
||||
</DModal>
|
||||
</template>
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
<StyleguideExample @title="<Chat::Modal::ChannelSummary>">
|
||||
<Styleguide::Controls::Row>
|
||||
<DButton @translatedLabel="Open modal" @action={{this.openModal}} />
|
||||
</Styleguide::Controls::Row>
|
||||
</StyleguideExample>
|
@ -1,17 +0,0 @@
|
||||
import Component from "@glimmer/component";
|
||||
import { getOwner } from "@ember/application";
|
||||
import { action } from "@ember/object";
|
||||
import { service } from "@ember/service";
|
||||
import ChatModalChannelSummary from "discourse/plugins/chat/discourse/components/chat/modal/channel-summary";
|
||||
import ChatFabricators from "discourse/plugins/chat/discourse/lib/fabricators";
|
||||
|
||||
export default class ChatStyleguideChatModalChannelSummary extends Component {
|
||||
@service modal;
|
||||
|
||||
@action
|
||||
openModal() {
|
||||
return this.modal.show(ChatModalChannelSummary, {
|
||||
model: { channelId: new ChatFabricators(getOwner(this)).channel().id },
|
||||
});
|
||||
}
|
||||
}
|
@ -3,7 +3,6 @@ import ChatComposerMessageDetails from "../chat-composer-message-details";
|
||||
import ChatHeaderIcon from "../chat-header-icon";
|
||||
import ChatMessage from "../chat-message";
|
||||
import ChatModalArchiveChannel from "../chat-modal-archive-channel";
|
||||
import ChatModalChannelSummary from "../chat-modal-channel-summary";
|
||||
import ChatModalCreateChannel from "../chat-modal-create-channel";
|
||||
import ChatModalDeleteChannel from "../chat-modal-delete-channel";
|
||||
import ChatModalEditChannelDescription from "../chat-modal-edit-channel-description";
|
||||
@ -32,7 +31,6 @@ const ChatOrganism = <template>
|
||||
<ChatModalCreateChannel />
|
||||
<ChatModalToggleChannelStatus />
|
||||
<ChatModalNewMessage />
|
||||
<ChatModalChannelSummary />
|
||||
</template>;
|
||||
|
||||
export default ChatOrganism;
|
||||
|
@ -97,21 +97,6 @@ export default {
|
||||
},
|
||||
});
|
||||
|
||||
const canSummarize =
|
||||
this.siteSettings.summarization_strategy &&
|
||||
this.currentUser &&
|
||||
this.currentUser.can_summarize;
|
||||
|
||||
if (canSummarize) {
|
||||
api.registerChatComposerButton({
|
||||
translatedLabel: "chat.summarization.title",
|
||||
id: "channel-summary",
|
||||
icon: "discourse-sparkles",
|
||||
position: "dropdown",
|
||||
action: "showChannelSummaryModal",
|
||||
});
|
||||
}
|
||||
|
||||
// we want to decorate the chat quote dates regardless
|
||||
// of whether the current user has chat enabled
|
||||
api.decorateCookedElement((elem) => {
|
||||
|
@ -578,17 +578,6 @@ export default class ChatApi extends Service {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Summarize a channel.
|
||||
*
|
||||
* @param {number} channelId - The ID of the channel to summarize.
|
||||
* @param {object} options
|
||||
* @param {number} options.since - Number of hours ago the summary should start (1, 3, 6, 12, 24, 72, 168).
|
||||
*/
|
||||
summarize(channelId, options = {}) {
|
||||
return this.#getRequest(`/channels/${channelId}/summarize`, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add members to a channel.
|
||||
*
|
||||
|
@ -144,13 +144,6 @@ en:
|
||||
join: "Join"
|
||||
last_visit: "last visit"
|
||||
|
||||
summarization:
|
||||
title: "Summarize messages"
|
||||
description: "Select an option below to summarize the conversation sent during the desired timeframe."
|
||||
summarize: "Summarize"
|
||||
since:
|
||||
one: "Last hour"
|
||||
other: "Last %{count} hours"
|
||||
mention_warning:
|
||||
invitations_sent:
|
||||
one: "Invitation sent"
|
||||
|
@ -196,9 +196,6 @@ en:
|
||||
one: "and %{count} other"
|
||||
other: "and %{count} others"
|
||||
|
||||
summaries:
|
||||
no_targets: "There were no messages during the selected period."
|
||||
|
||||
transcript:
|
||||
default_thread_title: "Thread"
|
||||
split_thread_range: "messages %{start} to %{end} of %{total}"
|
||||
|
@ -56,8 +56,6 @@ Chat::Engine.routes.draw do
|
||||
put "/channels/:channel_id/messages/:message_id/restore" => "channel_messages#restore"
|
||||
delete "/channels/:channel_id/messages/:message_id" => "channel_messages#destroy"
|
||||
delete "/channels/:channel_id/messages" => "channel_messages#bulk_destroy"
|
||||
|
||||
get "/channels/:channel_id/summarize" => "summaries#get_summary"
|
||||
end
|
||||
|
||||
namespace :admin, defaults: { format: :json, constraints: StaffConstraint.new } do
|
||||
|
@ -1,34 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
RSpec.describe Chat::Api::SummariesController do
|
||||
fab!(:current_user) { Fabricate(:user) }
|
||||
fab!(:group)
|
||||
let(:plugin) { Plugin::Instance.new }
|
||||
|
||||
before do
|
||||
group.add(current_user)
|
||||
|
||||
strategy = DummyCustomSummarization.new({ summary: "dummy", chunks: [] })
|
||||
plugin.register_summarization_strategy(strategy)
|
||||
SiteSetting.summarization_strategy = strategy.model
|
||||
SiteSetting.custom_summarization_allowed_groups = group.id
|
||||
|
||||
SiteSetting.chat_enabled = true
|
||||
SiteSetting.chat_allowed_groups = group.id
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
after { DiscoursePluginRegistry.reset_register!(:summarization_strategies) }
|
||||
|
||||
describe "#get_summary" do
|
||||
context "when the user is not allowed to join the channel" do
|
||||
fab!(:channel) { Fabricate(:private_category_channel) }
|
||||
|
||||
it "returns a 403" do
|
||||
get "/chat/api/channels/#{channel.id}/summarize", params: { since: 6 }
|
||||
|
||||
expect(response.status).to eq(403)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,39 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
RSpec.describe "Summarize a channel since your last visit", type: :system do
|
||||
fab!(:current_user) { Fabricate(:user) }
|
||||
fab!(:group)
|
||||
fab!(:channel) { Fabricate(:chat_channel) }
|
||||
fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel) }
|
||||
let(:chat) { PageObjects::Pages::Chat.new }
|
||||
let(:plugin) { Plugin::Instance.new }
|
||||
let(:summarization_result) { { summary: "This is a summary", chunks: [] } }
|
||||
|
||||
before do
|
||||
group.add(current_user)
|
||||
|
||||
strategy = DummyCustomSummarization.new(summarization_result)
|
||||
plugin.register_summarization_strategy(strategy)
|
||||
SiteSetting.summarization_strategy = strategy.model
|
||||
SiteSetting.custom_summarization_allowed_groups = group.id.to_s
|
||||
|
||||
SiteSetting.chat_enabled = true
|
||||
SiteSetting.chat_allowed_groups = group.id.to_s
|
||||
sign_in(current_user)
|
||||
chat_system_bootstrap(current_user, [channel])
|
||||
end
|
||||
|
||||
it "displays a summary of the messages since the selected timeframe" do
|
||||
chat.visit_channel(channel)
|
||||
|
||||
find(".chat-composer-dropdown__trigger-btn").click
|
||||
find(".chat-composer-dropdown__action-btn.channel-summary").click
|
||||
|
||||
expect(page.has_css?(".chat-modal-channel-summary")).to eq(true)
|
||||
|
||||
find(".summarization-since").click
|
||||
find(".select-kit-row[data-value=\"3\"]").click
|
||||
|
||||
expect(find(".summary-area").text).to eq(summarization_result[:summary])
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user