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.
This commit is contained in:
Natalie Tay 2025-06-30 17:45:04 +08:00 committed by GitHub
parent 262bd8b145
commit a94daa14e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 2 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)