Packages
openai_ex
0.9.16
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.
"""
alias OpenaiEx.Http
@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
"""
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.
https://platform.openai.com/docs/api-reference/threads/createThread
"""
def create!(openai = %OpenaiEx{}, params = %{} \\ %{}) do
openai |> create(params) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, params = %{} \\ %{}) do
json = params |> Map.take(@api_fields)
openai |> OpenaiEx.with_assistants_beta() |> Http.post(ep_url(), json: json)
end
@doc """
Calls the thread retrieve endpoint.
https://platform.openai.com/docs/api-reference/threads/getThread
"""
def retrieve!(openai = %OpenaiEx{}, thread_id) do
openai |> retrieve(thread_id) |> Http.bang_it!()
end
def retrieve(openai = %OpenaiEx{}, thread_id) do
openai |> OpenaiEx.with_assistants_beta() |> Http.get(ep_url(thread_id))
end
@doc """
Calls the thread update endpoint.
https://platform.openai.com/docs/api-reference/threads/modifyThread
"""
def update!(openai = %OpenaiEx{}, thread_id, params = %{metadata: _metadata}) do
openai |> update(thread_id, params) |> Http.bang_it!()
end
def update(openai = %OpenaiEx{}, thread_id, params = %{metadata: _metadata}) do
json = params |> Map.take([:thread_id, :metadata])
openai |> OpenaiEx.with_assistants_beta() |> Http.post(ep_url(thread_id), json: json)
end
@doc """
Calls the thread delete endpoint.
https://platform.openai.com/docs/api-reference/threads/deleteThread
"""
def delete!(openai = %OpenaiEx{}, thread_id) do
openai |> delete(thread_id) |> Http.bang_it!()
end
def delete(openai = %OpenaiEx{}, thread_id) do
openai |> OpenaiEx.with_assistants_beta() |> 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 |> list(params) |> Http.bang_it!()
end
def list(openai = %OpenaiEx{}, params = %{} \\ %{}) do
qry_params = params |> Map.take(OpenaiEx.list_query_fields())
openai |> OpenaiEx.with_assistants_beta() |> Http.get(ep_url(), qry_params)
end
end