Module: RubyLLM::Providers::OpenRouter::Images

Included in:
RubyLLM::Providers::OpenRouter
Defined in:
lib/ruby_llm/providers/openrouter/images.rb

Overview

Image generation methods for the OpenRouter API integration. OpenRouter uses the chat completions endpoint for image generation instead of a dedicated images endpoint.

Class Method Summary collapse

Class Method Details

.build_image_from_url(image_url, model) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/ruby_llm/providers/openrouter/images.rb', line 46

def build_image_from_url(image_url, model)
  if image_url.start_with?('data:')
    # Parse data URL format: data:image/png;base64,<data>
    match = image_url.match(/^data:([^;]+);base64,(.+)$/)
    raise Error.new(nil, 'Invalid data URL format from OpenRouter') unless match

    Image.new(
      data: match[2],
      mime_type: match[1],
      model_id: model
    )
  else
    # Regular URL
    Image.new(
      url: image_url,
      mime_type: 'image/png',
      model_id: model
    )
  end
end

.images_urlObject



12
13
14
# File 'lib/ruby_llm/providers/openrouter/images.rb', line 12

def images_url
  'chat/completions'
end

.parse_image_response(response, model:) ⇒ Object

Raises:



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ruby_llm/providers/openrouter/images.rb', line 30

def parse_image_response(response, model:)
  data = response.body
  message = data.dig('choices', 0, 'message')

  unless message&.key?('images') && message['images']&.any?
    raise Error.new(nil, 'Unexpected response format from OpenRouter image generation API')
  end

  image_data = message['images'].first
  image_url = image_data.dig('image_url', 'url') || image_data['url']

  raise Error.new(nil, 'No image URL found in OpenRouter response') unless image_url

  build_image_from_url(image_url, model)
end

.render_image_payload(prompt, model:, size:) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ruby_llm/providers/openrouter/images.rb', line 16

def render_image_payload(prompt, model:, size:)
  RubyLLM.logger.debug { "Ignoring size #{size}. OpenRouter image generation does not support size parameter." }
  {
    model: model,
    messages: [
      {
        role: 'user',
        content: prompt
      }
    ],
    modalities: %w[image text]
  }
end