Packages
llm_composer
0.19.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.3
0.12.2
0.12.0
0.11.2
0.11.1
0.11.0
0.10.0
0.8.0
0.7.0
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
LlmComposer is an Elixir library that facilitates chat interactions with language models, providing tools to handle user messages, generate responses, and execute functions automatically based on model outputs.
Current section
Files
Jump to
Current section
Files
lib/llm_composer/function_call_extractors.ex
defmodule LlmComposer.FunctionCallExtractors do
@moduledoc false
alias LlmComposer.FunctionCall
alias LlmComposer.Helpers
@spec from_tool_calls(map()) :: [FunctionCall.t()] | nil
def from_tool_calls(%{"tool_calls" => tool_calls}) when is_list(tool_calls) do
Enum.map(tool_calls, &build_tool_call/1)
end
def from_tool_calls(_), do: nil
defp build_tool_call(tool_call) do
function_info = tool_call["function"]
%FunctionCall{
id: tool_call["id"],
name: function_info["name"],
arguments: function_info["arguments"],
type: tool_call["type"],
metadata: %{},
result: nil
}
end
@spec from_google_parts(map()) :: [FunctionCall.t()] | nil
def from_google_parts(%{"parts" => parts}) when is_list(parts) do
function_calls =
parts
|> Enum.filter(&Map.has_key?(&1, "functionCall"))
|> Enum.map(fn part ->
function_call = part["functionCall"]
%FunctionCall{
id: function_call["name"],
name: function_call["name"],
arguments: Helpers.json_engine().encode!(function_call["args"] || %{}),
type: "function",
metadata: %{},
result: nil
}
end)
case function_calls do
[] -> nil
calls -> calls
end
end
def from_google_parts(_), do: nil
@spec from_bedrock_content(list()) :: [FunctionCall.t()] | nil
def from_bedrock_content(content) when is_list(content) do
calls =
content
|> Enum.filter(&Map.has_key?(&1, "toolUse"))
|> Enum.map(fn %{"toolUse" => tool_use} ->
%FunctionCall{
id: tool_use["toolUseId"],
name: tool_use["name"],
arguments: Helpers.json_engine().encode!(tool_use["input"] || %{}),
type: "tool_use",
metadata: %{},
result: nil
}
end)
case calls do
[] -> nil
list -> list
end
end
def from_bedrock_content(_), do: nil
end