Packages
openai_ex
0.5.7
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/file.ex
defmodule OpenaiEx.File 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.
## API Fields
The following fields can be used as parameters for various endpoints of the API:
- `:file`
- `:purpose`
- `:file_id`
"""
@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.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the file upload request.
## Returns
A map containing the fields of the file upload request.
The `:file` and `:purpose` fields are required.
"""
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 with the given arguments.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the file retrieve / deletion / retrieve_content request.
## Returns
A map containing the fields of the file retrieve / deletion / retrieve_content request.
The `:file_id` field is required.
"""
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 |> OpenaiEx.Http.get(ep_url())
end
@doc """
Calls the file upload endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `upload`: A map containing the fields of the file upload request.
## Returns
A map containing the fields of the file upload response.
https://platform.openai.com/docs/api-reference/files/upload
"""
def create(openai = %OpenaiEx{}, upload) do
openai
|> OpenaiEx.Http.post(ep_url(),
multipart: upload |> OpenaiEx.Http.to_multi_part_form_data(file_fields())
)
end
@doc """
Calls the file delete endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `file_id`: The ID of the file to delete.
## Returns
A map containing the fields of the file delete response.
https://platform.openai.com/docs/api-reference/files/delete
"""
def delete(openai = %OpenaiEx{}, file_id) do
openai
|> OpenaiEx.Http.delete(ep_url(file_id))
end
@doc """
Calls the file retrieve endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `file_id`: The ID of the file to retrieve.
## Returns
A map containing the fields of the file retrieve response.
https://platform.openai.com/docs/api-reference/files/retrieve
"""
def retrieve(openai = %OpenaiEx{}, file_id) do
openai
|> OpenaiEx.Http.get(ep_url(file_id))
end
@doc """
Calls the file retrieve_content endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `file_id`: The ID of the file to retrieve the content of.
## Returns
A map containing the fields of the file retrieve_content response.
https://platform.openai.com/docs/api-reference/files/retrieve-content
"""
def download(openai = %OpenaiEx{}, file_id) do
openai
|> OpenaiEx.Http.get_no_decode(ep_url(file_id, "content"))
end
@doc false
def file_fields() do
[:file]
end
end