@@ -11,11 +11,12 @@ def self.identify_concepts(content)
11
11
# Use the ConceptFinder persona to identify concepts
12
12
llm = DiscourseAi ::Completions ::Llm . default_llm
13
13
persona = DiscourseAi ::Personas ::ConceptFinder . new
14
- context = DiscourseAi ::Personas ::BotContext . new (
15
- messages : [ { type : :user , content : content } ] ,
16
- user : Discourse . system_user .
14
+ context =
15
+ DiscourseAi ::Personas ::BotContext . new (
16
+ messages : [ { type : :user , content : content } ] ,
17
+ user : Discourse . system_user ,
17
18
inferred_concepts : DiscourseAi ::InferredConcepts ::Manager . list_concepts ,
18
- )
19
+ )
19
20
20
21
prompt = persona . craft_prompt ( context )
21
22
response = llm . completion ( prompt , extract_json : true )
@@ -31,9 +32,7 @@ def self.identify_concepts(content)
31
32
def self . create_or_find_concepts ( concept_names )
32
33
return [ ] if concept_names . blank?
33
34
34
- concept_names . map do |name |
35
- InferredConcept . find_or_create_by ( name : name )
36
- end
35
+ concept_names . map { |name | InferredConcept . find_or_create_by ( name : name ) }
37
36
end
38
37
39
38
# Finds candidate topics to use for concept generation
@@ -55,12 +54,13 @@ def self.find_candidate_topics(
55
54
category_ids : nil ,
56
55
created_after : 30 . days . ago
57
56
)
58
- query = Topic . where (
59
- "topics.posts_count >= ? AND topics.views >= ? AND topics.like_count >= ?" ,
60
- min_posts ,
61
- min_views ,
62
- min_likes
63
- )
57
+ query =
58
+ Topic . where (
59
+ "topics.posts_count >= ? AND topics.views >= ? AND topics.like_count >= ?" ,
60
+ min_posts ,
61
+ min_views ,
62
+ min_likes ,
63
+ )
64
64
65
65
# Apply additional filters
66
66
query = query . where ( "topics.id NOT IN (?)" , exclude_topic_ids ) if exclude_topic_ids . present?
@@ -79,10 +79,11 @@ def self.find_candidate_topics(
79
79
query = query . where ( "topics.id NOT IN (#{ topics_with_concepts } )" )
80
80
81
81
# Score and order topics by engagement (combination of views, likes, and posts)
82
- query = query . select (
83
- "topics.*,
84
- (topics.like_count * 2 + topics.posts_count * 3 + topics.views * 0.1) AS engagement_score"
85
- ) . order ( "engagement_score DESC" )
82
+ query =
83
+ query . select (
84
+ "topics.*,
85
+ (topics.like_count * 2 + topics.posts_count * 3 + topics.views * 0.1) AS engagement_score" ,
86
+ ) . order ( "engagement_score DESC" )
86
87
87
88
# Return limited number of topics
88
89
query . limit ( limit )
0 commit comments