From a94daa14e2beff9a7f093d0ad91ffe5197364039 Mon Sep 17 00:00:00 2001 From: Natalie Tay Date: Mon, 30 Jun 2025 17:45:04 +0800 Subject: [PATCH] FIX: Return no topics when embeddings is disabled (#1473) When an invalid model is set for embeddings, topics do not load even if embeddings is disabled. Error: ## RuntimeError in TopicsController#show Invalid embeddings selected model This commit checks for valid settings before attempting to load related topics. --- lib/embeddings/semantic_related.rb | 2 +- .../modules/embeddings/semantic_related_spec.rb | 14 ++++++++++++++ .../embeddings/semantic_topic_query_spec.rb | 5 ++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/embeddings/semantic_related.rb b/lib/embeddings/semantic_related.rb index 5f8c8234..c3bf728b 100644 --- a/lib/embeddings/semantic_related.rb +++ b/lib/embeddings/semantic_related.rb @@ -10,7 +10,7 @@ module DiscourseAi def related_topic_ids_for(topic) return [] if SiteSetting.ai_embeddings_semantic_related_topics < 1 - return [] if SiteSetting.ai_embeddings_selected_model.blank? # fail-safe in case something end up in a broken state. + return [] if !DiscourseAi::Embeddings.enabled? # fail-safe in case something end up in a broken state. cache_for = results_ttl(topic) diff --git a/spec/lib/modules/embeddings/semantic_related_spec.rb b/spec/lib/modules/embeddings/semantic_related_spec.rb index f829a948..ce8904db 100644 --- a/spec/lib/modules/embeddings/semantic_related_spec.rb +++ b/spec/lib/modules/embeddings/semantic_related_spec.rb @@ -22,6 +22,20 @@ describe DiscourseAi::Embeddings::SemanticRelated do end describe "#related_topic_ids_for" do + it "returns empty array if AI embeddings are disabled" do + SiteSetting.ai_embeddings_enabled = false + SiteSetting.ai_embeddings_selected_model = 1234 + + expect(semantic_related.related_topic_ids_for(normal_topic_1)).to eq([]) + end + + it "returns empty array if AI embeddings model is invalid" do + SiteSetting.ai_embeddings_enabled = true + SiteSetting.ai_embeddings_selected_model = 1234 + + expect(semantic_related.related_topic_ids_for(normal_topic_1)).to eq([]) + end + context "when embeddings do not exist" do let(:topic) do post = Fabricate(:post) diff --git a/spec/lib/modules/embeddings/semantic_topic_query_spec.rb b/spec/lib/modules/embeddings/semantic_topic_query_spec.rb index ffc35837..185e6221 100644 --- a/spec/lib/modules/embeddings/semantic_topic_query_spec.rb +++ b/spec/lib/modules/embeddings/semantic_topic_query_spec.rb @@ -11,7 +11,10 @@ describe DiscourseAi::Embeddings::EntryPoint do fab!(:vector_def) { Fabricate(:cloudflare_embedding_def) } - before { SiteSetting.ai_embeddings_selected_model = vector_def.id } + before do + SiteSetting.ai_embeddings_enabled = true + SiteSetting.ai_embeddings_selected_model = vector_def.id + end # The Distance gap to target increases for each element of topics. def seed_embeddings(topics)