Class: NitroIntelligence::Client::Handlers::ImageHandler

Inherits:
BaseHandler
  • Object
show all
Defined in:
lib/nitro_intelligence/client/handlers/image_handler.rb

Constant Summary collapse

ALLOWED_EXTRA_PARAMETERS =
OpenAI::Models::Chat::CompletionCreateParams.fields.keys.uniq.freeze

Constants inherited from BaseHandler

BaseHandler::MODALITY_HEADER, BaseHandler::REQUESTED_MODEL_HEADER

Instance Method Summary collapse

Methods inherited from BaseHandler

#initialize

Constructor Details

This class inherits a constructor from NitroIntelligence::Client::Handlers::BaseHandler

Instance Method Details

#create(message: "", target_image: nil, reference_images: [], parameters: {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/nitro_intelligence/client/handlers/image_handler.rb', line 11

def create(message: "", target_image: nil, reference_images: [], parameters: {})
  image_generation = build_image_generation(message:, target_image:, reference_images:, parameters:)

  validate_and_resolve!(parameters, image_generation)

  chat_completion = perform_request(parameters:)

  image_generation.parse_file(chat_completion)
  image_generation
end

#perform_request(parameters: {}) ⇒ Object



22
23
24
25
# File 'lib/nitro_intelligence/client/handlers/image_handler.rb', line 22

def perform_request(parameters: {})
  add_request_headers(parameters, MODALITY_HEADER => "image", REQUESTED_MODEL_HEADER => parameters[:model])
  @client.chat.completions.create(**parameters.slice(*ALLOWED_EXTRA_PARAMETERS))
end

#validate_and_resolve!(parameters, image_generation) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/nitro_intelligence/client/handlers/image_handler.rb', line 27

def validate_and_resolve!(parameters, image_generation)
  default_parameters = {
    image_generation:,
    metadata: {},
    messages: image_generation.messages,
    model: image_generation.config.model,
    request_options: {
      extra_body: {
        image_config: {
          aspect_ratio: image_generation.config.aspect_ratio,
          image_size: image_generation.config.resolution,
        },
      },
    },
  }
  parameters.replace(default_parameters.merge(parameters))
  Client.validate_model(parameters[:model])
end