Packages
openai_ex
0.9.21
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/chat_completions.ex
defmodule OpenaiEx.Chat.Completions do
@moduledoc """
This module provides an implementation of the OpenAI chat completions API. The API reference can be found at https://platform.openai.com/docs/api-reference/chat/completions.
"""
alias OpenaiEx.{Http, HttpSse}
@api_fields [
:messages,
:model,
:audio,
:frequency_penalty,
:logit_bias,
:logprobs,
:max_completion_tokens,
:max_tokens,
:metadata,
:modalities,
:n,
:parallel_tool_calls,
:prediction,
:presence_penalty,
:prompt_cache_key,
:prompt_cache_retention,
:reasoning_effort,
:response_format,
:seed,
:service_tier,
:stop,
:store,
:stream_options,
:temperature,
:top_p,
:top_logprobs,
:tools,
:tool_choice,
:user,
:verbosity,
:web_search_options
]
@doc """
Creates a new chat completion request
Example usage:
iex> _request = OpenaiEx.Chat.Completions.new(model: "davinci", messages: [OpenaiEx.ChatMessage.user("Hello, world!")])
%{messages: [%{content: "Hello, world!", role: "user"}], model: "davinci"}
iex> _request = OpenaiEx.Chat.Completions.new(%{model: "davinci", messages: [OpenaiEx.ChatMessage.user("Hello, world!")]})
%{messages: [%{content: "Hello, world!", role: "user"}], model: "davinci"}
"""
def new(args = [_ | _]) do
args |> Enum.into(%{}) |> new()
end
def new(args = %{model: _, messages: _}) do
args |> Map.take(@api_fields)
end
@ep_url "/chat/completions"
defp ep_url(completion_id \\ nil, action \\ nil) do
@ep_url <>
if(is_nil(completion_id), do: "", else: "/#{completion_id}") <>
if(is_nil(action), do: "", else: "/#{action}")
end
@doc """
Calls the chat completion 'create' endpoint.
See https://platform.openai.com/docs/api-reference/chat/completions/create for more information.
"""
def create!(openai = %OpenaiEx{}, chat_completion = %{}, stream: true) do
openai |> create(chat_completion, stream: true) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, chat_completion = %{}, stream: true) do
ep = Map.get(openai, :_ep_path_mapping).(@ep_url)
openai
|> HttpSse.post(ep, json: chat_completion |> Map.take(@api_fields) |> Map.put(:stream, true))
end
def create!(openai = %OpenaiEx{}, chat_completion = %{}) do
openai |> create(chat_completion) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, chat_completion = %{}) do
ep = Map.get(openai, :_ep_path_mapping).(@ep_url)
openai |> Http.post(ep, json: chat_completion |> Map.take(@api_fields))
end
@doc """
Retrieves a stored chat completion by ID.
See https://platform.openai.com/docs/api-reference/chat/get
"""
def retrieve!(openai = %OpenaiEx{}, completion_id: completion_id) do
openai |> retrieve(completion_id: completion_id) |> Http.bang_it!()
end
def retrieve(openai = %OpenaiEx{}, completion_id: completion_id) do
openai |> Http.get(ep_url(completion_id))
end
@doc """
Lists messages from a stored chat completion.
See https://platform.openai.com/docs/api-reference/chat/getMessages
"""
def messages_list!(openai = %OpenaiEx{}, completion_id, opts \\ []) do
openai |> messages_list(completion_id, opts) |> Http.bang_it!()
end
def messages_list(openai = %OpenaiEx{}, completion_id, opts \\ []) do
params = opts |> Enum.into(%{}) |> Map.take(OpenaiEx.list_query_fields())
openai |> Http.get(ep_url(completion_id, "messages"), params)
end
@doc """
Lists stored Chat Completions.
See https://platform.openai.com/docs/api-reference/chat/list
"""
def list!(openai = %OpenaiEx{}, opts \\ []) do
openai |> list(opts) |> Http.bang_it!()
end
def list(openai = %OpenaiEx{}, opts \\ []) do
p = opts |> Enum.into(%{}) |> Map.take(OpenaiEx.list_query_fields() ++ [:metadata, :model])
openai |> Http.get(ep_url(), p)
end
@doc """
Updates a stored chat completion.
See https://platform.openai.com/docs/api-reference/chat/update
"""
def update!(openai = %OpenaiEx{}, completion_id: completion_id, metadata: metadata) do
openai |> update(completion_id: completion_id, metadata: metadata) |> Http.bang_it!()
end
def update(openai = %OpenaiEx{}, completion_id: completion_id, metadata: metadata) do
openai |> Http.post(ep_url(completion_id), json: %{metadata: metadata})
end
@doc """
Deletes a stored chat completion.
See https://platform.openai.com/docs/api-reference/chat/delete
"""
def delete!(openai = %OpenaiEx{}, completion_id: completion_id) do
openai |> delete(completion_id: completion_id) |> Http.bang_it!()
end
def delete(openai = %OpenaiEx{}, completion_id: completion_id) do
openai |> Http.delete(ep_url(completion_id))
end
end