Class: LLM::OpenAI::Images

Inherits:
Object
  • Object
show all
Defined in:
lib/llm/providers/openai/images.rb

Overview

The LLM::OpenAI::Images class provides an interface for OpenAI's images API. OpenAI supports multiple response formats: temporary URLs, or binary strings encoded in base64. The default is to return base64-encoded image data.

Examples:

Temporary URLs

#!/usr/bin/env ruby
require "llm"
require "open-uri"
require "fileutils"

llm = LLM.openai(key: ENV["KEY"])
res = llm.images.create prompt: "A dog on a rocket to the moon",
                        response_format: "url"
FileUtils.mv OpenURI.open_uri(res.urls[0]).path,
             "rocket.png"

Binary strings

#!/usr/bin/env ruby
require "llm"

llm = LLM.openai(key: ENV["KEY"])
res = llm.images.create prompt: "A dog on a rocket to the moon",
                        response_format: "b64_json"
IO.copy_stream res.images[0], "rocket.png"

Direct Known Subclasses

XAI::Images

Instance Method Summary collapse

Constructor Details

#initialize(provider) ⇒ LLM::OpenAI::Responses

Returns a new Images object

Parameters:



35
36
37
# File 'lib/llm/providers/openai/images.rb', line 35

def initialize(provider)
  @provider = provider
end

Instance Method Details

#create(prompt:, model: "dall-e-3", response_format: "b64_json", **params) ⇒ LLM::Response

Create an image

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.images.create prompt: "A dog on a rocket to the moon"
IO.copy_stream res.images[0], "rocket.png"

Parameters:

  • prompt (String)

    The prompt

  • model (String) (defaults to: "dall-e-3")

    The model to use

  • response_format (String) (defaults to: "b64_json")

    The response format ("b64_json" or "url")

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



52
53
54
55
56
57
58
59
# File 'lib/llm/providers/openai/images.rb', line 52

def create(prompt:, model: "dall-e-3", response_format: "b64_json", **params)
  req = Net::HTTP::Post.new("/v1/images/generations", headers)
  req.body = LLM.json.dump({prompt:, n: 1, model:, response_format:}.merge!(params))
  res, span, tracer = execute(request: req, operation: "request")
  res = ResponseAdapter.adapt(res, type: :image)
  tracer.on_request_finish(operation: "request", model:, res:, span:)
  res
end

#create_variation(image:, model: "dall-e-2", response_format: "b64_json", **params) ⇒ LLM::Response

Create image variations

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.images.create_variation(image: "/images/hat.png", n: 5)
res.images.each.with_index do |image, index|
  IO.copy_stream image, "variation#{index}.png"
end

Parameters:

  • image (File)

    The image to create variations from

  • model (String) (defaults to: "dall-e-2")

    The model to use

  • response_format (String) (defaults to: "b64_json")

    The response format ("b64_json" or "url")

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/llm/providers/openai/images.rb', line 76

def create_variation(image:, model: "dall-e-2", response_format: "b64_json", **params)
  image = LLM.File(image)
  multi = LLM::Multipart.new(params.merge!(image:, model:, response_format:))
  req = Net::HTTP::Post.new("/v1/images/variations", headers)
  req["content-type"] = multi.content_type
  set_body_stream(req, multi.body)
  res, span, tracer = execute(request: req, operation: "request")
  res = ResponseAdapter.adapt(res, type: :image)
  tracer.on_request_finish(operation: "request", model:, res:, span:)
  res
end

#edit(image:, prompt:, model: "dall-e-2", response_format: "b64_json", **params) ⇒ LLM::Response

Edit an image

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.images.edit(image: "/images/hat.png", prompt: "A cat wearing this hat")
IO.copy_stream res.images[0], "hatoncat.png"

Parameters:

  • image (File)

    The image to edit

  • prompt (String)

    The prompt

  • model (String) (defaults to: "dall-e-2")

    The model to use

  • response_format (String) (defaults to: "b64_json")

    The response format ("b64_json" or "url")

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/llm/providers/openai/images.rb', line 102

def edit(image:, prompt:, model: "dall-e-2", response_format: "b64_json", **params)
  image = LLM.File(image)
  multi = LLM::Multipart.new(params.merge!(image:, prompt:, model:, response_format:))
  req = Net::HTTP::Post.new("/v1/images/edits", headers)
  req["content-type"] = multi.content_type
  set_body_stream(req, multi.body)
  res, span, tracer = execute(request: req, operation: "request")
  res = ResponseAdapter.adapt(res, type: :image)
  tracer.on_request_finish(operation: "request", model:, res:, span:)
  res
end