# frozen_string_literal: true module Jobs class StreamPostHelper < ::Jobs::Base sidekiq_options retry: false def execute(args) return unless post = Post.includes(:topic).find_by(id: args[:post_id]) return unless user = User.find_by(id: args[:user_id]) return unless args[:term_to_explain] topic = post.topic reply_to = post.reply_to_post guardian = Guardian.new(user) return unless guardian.can_see?(post) prompt = CompletionPrompt.enabled_by_name("explain") input = <<~TEXT #{args[:term_to_explain]} #{post.raw} #{topic.title} #{reply_to ? "#{reply_to.raw}" : nil} TEXT DiscourseAi::AiHelper::Assistant.new.stream_prompt( prompt, input, user, "/discourse-ai/ai-helper/explain/#{post.id}", ) end end end