| 
									
										
										
										
											2023-08-08 15:44:10 -03:00
										 |  |  | # 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| | 
					
						
							| 
									
										
										
										
											2023-09-05 11:08:23 -03:00
										 |  |  |         candidate_ids = DiscourseAi::Embeddings::SemanticRelated.new.related_topic_ids_for(topic) | 
					
						
							| 
									
										
										
										
											2023-08-08 15:44:10 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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 |