Packages
openai_ex
0.8.1
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_messages.ex
defmodule OpenaiEx.Beta.Threads.Messages do
@moduledoc """
This module provides an implementation of the OpenAI messages API. The API
reference can be found at https://platform.openai.com/docs/api-reference/messages.
"""
alias OpenaiEx.Http
@api_fields [
:role,
:content,
:attachments,
:metadata
]
defp ep_url(thread_id, message_id \\ nil) do
"/threads/#{thread_id}/messages" <> if is_nil(message_id), do: "", else: "/#{message_id}"
end
@doc """
Creates a new message request with the given arguments.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the message request.
## Returns
A map containing the fields of the message request.
"""
def new(args = [_ | _]) do
args |> Enum.into(%{}) |> new()
end
def new(args) do
args |> Map.take([:thread_id | [:message_id | @api_fields]])
end
@doc """
Calls the message create endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `params`: A map containing the fields of the message create request.
## Returns
A map containing the fields of the created message object.
https://platform.openai.com/docs/api-reference/messages/createMessage
"""
def create!(openai = %OpenaiEx{}, thread_id, params) do
openai |> create(thread_id, params) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, thread_id, params = %{role: _, content: _}) do
json = params |> Map.take(@api_fields)
openai |> OpenaiEx.with_assistants_beta() |> Http.post(ep_url(thread_id), json: json)
end
@doc """
Calls the message retrieve endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `params`: A map containing the fields of the message retrieve request.
## Returns
A map containing the fields of the specified message object.
https://platform.openai.com/docs/api-reference/messages/getMessage
"""
def retrieve!(openai = %OpenaiEx{}, params = %{thread_id: _, message_id: _}) do
openai |> retrieve(params) |> Http.bang_it!()
end
def retrieve(openai = %OpenaiEx{}, %{thread_id: thread_id, message_id: message_id}) do
openai |> OpenaiEx.with_assistants_beta() |> Http.get(ep_url(thread_id, message_id))
end
@doc """
Calls the message update endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `params`: A map containing the fields of the message update request.
## Returns
A map containing the fields of the message update response.
https://platform.openai.com/docs/api-reference/messages/modifyMessage
"""
def update!(openai = %OpenaiEx{}, params = %{thread_id: _, message_id: _, metadata: _}) do
openai |> update(params) |> Http.bang_it!()
end
def update(openai = %OpenaiEx{}, %{
thread_id: thread_id,
message_id: message_id,
metadata: metadata
}) do
openai
|> OpenaiEx.with_assistants_beta()
|> Http.post(ep_url(thread_id, message_id), json: %{metadata: metadata})
end
def delete!(openai = %OpenaiEx{}, thread_id, message_id) do
openai |> delete(thread_id, message_id) |> Http.bang_it!()
end
def delete(openai = %OpenaiEx{}, thread_id, message_id) do
openai |> OpenaiEx.with_assistants_beta() |> Http.delete(ep_url(thread_id, message_id))
end
@doc """
Lists the messages that belong to the specified thread.
https://platform.openai.com/docs/api-reference/messages/listMessages
"""
def new_list(args = [_ | _]) do
args |> Enum.into(%{}) |> new_list()
end
def new_list(args = %{thread_id: _thread_id}) do
args |> Map.take([:thread_id | OpenaiEx.list_query_fields()])
end
def list!(openai = %OpenaiEx{}, thread_id, params = %{} \\ %{}) do
openai |> list(thread_id, params) |> Http.bang_it!()
end
def list(openai = %OpenaiEx{}, thread_id, params = %{} \\ %{}) do
openai
|> OpenaiEx.with_assistants_beta()
|> Http.get(ep_url(thread_id), params |> Map.take([:run_id | OpenaiEx.list_query_fields()]))
end
end