From 2636efcd1bf6eaa0a6d0d868affb9d41d49bdda2 Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Thu, 28 Dec 2023 15:32:03 -0300 Subject: [PATCH] FEATURE: Render Related Topics for Crawlers (#386) --- app/views/list/related_topics.html.erb | 71 ++++++++++++++++++++++++++ lib/embeddings/entry_point.rb | 4 ++ lib/embeddings/semantic_related.rb | 24 +++++++++ 3 files changed, 99 insertions(+) create mode 100644 app/views/list/related_topics.html.erb diff --git a/app/views/list/related_topics.html.erb b/app/views/list/related_topics.html.erb new file mode 100644 index 00000000..21b3e9bd --- /dev/null +++ b/app/views/list/related_topics.html.erb @@ -0,0 +1,71 @@ + diff --git a/lib/embeddings/entry_point.rb b/lib/embeddings/entry_point.rb index b006dd5c..3ce2551f 100644 --- a/lib/embeddings/entry_point.rb +++ b/lib/embeddings/entry_point.rb @@ -37,6 +37,10 @@ module DiscourseAi end end + plugin.register_html_builder("server:topic-show-after-posts-crawler") do |controller| + SemanticRelated.related_topics_for_crawler(controller) + end + # embeddings generation. callback = Proc.new do |topic| diff --git a/lib/embeddings/semantic_related.rb b/lib/embeddings/semantic_related.rb index 683cf66d..af03f806 100644 --- a/lib/embeddings/semantic_related.rb +++ b/lib/embeddings/semantic_related.rb @@ -58,6 +58,30 @@ module DiscourseAi end end + def self.related_topics_for_crawler(controller) + return "" if !controller.instance_of? TopicsController + return "" if !SiteSetting.ai_embeddings_semantic_related_topics_enabled + return "" if SiteSetting.ai_embeddings_semantic_related_topics < 1 + + topic_view = controller.instance_variable_get(:@topic_view) + topic = topic_view&.topic + return "" if !topic + + related_topics ||= SemanticTopicQuery.new(nil).list_semantic_related_topics(topic).topics + + return "" if related_topics.empty? + + render_result = + ApplicationController.render( + template: "list/related_topics", + layout: false, + assigns: { + list: related_topics, + topic: topic, + }, + ) + end + private def semantic_suggested_key(topic_id)