Current section
Files
Jump to
Current section
Files
lib/asm/message.ex
defmodule ASM.Message do
@moduledoc """
Conversation-layer payload variants.
"""
alias ASM.Content
defmodule Assistant do
@moduledoc """
Assistant-authored message composed of one or more content blocks.
"""
@enforce_keys [:content]
defstruct [:content, :model, metadata: %{}]
@type t :: %__MODULE__{content: [Content.t()], model: String.t() | nil, metadata: map()}
end
defmodule User do
@moduledoc """
User-authored message composed of one or more content blocks.
"""
@enforce_keys [:content]
defstruct [:content]
@type t :: %__MODULE__{content: [Content.t()]}
end
defmodule ToolUse do
@moduledoc """
Request from the model to execute a tool.
"""
@enforce_keys [:tool_name, :tool_id, :input]
defstruct [:tool_name, :tool_id, :input]
@type t :: %__MODULE__{tool_name: String.t(), tool_id: String.t(), input: map()}
end
defmodule ToolResult do
@moduledoc """
Result returned to the model for a previously requested tool call.
"""
@enforce_keys [:tool_id, :content]
defstruct [:tool_id, :content, is_error: false]
@type t :: %__MODULE__{tool_id: String.t(), content: term(), is_error: boolean()}
end
defmodule Result do
@moduledoc """
Terminal metadata describing why a run completed.
"""
@enforce_keys [:stop_reason]
defstruct [:stop_reason, usage: %{}, duration_ms: nil, metadata: %{}]
@type t :: %__MODULE__{
stop_reason: atom() | String.t(),
usage: map(),
duration_ms: non_neg_integer() | nil,
metadata: map()
}
end
defmodule Partial do
@moduledoc """
Incremental text or thinking delta emitted during streaming.
"""
@enforce_keys [:content_type, :delta]
defstruct [:content_type, :delta]
@type content_type :: :text | :thinking
@type t :: %__MODULE__{content_type: content_type(), delta: String.t()}
end
defmodule Error do
@moduledoc """
Structured error message emitted by the provider/runtime.
"""
@enforce_keys [:severity, :message, :kind]
defstruct [:severity, :message, :kind]
@type severity :: :fatal | :error | :warning
@type t :: %__MODULE__{severity: severity(), message: String.t(), kind: atom()}
end
defmodule System do
@moduledoc """
System-level initialization payloads.
"""
@enforce_keys [:init_data]
defstruct [:init_data]
@type t :: %__MODULE__{init_data: map()}
end
defmodule Thinking do
@moduledoc """
Provider thinking payload emitted as a top-level message.
"""
@enforce_keys [:thinking]
defstruct [:thinking, :signature]
@type t :: %__MODULE__{thinking: String.t(), signature: String.t() | nil}
end
defmodule Raw do
@moduledoc """
Provider-native message event preserved in normalized form.
"""
@enforce_keys [:provider, :type, :data]
defstruct [:provider, :type, :data]
@type t :: %__MODULE__{provider: atom(), type: String.t(), data: map()}
end
@type t ::
Assistant.t()
| User.t()
| ToolUse.t()
| ToolResult.t()
| Result.t()
| Partial.t()
| Error.t()
| System.t()
| Thinking.t()
| Raw.t()
end