defmodule OpenAI.Images do
@moduledoc """
Given a prompt and/or an input image, the model will generate a new image.
Related guide: [Image generation](https://platform.openai.com/docs/guides/images)
https://platform.openai.com/docs/api-reference/images
"""
alias OpenAI.Client
@type create_params :: %{
required(:prompt) => String.t(),
optional(:n) => integer(),
optional(:size) => String.t(),
optional(:response_format) => String.t(),
optional(:user) => String.t()
}
@doc """
Creates an image given a prompt.
"""
@spec create(Client.t(), create_params(), Keyword.t()) :: Client.result()
def create(client, params, opts \\ []) do
client
|> Client.post("/v1/images/generations", params, opts)
|> Client.handle_response(opts)
end
@type create_edit_params :: %{
required(:image) => String.t(),
optional(:mask) => String.t(),
required(:prompt) => String.t(),
optional(:n) => integer(),
optional(:size) => String.t(),
optional(:response_format) => String.t(),
optional(:user) => String.t()
}
@doc """
Creates an edited or extended image given an original image and a prompt.
"""
@spec create_edit(Client.t(), create_edit_params(), Keyword.t()) :: Client.result()
def create_edit(client, params, opts \\ []) do
client
|> Client.post("/v1/images/edits", params, opts)
|> Client.handle_response(opts)
end
@type create_variation_params :: %{
required(:image) => String.t(),
optional(:n) => integer(),
optional(:size) => String.t(),
optional(:response_format) => String.t(),
optional(:user) => String.t()
}
@doc """
Creates a variation of a given image.
"""
@spec create_variation(Client.t(), create_variation_params(), Keyword.t()) :: Client.result()
def create_variation(client, params, opts \\ []) do
client
|> Client.post("/v1/images/variations", params, opts)
|> Client.handle_response(opts)
end
end