Packages
openai_ex
0.5.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/chat_completion.ex
defmodule OpenaiEx.ChatCompletion 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.
## API Fields
The following fields can be used as parameters when creating a new chat completion:
- `:messages`
- `:model`
- `:frequency_penalty`
- `:logit_bias`
- `:max_tokens`
- `:n`
- `:presence_penalty`
- `:response_format`
- `:seed`
- `:stop`
- `:temperature`
- `:top_p`
- `:tools`
- `:tool_choice`
- `:user`
"""
@api_fields [
:messages,
:model,
:frequency_penalty,
:logit_bias,
:max_tokens,
:n,
:presence_penalty,
:response_format,
:seed,
:stop,
:temperature,
:top_p,
:tools,
:tool_choice,
:user
]
@doc """
Creates a new chat completion request with the given arguments.
## Arguments
- `args`: A list of key-value pairs, or a map, representing the fields of the chat completion request.
## Returns
A map containing the fields of the chat completion request.
The `:model` and `:messages` fields are required. The `:messages` field should be a list of maps with the `OpenaiEx.ChatMessage` structure.
Example usage:
iex> _request = OpenaiEx.ChatCompletion.new(model: "davinci", messages: [OpenaiEx.ChatMessage.user("Hello, world!")])
%{messages: [%{content: "Hello, world!", role: "user"}], model: "davinci"}
iex> _request = OpenaiEx.ChatCompletion.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"
@doc """
Calls the chat completion 'create' endpoint.
## Arguments
- `openai`: The OpenAI configuration.
- `chat_completion`: The chat completion request, as a map with keys corresponding to the API fields.
## Returns
A map containing the API response.
See https://platform.openai.com/docs/api-reference/chat/completions/create for more information.
"""
def create(openai = %OpenaiEx{}, chat_completion = %{}, stream: true) do
openai
|> OpenaiEx.HttpSse.post(@ep_url,
json: chat_completion |> Map.take(@api_fields) |> Map.put(:stream, true)
)
end
def create(openai = %OpenaiEx{}, chat_completion = %{}) do
openai
|> OpenaiEx.Http.post(@ep_url, json: chat_completion |> Map.take(@api_fields))
end
end