mirror of
				https://github.com/discourse/discourse-ai.git
				synced 2025-11-04 08:28:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module DiscourseAi
 | 
						|
  module Sentiment
 | 
						|
    class SentimentClassification
 | 
						|
      def type
 | 
						|
        :sentiment
 | 
						|
      end
 | 
						|
 | 
						|
      def available_models
 | 
						|
        SiteSetting.ai_sentiment_models.split("|")
 | 
						|
      end
 | 
						|
 | 
						|
      def can_classify?(target)
 | 
						|
        content_of(target).present?
 | 
						|
      end
 | 
						|
 | 
						|
      def get_verdicts(_)
 | 
						|
        available_models.reduce({}) do |memo, model|
 | 
						|
          memo[model] = false
 | 
						|
          memo
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      def should_flag_based_on?(_verdicts)
 | 
						|
        # We don't flag based on sentiment classification.
 | 
						|
        false
 | 
						|
      end
 | 
						|
 | 
						|
      def request(target_to_classify)
 | 
						|
        target_content = content_of(target_to_classify)
 | 
						|
 | 
						|
        available_models.reduce({}) do |memo, model|
 | 
						|
          memo[model] = request_with(model, target_content)
 | 
						|
          memo
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      private
 | 
						|
 | 
						|
      def request_with(model, content)
 | 
						|
        ::DiscourseAi::Inference::DiscourseClassifier.perform!(
 | 
						|
          "#{SiteSetting.ai_sentiment_inference_service_api_endpoint}/api/v1/classify",
 | 
						|
          model,
 | 
						|
          content,
 | 
						|
          SiteSetting.ai_sentiment_inference_service_api_key,
 | 
						|
        )
 | 
						|
      end
 | 
						|
 | 
						|
      def content_of(target_to_classify)
 | 
						|
        if target_to_classify.post_number == 1
 | 
						|
          "#{target_to_classify.topic.title}\n#{target_to_classify.raw}"
 | 
						|
        else
 | 
						|
          target_to_classify.raw
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |