34 lines
1.0 KiB
Ruby
34 lines
1.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module AiHelper
|
|
class TopicHelper
|
|
def initialize(input, user, params = {})
|
|
@user = user
|
|
@text = input[:text]
|
|
@params = params
|
|
end
|
|
|
|
def explain
|
|
return nil if @text.blank?
|
|
return nil unless post = Post.find_by(id: @params[:post])
|
|
|
|
reply_to = post.topic.first_post
|
|
topic = reply_to.topic
|
|
|
|
llm_prompt =
|
|
DiscourseAi::AiHelper::LlmPrompt.new.available_prompts(name_filter: "explain").first
|
|
prompt = CompletionPrompt.find_by(id: llm_prompt[:id])
|
|
|
|
prompt.messages.first["content"].gsub!("{{search}}", @text)
|
|
prompt.messages.first["content"].gsub!("{{context}}", post.raw)
|
|
prompt.messages.first["content"].gsub!("{{topic}}", topic.title)
|
|
# TODO inject this conditionally
|
|
#prompt.messages.first["content"].gsub!("{{post}}", reply_to.raw)
|
|
|
|
DiscourseAi::AiHelper::LlmPrompt.new.generate_and_send_prompt(prompt, nil)
|
|
end
|
|
end
|
|
end
|
|
end
|