mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-02-12 06:24:42 +00:00
c7acb4a6a0
* DEV: Add summary types * Refactor for different summary types * Use enum for summary types * Update lib/summarization/strategies/topic_summary.rb Co-authored-by: Penar Musaraj <pmusaraj@gmail.com> * Update lib/summarization/strategies/topic_gist.rb Co-authored-by: Penar Musaraj <pmusaraj@gmail.com> * Update lib/summarization/strategies/chat_messages.rb Co-authored-by: Penar Musaraj <pmusaraj@gmail.com> * Fix chat_messages single prompt * Small tweak to the chat summarization prompt --------- Co-authored-by: Penar Musaraj <pmusaraj@gmail.com>
45 lines
1.1 KiB
Ruby
45 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
# A cache layer on top of our topic summarization engine. Also handle permissions.
|
|
class TopicSummarization
|
|
def self.for(topic, user)
|
|
new(DiscourseAi::Summarization.topic_summary(topic), user)
|
|
end
|
|
|
|
def initialize(summarizer, user)
|
|
@summarizer = summarizer
|
|
@user = user
|
|
end
|
|
|
|
def cached_summary
|
|
summarizer.existing_summary
|
|
end
|
|
|
|
def summarize(skip_age_check: false, &on_partial_blk)
|
|
# Existing summary shouldn't be nil in this scenario because the controller checks its existence.
|
|
return if !user && !cached_summary
|
|
|
|
return cached_summary if use_cached?(skip_age_check)
|
|
|
|
summarizer.delete_cached_summaries! if cached_summary
|
|
|
|
summarizer.summarize(user, &on_partial_blk)
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :summarizer, :user
|
|
|
|
def use_cached?(skip_age_check)
|
|
can_summarize = Guardian.new(user).can_request_summary?
|
|
|
|
cached_summary &&
|
|
!(
|
|
can_summarize && cached_summary.outdated &&
|
|
(skip_age_check || cached_summary.created_at < 1.hour.ago)
|
|
)
|
|
end
|
|
end
|
|
end
|