Class: ImageGeneration::GeminiService
- Inherits:
-
Object
- Object
- ImageGeneration::GeminiService
- Defined in:
- app/services/image_generation/gemini_service.rb
Overview
Internal: Gemini generateContent REST API client for image-to-image generation
with reference images. Not intended for direct use — call
+ImageGeneration::Service#generate+ instead.
This exists as a separate class because RubyLLM.paint does not support
passing inline reference images. The Gemini multimodal generateContent
endpoint does, via base64-encoded +inline_data+ parts.
Error classes here are re-raised as +ImageGeneration::Service::Error+
variants by the calling service.
Defined Under Namespace
Classes: AuthenticationError, ContentPolicyError, Error, NoImageReturnedError, Result
Constant Summary collapse
- BASE_URL =
'https://generativelanguage.googleapis.com'
Instance Method Summary collapse
- #generate_with_references(prompt, reference_images, aspect_ratio, image_size) ⇒ Object
-
#initialize(api_key:, model:) ⇒ GeminiService
constructor
A new instance of GeminiService.
Constructor Details
#initialize(api_key:, model:) ⇒ GeminiService
Returns a new instance of GeminiService.
23 24 25 26 27 28 |
# File 'app/services/image_generation/gemini_service.rb', line 23 def initialize(api_key:, model:) raise AuthenticationError, 'Gemini API key not configured' if api_key.blank? @api_key = api_key @model = model end |
Instance Method Details
#generate_with_references(prompt, reference_images, aspect_ratio, image_size) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/services/image_generation/gemini_service.rb', line 45 def generate_with_references(prompt, reference_images, aspect_ratio, image_size) parts = build_parts(prompt, reference_images) body = build_request_body(parts, aspect_ratio, image_size) response = call_api(body) jpeg = extract_image_data(response) usage = extract_usage(response) Result.new( jpeg_data: jpeg, input_tokens: usage[:input_tokens], output_tokens: usage[:output_tokens] ) end |