Class: RailsImagePostSolution::OpenaiVisionService

Inherits:
Object
  • Object
show all
Defined in:
app/services/rails_image_post_solution/openai_vision_service.rb

Instance Method Summary collapse

Constructor Details

#initializeOpenaiVisionService

Perform image content moderation using OpenAI Vision API



7
8
9
10
# File 'app/services/rails_image_post_solution/openai_vision_service.rb', line 7

def initialize
  api_key = RailsImagePostSolution.configuration&.openai_api_key || ENV["OPENAI_API_KEY"]
  @client = OpenAI::Client.new(access_token: api_key) if api_key.present?
end

Instance Method Details

#moderate_image(attachment) ⇒ Hash

Analyze image to detect R18/R18G content

Parameters:

  • attachment (ActiveStorage::Attachment)

    Image to analyze

Returns:

  • (Hash)

    Analysis result { flagged: Boolean, categories: Hash, confidence: Float, raw_response: Hash }



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/services/rails_image_post_solution/openai_vision_service.rb', line 15

def moderate_image(attachment)
  # Skip if OpenAI API key is not configured
  return safe_result unless @client

  # Get image URL (generate temporary URL)
  image_url = get_image_url(attachment)
  return safe_result unless image_url

  # Call OpenAI Vision API
  response = call_vision_api(image_url)

  # Parse response
  parse_response(response)
rescue StandardError => e
  Rails.logger.error "OpenAI Vision API error: #{e.message}"
  safe_result # Fail safe on error (no flag)
end