Packages
openai_ex
0.8.5
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_message.ex
defmodule OpenaiEx.ChatMessage do
@moduledoc """
This module provides an elixir map wrapper around the OpenAI message JSON
object which is used in the chat completions and assistants APIs.
"""
@map_fields [
:content,
:role,
:name,
:tool_call_id
]
defp new(args = [_ | _]), do: args |> Enum.into(%{}) |> new()
defp new(params = %{}) do
params
|> Map.take(@map_fields)
|> Enum.filter(fn {_, v} -> !is_nil(v) end)
|> Enum.into(%{})
end
@doc """
Create a `ChatMessage` map with role `system`.
Example usage:
iex> _message = OpenaiEx.ChatMessage.system("Hello, world!")
%{content: "Hello, world!", role: "system"}
"""
def system(content), do: new(role: "system", content: content)
@doc """
Create a `ChatMessage` map with role `user`.
Example usage:
iex> _message = OpenaiEx.ChatMessage.user("Hello, world!")
%{content: "Hello, world!", role: "user"}
"""
def user(content), do: new(role: "user", content: content)
@doc """
Create a `ChatMessage` map with role `assistant`.
Example usage:
iex> _message = OpenaiEx.ChatMessage.assistant("Hello, world!")
%{content: "Hello, world!", role: "assistant"}
"""
def assistant(content), do: new(role: "assistant", content: content)
@doc """
Create a `ChatMessage` map with role `function`.
Example usage:
iex> _message = OpenaiEx.ChatMessage.tool("call_sjflkje", "greet", "Hello, world!")
%{content: "Hello, world!", role: "tool", name: "greet", tool_call_id: "call_sjflkje"}
"""
def tool(tool_call_id, name, content),
do: new(role: "tool", tool_call_id: tool_call_id, content: content, name: name)
end