Packages
openai_ex
0.9.17
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
"""
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.
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.
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.
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