Packages
openai_ex
0.5.0
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/message.ex
defmodule OpenaiEx.Beta.Thread.Message 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.
## API Fields
The following fields can be used as parameters for the messages API:
- `:role`
- `:content`
- `:file_ids`
- `:metadata`
"""
@api_fields [
:role,
:content,
:file_ids,
: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 = %{thread_id: _, message_id: _}) 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 = %{role: _role, content: _content}
) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.post(ep_url(thread_id), json: params |> Map.take(@api_fields))
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 specificied message object.
https://platform.openai.com/docs/api-reference/messages/getMessage
"""
def retrieve(openai = %OpenaiEx{}, %{thread_id: thread_id, message_id: message_id}) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.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{},
%{thread_id: thread_id, message_id: message_id, metadata: metadata}
) do
openai
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.post(ep_url(thread_id, message_id), json: %{metadata: metadata})
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
|> OpenaiEx.with_assistants_beta()
|> OpenaiEx.Http.get(ep_url(thread_id), params |> Map.take(OpenaiEx.list_query_fields()))
end
end