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's GPT Image models return base64-encoded image data.

Examples:

#!/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"
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:



21
22
23
# File 'lib/llm/providers/openai/images.rb', line 21

def initialize(provider)
  @provider = provider
end

Instance Method Details

#create(prompt:, model: "gpt-image-1-mini", output_format: "png", **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: "gpt-image-1-mini")

    The model to use

  • output_format (String) (defaults to: "png")

    The output format ("png", "webp", or "jpeg")

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



38
39
40
41
42
43
44
45
# File 'lib/llm/providers/openai/images.rb', line 38

def create(prompt:, model: "gpt-image-1-mini", output_format: "png", **params)
  req = LLM::Transport::Request.post(path("/images/generations"), headers)
  req.body = LLM.json.dump({prompt:, n: 1, model:, output_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

#edit(image:, prompt:, model: "gpt-image-1-mini", output_format: "png", **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: "gpt-image-1-mini")

    The model to use

  • output_format (String) (defaults to: "png")

    The output format ("png", "webp", or "jpeg")

  • params (Hash)

    Other parameters (see OpenAI docs)

Returns:

See Also:



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/llm/providers/openai/images.rb', line 61

def edit(image:, prompt:, model: "gpt-image-1-mini", output_format: "png", **params)
  image = LLM.File(image)
  multi = LLM::Multipart.new(params.merge!(image:, prompt:, model:, output_format:))
  req = LLM::Transport::Request.post(path("/images/edits"), headers)
  req["content-type"] = multi.content_type
  transport.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