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
- .build_image_from_url(image_url, model) ⇒ Object
- .images_url ⇒ Object
- .parse_image_response(response, model:) ⇒ Object
- .render_image_payload(prompt, model:, size:) ⇒ Object
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_url ⇒ Object
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
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 = data.dig('choices', 0, 'message') unless &.key?('images') && ['images']&.any? raise Error.new(nil, 'Unexpected response format from OpenRouter image generation API') end image_data = ['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 |