The whole hunk
from line 98, old and new numbered
/
lines
from line 98
9898 )
9999
100100 for block in response.content:
101 if block.type == "thinking":
102 print(f"\nThinking: {block.thinking}")
103 elif block.type == "text":
104 print(f"\nResponse: {block.text}")
101 match block.type:
102 case "thinking":
103 print(f"\nThinking: {block.thinking}")
104 case "text":
105 print(f"\nResponse: {block.text}")
105106 ```
106107
107108 ```typescript TypeScript
from line 124
123124 });
124125
125126 for (const block of response.content) {
126 if (block.type === "thinking") {
127 console.log(`\nThinking: ${block.thinking}`);
128 } else if (block.type === "text") {
129 console.log(`\nResponse: ${block.text}`);
127 switch (block.type) {
128 case "thinking":
129 console.log(`\nThinking: ${block.thinking}`);
130 break;
131 case "text":
132 console.log(`\nResponse: ${block.text}`);
133 break;
130134 }
131135 }
132136 ```
from line 224
220224 ```
221225
222226 ```php PHP
227 use Anthropic\Messages\TextBlock;
228 use Anthropic\Messages\ThinkingBlock;
229
223230 $client = new Client();
224231
225232 $message = $client->messages->create(
from line 242
235242 );
236243
237244 foreach ($message->content as $block) {
238 if ($block->type === 'thinking') {
239 echo "\nThinking: " . $block->thinking;
240 } elseif ($block->type === 'text') {
241 echo "\nResponse: " . $block->text;
245 switch (true) {
246 case $block instanceof ThinkingBlock:
247 echo "\nThinking: " . $block->thinking;
248 break;
249 case $block instanceof TextBlock:
250 echo "\nResponse: " . $block->text;
251 break;
242252 }
243253 }
244254 ```
from line 272
262272 )
263273
264274 message.content.each do |block|
265 case block.type
266 when :thinking
275 case block
276 when Anthropic::Models::ThinkingBlock
267277 puts "\nThinking: #{block.thinking}"
268 when :text
278 when Anthropic::Models::TextBlock
269279 puts "\nResponse: #{block.text}"
270280 end
271281 end
from line 562
552562 ],
553563 ) as stream:
554564 for event in stream:
555 if event.type == "content_block_start":
556 print(f"\nStarting {event.content_block.type} block...")
557 elif event.type == "content_block_delta":
558 if event.delta.type == "thinking_delta":
559 print(event.delta.thinking, end="", flush=True)
560 elif event.delta.type == "text_delta":
561 print(event.delta.text, end="", flush=True)
565 match event.type:
566 case "content_block_start":
567 print(f"\nStarting {event.content_block.type} block...")
568 case "content_block_delta":
569 delta = event.delta
570 match delta.type:
571 case "thinking_delta":
572 print(delta.thinking, end="", flush=True)
573 case "text_delta":
574 print(delta.text, end="", flush=True)
562575 ```
563576
564577 ```typescript TypeScript
from line 585
572585 });
573586
574587 for await (const event of stream) {
575 if (event.type === "content_block_start") {
576 console.log(`\nStarting ${event.content_block.type} block...`);
577 } else if (event.type === "content_block_delta") {
578 if (event.delta.type === "thinking_delta") {
579 process.stdout.write(event.delta.thinking);
580 } else if (event.delta.type === "text_delta") {
581 process.stdout.write(event.delta.text);
582 }
588 switch (event.type) {
589 case "content_block_start":
590 console.log(`\nStarting ${event.content_block.type} block...`);
591 break;
592 case "content_block_delta":
593 switch (event.delta.type) {
594 case "thinking_delta":
595 process.stdout.write(event.delta.thinking);
596 break;
597 case "text_delta":
598 process.stdout.write(event.delta.text);
599 break;
600 }
601 break;
583602 }
584603 }
585604 ```
from line 686
667686
668687 try (var streamResponse = client.messages().createStreaming(params)) {
669688 streamResponse.stream().forEach(event -> {
670 if (event.contentBlockStart().isPresent()) {
671 var startEvent = event.contentBlockStart().get();
672 var block = startEvent.contentBlock();
673 if (block.isThinking()) {
674 IO.println("\nStarting thinking block...");
675 } else if (block.isText()) {
676 IO.println("\nStarting text block...");
689 switch (event.type().value()) {
690 case CONTENT_BLOCK_START -> {
691 var startEvent = event.asContentBlockStart();
692 var block = startEvent.contentBlock();
693 switch (block.type().value()) {
694 case THINKING -> IO.println("\nStarting thinking block...");
695 case TEXT -> IO.println("\nStarting text block...");
696 }
677697 }
678 } else if (event.contentBlockDelta().isPresent()) {
679 var deltaEvent = event.contentBlockDelta().get();
680 deltaEvent.delta().thinking().ifPresent(td ->
681 IO.print(td.thinking())
682 );
683 deltaEvent.delta().text().ifPresent(td ->
684 IO.print(td.text())
685 );
698 case CONTENT_BLOCK_DELTA -> {
699 var deltaEvent = event.asContentBlockDelta();
700 deltaEvent.delta().thinking().ifPresent(td ->
701 IO.print(td.thinking())
702 );
703 deltaEvent.delta().text().ifPresent(td ->
704 IO.print(td.text())
705 );
706 }
686707 }
687708 });
688709 }
from line 711
690711 ```
691712
692713 ```php PHP
714 use Anthropic\Messages\RawContentBlockDeltaEvent;
715 use Anthropic\Messages\RawContentBlockStartEvent;
716 use Anthropic\Messages\TextDelta;
717 use Anthropic\Messages\ThinkingDelta;
718
693719 $client = new Client();
694720
695721 $stream = $client->messages->createStream(
from line 728
702728 );
703729
704730 foreach ($stream as $event) {
705 if ($event->type === 'content_block_start') {
706 echo "\nStarting {$event->contentBlock->type} block...\n";
707 } elseif ($event->type === 'content_block_delta') {
708 if ($event->delta->type === 'thinking_delta') {
709 echo $event->delta->thinking;
710 } elseif ($event->delta->type === 'text_delta') {
711 echo $event->delta->text;
712 }
731 switch (true) {
732 case $event instanceof RawContentBlockStartEvent:
733 echo "\nStarting {$event->contentBlock->type} block...\n";
734 break;
735 case $event instanceof RawContentBlockDeltaEvent:
736 switch (true) {
737 case $event->delta instanceof ThinkingDelta:
738 echo $event->delta->thinking;
739 break;
740 case $event->delta instanceof TextDelta:
741 echo $event->delta->text;
742 break;
743 }
744 break;
713745 }
714746 }
715747 ```
from line 1163
11311163
11321164Each model accepts `max_tokens` up to the ceiling listed here. On the [Message Batches API](https://platform.claude.com/docs/en/build-with-claude/batch-processing#extended-output-beta), the `output-300k-2026-03-24` [beta header](https://platform.claude.com/docs/en/api/beta-headers) raises that ceiling for the models with a batches ceiling listed.
11331165
1134| Model | Max output tokens | Batches beta ceiling |
1135| --------------------- | ----------------- | -------------------- |
1136| Claude Fable 5.1 | 128k | — |
1137| Claude Mythos 5.1 | 128k | — |
1138| Claude Fable 5 | 128k | — |
1139| Claude Mythos 5 | 128k | — |
1140| Claude Mythos Preview | 128k | Not available |
1141| Claude Opus 5 | 128k | 300k |
1142| Claude Opus 4.8 | 128k | 300k |
1143| Claude Opus 4.7 | 128k | 300k |
1144| Claude Sonnet 5 | 128k | 300k |
1145| Claude Opus 4.6 | 128k | 300k |
1146| Claude Sonnet 4.6 | 128k | 300k |
1147| Claude Haiku 4.5 | 64k | Not available |
1148| Claude Sonnet 4.5 | 64k | Not available |
1149| Claude Opus 4.5 | 64k | Not available |
1166| Model | Max output tokens | Batches beta ceiling |
1167| :---------------- | :---------------- | :------------------- |
1168| Claude Fable 5.1 | 128K | — |
1169| Claude Mythos 5.1 | 128K | — |
1170| Claude Fable 5 | 128K | — |
1171| Claude Mythos 5 | 128K | — |
1172| Claude Opus 5 | 128K | 300K |
1173| Claude Opus 4.8 | 128K | 300K |
1174| Claude Opus 4.7 | 128K | 300K |
1175| Claude Opus 4.6 | 128K | 300K |
1176| Claude Opus 4.5 | 64K | Not available |
1177| Claude Sonnet 5 | 128K | 300K |
1178| Claude Sonnet 4.6 | 128K | 300K |
1179| Claude Sonnet 4.5 | 64K | Not available |
1180| Claude Haiku 4.5 | 64K | Not available |
1181
1182[Claude Mythos Preview](https://anthropic.com/glasswing) accepts `max_tokens` up to 128K; the Batches beta ceiling is not available for it.
11501183
11511184See the [models overview](https://platform.claude.com/docs/en/models/overview) for limits on legacy models.
11521185