From ee734a340a6f468de65465c1fddede0f9801214b Mon Sep 17 00:00:00 2001 From: Rafael dos Santos Silva Date: Tue, 5 Sep 2023 14:15:01 -0300 Subject: [PATCH] FIX: Tag/category suggestion broke in 2c0f535 (#198) --- lib/modules/ai_helper/semantic_categorizer.rb | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/modules/ai_helper/semantic_categorizer.rb b/lib/modules/ai_helper/semantic_categorizer.rb index c3918c5d..6a19075b 100644 --- a/lib/modules/ai_helper/semantic_categorizer.rb +++ b/lib/modules/ai_helper/semantic_categorizer.rb @@ -11,12 +11,7 @@ module DiscourseAi return [] if @text.blank? return [] unless SiteSetting.ai_embeddings_enabled - strategy = DiscourseAi::Embeddings::Strategies::Truncation.new - vector_rep = - DiscourseAi::Embeddings::VectorRepresentations::Base.current_representation(strategy) - - candidates = - vector_rep.asymmetric_semantic_search(@text, limit: 100, offset: 0, return_distance: true) + candidates = nearest_neighbors(limit: 100) candidate_ids = candidates.map(&:first) ::Topic @@ -41,13 +36,7 @@ module DiscourseAi return [] if @text.blank? return [] unless SiteSetting.ai_embeddings_enabled - candidates = - ::DiscourseAi::Embeddings::SemanticSearch.new(nil).asymmetric_semantic_search( - @text, - 100, - 0, - return_distance: true, - ) + candidates = nearest_neighbors(limit: 100) candidate_ids = candidates.map(&:first) ::Topic @@ -70,6 +59,23 @@ module DiscourseAi .sort_by { |c| -c[:score] } .take(5) end + + private + + def nearest_neighbors(limit: 100) + strategy = DiscourseAi::Embeddings::Strategies::Truncation.new + vector_rep = + DiscourseAi::Embeddings::VectorRepresentations::Base.current_representation(strategy) + + raw_vector = vector_rep.vector_from(@text) + + vector_rep.asymmetric_topics_similarity_search( + raw_vector, + limit: limit, + offset: 0, + return_distance: true, + ) + end end end end