ClaudeCode.Message.PartialAssistantMessage (ClaudeCode v0.16.0)

View Source

Represents a partial assistant message from the Claude CLI when using partial message streaming.

Partial assistant messages are emitted when include_partial_messages: true is enabled. They provide real-time updates as Claude generates responses, enabling character-by-character streaming for LiveView applications.

This type corresponds to SDKPartialAssistantMessage in the TypeScript SDK.

Event Types

  • message_start - Signals the beginning of a new message
  • content_block_start - Signals the beginning of a new content block (text or tool_use)
  • content_block_delta - Contains incremental content updates (text chunks, tool input JSON)
  • content_block_stop - Signals the end of a content block
  • message_delta - Contains message-level updates (stop_reason, usage)
  • message_stop - Signals the end of the message

Example Usage

ClaudeCode.query_stream(session, "Hello", include_partial_messages: true)
|> ClaudeCode.Stream.text_deltas()
|> Enum.each(&IO.write/1)

JSON Format

{
  "type": "stream_event",
  "event": {
    "type": "content_block_delta",
    "index": 0,
    "delta": {"type": "text_delta", "text": "Hello"}
  },
  "session_id": "...",
  "parent_tool_use_id": null,
  "uuid": "..."
}

Summary

Functions

Gets the content block index for delta events.

Extracts partial JSON from an input_json_delta event.

Extracts text from a text_delta event.

Extracts thinking from a thinking_delta event.

Checks if this partial message is an input JSON delta (for tool use).

Creates a new PartialAssistantMessage from JSON data.

Type guard to check if a value is a PartialAssistantMessage.

Checks if this partial message is a text delta.

Checks if this partial message is a thinking delta.

Types

delta()

@type delta() ::
  %{type: :text_delta, text: String.t()}
  | %{type: :input_json_delta, partial_json: String.t()}
  | %{type: :thinking_delta, thinking: String.t()}
  | map()

event()

@type event() ::
  %{type: event_type()}
  | %{
      type: :content_block_start,
      index: non_neg_integer(),
      content_block: map()
    }
  | %{type: :content_block_delta, index: non_neg_integer(), delta: delta()}
  | %{type: :content_block_stop, index: non_neg_integer()}
  | %{type: :message_start, message: map()}
  | %{type: :message_delta, delta: map(), usage: map()}
  | %{type: :message_stop}

event_type()

@type event_type() ::
  :message_start
  | :content_block_start
  | :content_block_delta
  | :content_block_stop
  | :message_delta
  | :message_stop

t()

@type t() :: %ClaudeCode.Message.PartialAssistantMessage{
  event: event(),
  parent_tool_use_id: String.t() | nil,
  session_id: String.t(),
  type: :stream_event,
  uuid: String.t() | nil
}

Functions

event_type(partial_assistant_message)

@spec event_type(t()) :: event_type()

Gets the event type.

get_index(arg1)

@spec get_index(t()) :: non_neg_integer() | nil

Gets the content block index for delta events.

Returns nil for non-content block events.

get_partial_json(arg1)

@spec get_partial_json(t()) :: String.t() | nil

Extracts partial JSON from an input_json_delta event.

Returns nil if not an input_json_delta event.

get_text(arg1)

@spec get_text(t()) :: String.t() | nil

Extracts text from a text_delta event.

Returns nil if not a text delta event.

get_thinking(arg1)

@spec get_thinking(t()) :: String.t() | nil

Extracts thinking from a thinking_delta event.

Returns nil if not a thinking delta event.

input_json_delta?(arg1)

@spec input_json_delta?(t()) :: boolean()

Checks if this partial message is an input JSON delta (for tool use).

new(json)

@spec new(map()) :: {:ok, t()} | {:error, atom() | tuple()}

Creates a new PartialAssistantMessage from JSON data.

Examples

iex> PartialAssistantMessage.new(%{
...>   "type" => "stream_event",
...>   "event" => %{"type" => "content_block_delta", "index" => 0, "delta" => %{"type" => "text_delta", "text" => "Hi"}},
...>   "session_id" => "abc123"
...> })
{:ok, %PartialAssistantMessage{type: :stream_event, event: %{type: :content_block_delta, ...}, ...}}

partial_assistant_message?(arg1)

@spec partial_assistant_message?(any()) :: boolean()

Type guard to check if a value is a PartialAssistantMessage.

text_delta?(arg1)

@spec text_delta?(t()) :: boolean()

Checks if this partial message is a text delta.

thinking_delta?(arg1)

@spec thinking_delta?(t()) :: boolean()

Checks if this partial message is a thinking delta.