generated from discourse/discourse-plugin-skeleton
-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathsummarization.rb
80 lines (66 loc) · 2.58 KB
/
summarization.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# frozen_string_literal: true
module DiscourseAi
module Summarization
class << self
def topic_summary(topic)
return nil if !SiteSetting.ai_summarization_enabled
if (ai_persona = AiPersona.find_by(id: SiteSetting.ai_summarization_persona)).blank?
return nil
end
persona_klass = ai_persona.class_instance
llm_model = find_summarization_model(persona_klass)
return nil if llm_model.blank?
DiscourseAi::Summarization::FoldContent.new(
build_bot(persona_klass, llm_model),
DiscourseAi::Summarization::Strategies::TopicSummary.new(topic),
)
end
def topic_gist(topic)
return nil if !SiteSetting.ai_summarization_enabled
if (ai_persona = AiPersona.find_by(id: SiteSetting.ai_summary_gists_persona)).blank?
return nil
end
persona_klass = ai_persona.class_instance
llm_model = find_summarization_model(persona_klass)
return nil if llm_model.blank?
DiscourseAi::Summarization::FoldContent.new(
build_bot(persona_klass, llm_model),
DiscourseAi::Summarization::Strategies::HotTopicGists.new(topic),
)
end
def chat_channel_summary(channel, time_window_in_hours)
return nil if !SiteSetting.ai_summarization_enabled
if (ai_persona = AiPersona.find_by(id: SiteSetting.ai_summarization_persona)).blank?
return nil
end
persona_klass = ai_persona.class_instance
llm_model = find_summarization_model(persona_klass)
return nil if llm_model.blank?
DiscourseAi::Summarization::FoldContent.new(
build_bot(persona_klass, llm_model),
DiscourseAi::Summarization::Strategies::ChatMessages.new(channel, time_window_in_hours),
persist_summaries: false,
)
end
# Priorities are:
# 1. Persona's default LLM
# 2. Hidden `ai_summarization_model` setting
# 3. Newest LLM config
def find_summarization_model(persona_klass)
model_id =
persona_klass.default_llm_id || SiteSetting.ai_summarization_model&.split(":")&.last # Remove legacy custom provider.
if model_id.present?
LlmModel.find_by(id: model_id)
else
LlmModel.last
end
end
### Private
def build_bot(persona_klass, llm_model)
persona = persona_klass.new
user = User.find_by(id: persona_klass.user_id) || Discourse.system_user
bot = DiscourseAi::Personas::Bot.as(user, persona: persona, model: llm_model)
end
end
end
end