Packages
openai_ex
0.6.4
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/threads.ex
defmodule OpenaiEx.Beta.Threads do
@moduledoc """
This module provides an implementation of the OpenAI threads API. The API reference can be found at https://platform.openai.com/docs/api-reference/threads.
"""
@api_fields [
:messages,
:tool_resources,
:metadata
]
defp ep_url(thread_id \\ nil) do
"/threads" <> if is_nil(thread_id), do: "", else: "/#{thread_id}"
end
@doc """
Creates a new threads request with the given arguments.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the threads request.
## Returns
A map containing the fields of the threads request.
"""
def new(args = [_ | _]) do
args |> Enum.into(%{}) |> new()
end
def new(args = %{}) do
args |> Map.take(@api_fields)
end
@doc """
Calls the thread create endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `params`: A map containing the fields of the thread create request.
## Returns
A map containing the fields of the created thread object.
https://platform.openai.com/docs/api-reference/threads/createThread
"""
def create(openai = %OpenaiEx{}, params = %{} \\ %{}) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.post(ep_url(), json: params |> Map.take(@api_fields))
end
@doc """
Calls the thread retrieve endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `thread_id`: The ID of the thread to retrieve.
## Returns
A map containing the fields of the specificied thread object.
https://platform.openai.com/docs/api-reference/threads/getThread
"""
def retrieve(openai = %OpenaiEx{}, thread_id) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.get(ep_url(thread_id))
end
@doc """
Calls the thread update endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `thread_id`: The ID of the thread to update.
- `params`: The thread update request, as a map with keys corresponding to the API fields.
## Returns
A map containing the fields of the modified thread.
https://platform.openai.com/docs/api-reference/threads/modifyThread
"""
def update(openai = %OpenaiEx{}, thread_id, params = %{metadata: _metadata}) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.post(ep_url(thread_id), json: params |> Map.take([:thread_id, :metadata]))
end
@doc """
Calls the thread delete endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `params`: A map containing the fields of the thread delete request.
## Returns
A map containing the fields of the thread delete response.
https://platform.openai.com/docs/api-reference/threads/deleteThread
"""
def delete(openai = %OpenaiEx{}, thread_id) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.delete(ep_url(thread_id))
end
# Not (yet) part of the documented API, but the endpoint exists.
@doc false
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