# frozen_string_literal: true class DiscourseAi::Embeddings::SemanticTopicQuery < TopicQuery def list_semantic_related_topics(topic) query_opts = { skip_ordering: true, per_page: SiteSetting.ai_embeddings_semantic_related_topics, unordered: true, } if !SiteSetting.ai_embeddings_semantic_related_include_closed_topics query_opts[:status] = "open" end list = create_list(:semantic_related, query_opts) do |topics| candidate_ids = DiscourseAi::Embeddings::SemanticRelated.new.related_topic_ids_for(topic) list = topics .where.not(id: topic.id) .where(id: candidate_ids) .order("array_position(ARRAY#{candidate_ids}, topics.id)") # array_position forces the order of the topics to be preserved list = remove_muted(list, @user, query_opts) end end end