Packages
openai_ex
0.5.6
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/beta/assistant.ex
defmodule OpenaiEx.Beta.Assistant do
@moduledoc """
This module provides an implementation of the OpenAI assistants API. The API reference can be found at https://platform.openai.com/docs/api-reference/assistants.
## API Fields
The following fields can be used as parameters when creating a new assistant:
- `:model`
- `:name`
- `:description`
- `:instructions`
- `:tools`
- `:file_ids`
- `:metadata`
"""
@api_fields [
:model,
:name,
:description,
:instructions,
:tools,
:file_ids,
:metadata
]
defp ep_url(assistant_id \\ nil) do
"/assistants" <> if is_nil(assistant_id), do: "", else: "/#{assistant_id}"
end
@doc """
Creates a new assistants request with the given arguments.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the assistant request.
## Returns
A map containing the fields of the assistant request.
The `:model` field is required.
Example usage:
iex> _request = OpenaiEx.Beta.Assistant.new(model: "gpt-4-turbo")
%{model: "gpt-4-turbo"}
"""
def new(args = [_ | _]) do
args |> Enum.into(%{}) |> new()
end
def new(args = %{model: model}) do
%{
model: model
}
|> Map.merge(args)
|> Map.take(@api_fields)
end
@doc """
Calls the assistant 'create' endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `assistant`: The assistant request, as a map with keys corresponding to the API fields.
## Returns
A map containing the API response.
See https://platform.openai.com/docs/api-reference/assistants/createAssistant for more information.
"""
def create(openai = %OpenaiEx{}, assistant = %{}) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.post(ep_url(), json: assistant |> Map.take(@api_fields))
end
@doc """
Calls the assistant retrieve endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `assistant_id`: The ID of the assistant to retrieve.
## Returns
A map containing the fields of the file retrieve response.
https://platform.openai.com/docs/api-reference/assistants/getAssistant
"""
def retrieve(openai = %OpenaiEx{}, assistant_id) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.get(ep_url(assistant_id))
end
@doc """
Calls the assistant update endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `assistant_id`: The ID of the assistant to update.
- `assistant`: The assistant request, as a map with keys corresponding to the API fields.
## Returns
A map containing the API response.
See https://platform.openai.com/docs/api-reference/assistants/modifyAssistant for more information.
"""
def update(openai = %OpenaiEx{}, assistant_id, assistant = %{}) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.post(ep_url(assistant_id), json: assistant |> Map.take(@api_fields))
end
@doc """
Calls the assistant delete endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `assistant_id`: The ID of the file to delete.
## Returns
A map containing the fields of the assistant delete response.
https://platform.openai.com/docs/api-reference/assistants/deleteAssistant
"""
def delete(openai = %OpenaiEx{}, assistant_id) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.delete(ep_url(assistant_id))
end
@doc """
Creates a new list assistants request with the given arguments.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the list assistants request.
## Returns
A map containing the fields of the list assistants request.
"""
def new_list(args = [_ | _]) do
args |> Enum.into(%{}) |> new_list()
end
def new_list(args = %{}) do
args
|> Map.take(OpenaiEx.list_query_fields())
end
@doc """
Returns a list of assistant objects.
https://platform.openai.com/docs/api-reference/assistants/listAssistants
"""
def list(openai = %OpenaiEx{}, params = %{} \\ %{}) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.get(ep_url(), params |> Map.take(OpenaiEx.list_query_fields()))
end
end