dots are not commas

This commit is contained in:
Rafael Silva 2025-05-09 16:24:20 -03:00
parent 5b353bd87d
commit 1c4806beb6
1 changed files with 18 additions and 17 deletions

View File

@ -11,11 +11,12 @@ module DiscourseAi
# Use the ConceptFinder persona to identify concepts # Use the ConceptFinder persona to identify concepts
llm = DiscourseAi::Completions::Llm.default_llm llm = DiscourseAi::Completions::Llm.default_llm
persona = DiscourseAi::Personas::ConceptFinder.new persona = DiscourseAi::Personas::ConceptFinder.new
context = DiscourseAi::Personas::BotContext.new( context =
messages: [{ type: :user, content: content }], DiscourseAi::Personas::BotContext.new(
user: Discourse.system_user. messages: [{ type: :user, content: content }],
user: Discourse.system_user,
inferred_concepts: DiscourseAi::InferredConcepts::Manager.list_concepts, inferred_concepts: DiscourseAi::InferredConcepts::Manager.list_concepts,
) )
prompt = persona.craft_prompt(context) prompt = persona.craft_prompt(context)
response = llm.completion(prompt, extract_json: true) response = llm.completion(prompt, extract_json: true)
@ -31,9 +32,7 @@ module DiscourseAi
def self.create_or_find_concepts(concept_names) def self.create_or_find_concepts(concept_names)
return [] if concept_names.blank? return [] if concept_names.blank?
concept_names.map do |name| concept_names.map { |name| InferredConcept.find_or_create_by(name: name) }
InferredConcept.find_or_create_by(name: name)
end
end end
# Finds candidate topics to use for concept generation # Finds candidate topics to use for concept generation
@ -55,12 +54,13 @@ module DiscourseAi
category_ids: nil, category_ids: nil,
created_after: 30.days.ago created_after: 30.days.ago
) )
query = Topic.where( query =
"topics.posts_count >= ? AND topics.views >= ? AND topics.like_count >= ?", Topic.where(
min_posts, "topics.posts_count >= ? AND topics.views >= ? AND topics.like_count >= ?",
min_views, min_posts,
min_likes min_views,
) min_likes,
)
# Apply additional filters # Apply additional filters
query = query.where("topics.id NOT IN (?)", exclude_topic_ids) if exclude_topic_ids.present? query = query.where("topics.id NOT IN (?)", exclude_topic_ids) if exclude_topic_ids.present?
@ -79,10 +79,11 @@ module DiscourseAi
query = query.where("topics.id NOT IN (#{topics_with_concepts})") query = query.where("topics.id NOT IN (#{topics_with_concepts})")
# Score and order topics by engagement (combination of views, likes, and posts) # Score and order topics by engagement (combination of views, likes, and posts)
query = query.select( query =
"topics.*, query.select(
(topics.like_count * 2 + topics.posts_count * 3 + topics.views * 0.1) AS engagement_score" "topics.*,
).order("engagement_score DESC") (topics.like_count * 2 + topics.posts_count * 3 + topics.views * 0.1) AS engagement_score",
).order("engagement_score DESC")
# Return limited number of topics # Return limited number of topics
query.limit(limit) query.limit(limit)