lib/openai/audio.ex

defmodule OpenAI.Audio do
  @moduledoc """
  Learn how to turn audio into text.

  Related guide: [Speech to text](https://platform.openai.com/docs/guides/speech-to-text)

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

  alias OpenAI.Client

  @type create_transcription_params :: %{
          required(:file) => String.t(),
          required(:model) => String.t(),
          optional(:prompt) => String.t(),
          optional(:response_format) => String.t(),
          optional(:temperature) => float(),
          optional(:language) => String.t()
        }

  @doc """
  Transcribes audio into the input language.
  """
  @spec create_transcription(Client.t(), create_transcription_params(), Keyword.t()) ::
          Client.result()
  def create_transcription(client, params, opts \\ []) do
    client
    |> Client.post("/v1/audio/transcriptions", params, opts)
    |> Client.handle_response(opts)
  end

  @type create_translation_params :: %{
          required(:file) => String.t(),
          required(:model) => String.t(),
          optional(:prompt) => String.t(),
          optional(:response_format) => String.t(),
          optional(:temperature) => float()
        }

  @doc """
  Translates audio into English.
  """
  @spec create_translation(Client.t(), create_translation_params(), Keyword.t()) ::
          Client.result()
  def create_translation(client, params, opts \\ []) do
    client
    |> Client.post("/v1/audio/translations", params, opts)
    |> Client.handle_response(opts)
  end
end