lib/openai/models.ex

defmodule OpenAI.Models do
  @moduledoc """
  List and describe the various models available in the API. You can refer to
  the [Models](https://platform.openai.com/docs/models) documentation to
  understand what models are available and the differences between them.

  https://platform.openai.com/docs/api-reference/models
  """

  alias OpenAI.Client

  @doc """
  Lists the currently available models, and provides basic information about
  each one such as the owner and availability.
  """
  @spec list(Client.t(), Keyword.t()) :: Client.result()
  def list(client, opts \\ []) do
    client
    |> Client.get("/v1/models", opts)
    |> Client.handle_response(opts)
  end

  @doc """
  Retrieves a model instance, providing basic information about the model such
  as the owner and permissioning.
  """
  @spec retrieve(Client.t(), String.t(), Keyword.t()) :: Client.result()
  def retrieve(client, id, opts \\ []) when is_binary(id) do
    client
    |> Client.get("/v1/models/#{id}", opts)
    |> Client.handle_response(opts)
  end

  @doc """
  Delete a fine-tuned model. You must have the Owner role in your organization.
  """
  @spec delete(Client.t(), String.t(), Keyword.t()) :: Client.result()
  def delete(client, id, opts \\ []) do
    client
    |> Client.delete("/v1/models/#{id}", opts)
    |> Client.handle_response(opts)
  end
end