diff --git a/.changeset/flat-candles-count.md b/.changeset/flat-candles-count.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a6468473d602d7a5022f7fc30190cf2e40b1399
--- /dev/null
+++ b/.changeset/flat-candles-count.md
@@ -0,0 +1,5 @@
+---
+"@llamaindex/anthropic": patch
+---
+
+Stream thinking tokens
diff --git a/examples/anthropic/thinking.ts b/examples/anthropic/thinking.ts
index 3901a4eafb2f1ff1754d8f0cbace977b26b68a9f..cc72ba662009a9eb468db912a6b85d29b6b69390 100644
--- a/examples/anthropic/thinking.ts
+++ b/examples/anthropic/thinking.ts
@@ -2,7 +2,6 @@ import { Anthropic } from "@llamaindex/anthropic";
 
 (async () => {
   const anthropic = new Anthropic({
-    apiKey: process.env.ANTHROPIC_API_KEY,
     model: "claude-3-7-sonnet",
     maxTokens: 20000,
     additionalChatOptions: {
@@ -20,6 +19,14 @@ import { Anthropic } from "@llamaindex/anthropic";
           "Are there an infinite number of prime numbers such that n mod 4 == 3?",
       },
     ],
+    stream: true,
   });
-  console.log(result.message);
+  console.log("Thinking...");
+  for await (const chunk of result) {
+    if (chunk.delta) {
+      process.stdout.write(chunk.delta);
+    } else if (chunk.options?.thinking) {
+      process.stdout.write(chunk.options.thinking);
+    }
+  }
 })();
diff --git a/packages/providers/anthropic/src/llm.ts b/packages/providers/anthropic/src/llm.ts
index 0cd80a1832082b9f5813c09cd329bd90a8970ee2..98a468104ad993bd7b91ebc2a1be1d90e766db6c 100644
--- a/packages/providers/anthropic/src/llm.ts
+++ b/packages/providers/anthropic/src/llm.ts
@@ -133,6 +133,7 @@ export type AnthropicAdditionalChatOptions = Pick<
 >;
 export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
   cache_control?: BetaCacheControlEphemeral | null;
+  thinking?: string | undefined;
 };
 
 export class Anthropic extends ToolCallLLM<
@@ -504,20 +505,26 @@ export class Anthropic extends ToolCallLLM<
 
     let idx_counter: number = 0;
     for await (const part of stream) {
-      const content =
-        part.type === "content_block_delta"
-          ? part.delta.type === "text_delta"
-            ? part.delta.text
-            : part.delta
+      const textContent =
+        part.type === "content_block_delta" && part.delta.type === "text_delta"
+          ? part.delta.text
           : undefined;
 
-      if (typeof content !== "string") continue;
+      const thinking =
+        part.type === "content_block_delta" &&
+        part.delta.type === "thinking_delta"
+          ? part.delta.thinking
+          : undefined;
+
+      if (!textContent && !thinking) continue;
 
       idx_counter++;
       yield {
         raw: part,
-        delta: content,
-        options: {},
+        delta: textContent ?? "",
+        options: {
+          thinking: thinking,
+        },
       };
     }
     return;