Packages
llm_composer
0.16.2
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/message.ex
defmodule LlmComposer.Message do
@moduledoc """
Module that represents an arbitrary message for any LLM.
## Fields
- `:type` — the role of the message sender (e.g. `:user`, `:assistant`, `:system`, `:tool_result`).
- `:content` — the text or structured content of the message.
- `:reasoning` — optional plain-text reasoning string returned by reasoning models.
Primarily used with OpenRouter: when an assistant message is included in a follow-up
request, this field is forwarded so the model can continue from where it left off.
- `:reasoning_details` — optional list of reasoning detail objects (maps) returned by
reasoning models. Use this instead of (or alongside) `:reasoning` when the provider
returns structured reasoning blocks (e.g. encrypted or summarised thinking blocks).
Like `:reasoning`, this field is forwarded by the OpenRouter provider on resend.
- `:metadata` — arbitrary map for provider-specific data (tool calls, original raw
response, etc.).
"""
@type t :: %__MODULE__{
type: binary() | atom(),
content: binary() | list() | nil,
reasoning: binary() | nil,
reasoning_details: list() | nil,
metadata: map()
}
@enforce_keys [:type]
defstruct [:type, :content, :reasoning, :reasoning_details, :metadata]
@doc """
Creates a new message struct with a given type and content.
"""
@spec new(type :: binary() | atom(), content :: binary() | list() | nil, metadata :: map()) ::
t()
def new(type, content, metadata \\ %{})
when is_binary(type) or is_atom(type) do
%__MODULE__{type: type, content: content, metadata: metadata}
end
end