Packages
llm_composer
0.19.5
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/stream_chunk.ex
defmodule LlmComposer.StreamChunk do
@moduledoc """
Normalized representation of a streaming chunk emitted by any provider.
- `:provider` identifies the upstream provider (:open_ai | :open_router | :google | :ollama | :bedrock)
- `:type` categorizes the event (`:text_delta`, `:reasoning_delta`, `:tool_call_delta`, `:usage`, `:done`, `:error`, `:unknown`)
- `:text` is the accumulated text delta (if any)
- `:reasoning` is the accumulated reasoning delta (if any)
- `:reasoning_details` keeps structured reasoning detail fragments when providers emit them
- `:tool_calls` keeps normalized tool/function call fragments
- `:usage` stores the token usage payload when available
- `:cost_info` can surface cost data on the final chunk
- `:metadata` holds provider-specific attributes (finish reason, role, etc.)
- `:raw` retains the original decoded payload for inspection.
"""
alias LlmComposer.CostInfo
alias LlmComposer.FunctionCall
@type usage() ::
%{
input_tokens: non_neg_integer() | nil,
output_tokens: non_neg_integer() | nil,
total_tokens: non_neg_integer() | nil,
cached_tokens: non_neg_integer() | nil,
reasoning_tokens: non_neg_integer() | nil
}
@type t() :: %__MODULE__{
provider: atom(),
type:
:text_delta | :reasoning_delta | :tool_call_delta | :usage | :done | :error | :unknown,
text: String.t() | nil,
reasoning: String.t() | nil,
reasoning_details: list() | nil,
tool_calls: list(FunctionCall.t() | map()) | nil,
usage: usage() | nil,
cost_info: CostInfo.t() | nil,
metadata: map(),
raw: term()
}
defstruct [
:provider,
:type,
:text,
:reasoning,
:reasoning_details,
:tool_calls,
:usage,
:cost_info,
:raw,
metadata: %{}
]
end