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 temporary URLs.

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"
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"

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", **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"
res.urls.each { print _1, "\n" }

Parameters:

  • prompt (String)

    The prompt

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

    The model to use

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



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

def create(prompt:, model: "dall-e-3", **params)
  req = Net::HTTP::Post.new("/v1/images/generations", headers)
  req.body = JSON.dump({prompt:, n: 1, model:}.merge!(params))
  res = execute(request: req)
  LLM::Response.new(res).extend(LLM::OpenAI::Response::Image)
end

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

Create image variations

Examples:

llm = LLM.openai(key: ENV["KEY"])
res = llm.images.create_variation(image: "/images/hat.png", n: 5)
p res.urls

Parameters:

  • image (File)

    The image to create variations from

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

    The model to use

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



70
71
72
73
74
75
76
77
78
# File 'lib/llm/providers/openai/images.rb', line 70

def create_variation(image:, model: "dall-e-2", **params)
  image = LLM.File(image)
  multi = LLM::Multipart.new(params.merge!(image:, model:))
  req = Net::HTTP::Post.new("/v1/images/variations", headers)
  req["content-type"] = multi.content_type
  set_body_stream(req, multi.body)
  res = execute(request: req)
  LLM::Response.new(res).extend(LLM::OpenAI::Response::Image)
end

#edit(image:, prompt:, model: "dall-e-2", **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")
p res.urls

Parameters:

  • image (File)

    The image to edit

  • prompt (String)

    The prompt

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

    The model to use

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



93
94
95
96
97
98
99
100
101
# File 'lib/llm/providers/openai/images.rb', line 93

def edit(image:, prompt:, model: "dall-e-2", **params)
  image = LLM.File(image)
  multi = LLM::Multipart.new(params.merge!(image:, prompt:, model:))
  req = Net::HTTP::Post.new("/v1/images/edits", headers)
  req["content-type"] = multi.content_type
  set_body_stream(req, multi.body)
  res = execute(request: req)
  LLM::Response.new(res).extend(LLM::OpenAI::Response::Image)
end