Packages
openai_ex
0.9.20
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Community maintained Elixir library for OpenAI API
Current section
Files
Jump to
Current section
Files
lib/openai_ex/files.ex
defmodule OpenaiEx.Files do
@moduledoc """
This module provides an implementation of the OpenAI files API. The API reference can be found at https://platform.openai.com/docs/api-reference/files.
"""
alias OpenaiEx.Http
@api_fields [
:file,
:purpose,
:file_id
]
defp ep_url(file_id \\ nil, action \\ nil) do
"/files" <>
if(is_nil(file_id), do: "", else: "/#{file_id}") <>
if(is_nil(action), do: "", else: "/#{action}")
end
@doc """
Creates a new file upload request with the given arguments.
"""
def new_upload(args = [_ | _]) do
args |> Enum.into(%{}) |> new_upload()
end
def new_upload(args = %{file: _, purpose: _}) do
args |> Map.take(@api_fields)
end
@doc """
Creates a new file retrieve / deletion / retrieve_content request
"""
def new(args = [_ | _]) do
args |> Enum.into(%{}) |> new()
end
def new(args = %{file_id: _}) do
args |> Map.take(@api_fields)
end
@doc """
Lists the files that belong to the user's organization.
https://platform.openai.com/docs/api-reference/files/list
"""
def list!(openai = %OpenaiEx{}) do
openai |> list() |> Http.bang_it!()
end
def list(openai = %OpenaiEx{}) do
openai |> Http.get(ep_url())
end
@doc """
Calls the file upload endpoint.
https://platform.openai.com/docs/api-reference/files/upload
"""
def create!(openai = %OpenaiEx{}, upload) do
openai |> create(upload) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, upload) do
multipart = upload |> Http.to_multi_part_form_data(file_fields())
openai |> Http.post(ep_url(), multipart: multipart)
end
@doc """
Calls the file delete endpoint.
https://platform.openai.com/docs/api-reference/files/delete
"""
def delete!(openai = %OpenaiEx{}, file_id) do
openai |> delete(file_id) |> Http.bang_it!()
end
def delete(openai = %OpenaiEx{}, file_id) do
openai |> Http.delete(ep_url(file_id))
end
@doc """
Calls the file retrieve endpoint.
https://platform.openai.com/docs/api-reference/files/retrieve
"""
def retrieve!(openai = %OpenaiEx{}, file_id) do
openai |> retrieve(file_id) |> Http.bang_it!()
end
def retrieve(openai = %OpenaiEx{}, file_id) do
openai |> Http.get(ep_url(file_id))
end
@doc """
Calls the file retrieve_content endpoint.
https://platform.openai.com/docs/api-reference/files/retrieve-content
"""
def content!(openai = %OpenaiEx{}, file_id) do
openai |> content(file_id) |> Http.bang_it!()
end
def content(openai = %OpenaiEx{}, file_id) do
openai |> Http.get_no_decode(ep_url(file_id, "content"))
end
@doc false
def file_fields() do
[:file]
end
end