Current section
Files
Jump to
Current section
Files
lib/ai/messages.ex
defmodule AI.Messages do
@moduledoc """
Message helpers for tool call flows.
"""
@doc """
Injects a system message if a system string is provided.
"""
def to_provider_messages(messages, system) do
if is_nil(system) do
messages
else
[%{role: "system", content: system} | messages]
end
end
def append_tool_calls(messages, []), do: messages
@doc """
Appends tool call parts as an assistant message.
"""
def append_tool_calls(messages, tool_calls) do
messages ++ [%{role: "assistant", content: Enum.map(tool_calls, &tool_call_part/1)}]
end
def append_tool_results(messages, []), do: messages
@doc """
Appends tool results as a tool role message.
"""
def append_tool_results(messages, tool_results) do
messages ++ [%{role: "tool", content: Enum.map(tool_results, &tool_result_part/1)}]
end
defp tool_call_part(call) do
%{type: "tool_call", id: call.id, name: call.name, input: call.input}
end
defp tool_result_part(result) do
%{
type: "tool_result",
id: result.id,
name: result.name,
output: result.output,
is_error?: result.is_error?
}
end
end