Packages
claude_code
0.32.2
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/content/thinking_block.ex
defmodule ClaudeCode.Content.ThinkingBlock do
@moduledoc """
Represents a thinking content block within a Claude message.
Thinking blocks contain Claude's extended reasoning, visible when
extended thinking is enabled on supported models.
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :thinking, :signature]
defstruct [:type, :thinking, :signature]
@type t :: %__MODULE__{
type: :thinking,
thinking: String.t(),
signature: String.t()
}
@doc """
Creates a new Thinking content block from JSON data.
## Examples
iex> Thinking.new(%{"type" => "thinking", "thinking" => "Let me reason...", "signature" => "sig_123"})
{:ok, %Thinking{type: :thinking, thinking: "Let me reason...", signature: "sig_123"}}
iex> Thinking.new(%{"type" => "text"})
{:error, :invalid_content_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom() | {:missing_fields, [atom()]}}
def new(%{"type" => "thinking"} = data) do
required = ["thinking", "signature"]
missing = Enum.filter(required, &(not Map.has_key?(data, &1)))
if Enum.empty?(missing) do
content = %__MODULE__{
type: :thinking,
thinking: data["thinking"],
signature: data["signature"]
}
{:ok, content}
else
{:error, {:missing_fields, Enum.map(missing, &String.to_atom/1)}}
end
end
def new(_), do: {:error, :invalid_content_type}
end
defimpl String.Chars, for: ClaudeCode.Content.ThinkingBlock do
def to_string(%{thinking: thinking}), do: thinking
end