Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · api

handling-stop-reasons changedbuild-with-claude/handling-stop-reasons

Nearest release: v2.1.307, published 4 hours after this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.

Recorded here
Lines+50added
Lines−70removed
From line 109 where the diff opens
First seen 14 Aug 2026 this site's first read of the page
Recorded edits19to this page, all time

The whole hunk

from line 109, old and new numbered
/
lines
from line 109
109109 {
110110 Model = Model.ClaudeOpus5_5,
111111 MaxTokens = 1024,
112 Messages = [new() { Role = Role.User, Content = "Hello!" }]
112 Messages = [new UserMessageParam { Content = "Hello!" }]
113113 });
114114 
115115 if (response.StopReason == "end_turn")
from line 323
323323 // INCORRECT: Adding text immediately after tool_result
324324 List<MessageParam> messages =
325325 [
326 new() { Role = Role.User, Content = "Calculate the sum of 1234 and 5678" },
327 new()
326 new UserMessageParam { Content = "Calculate the sum of 1234 and 5678" },
327 new AssistantMessageParam
328328 {
329 Role = Role.Assistant,
330329 Content = new List<ContentBlockParam>
331330 {
332331 new ToolUseBlockParam { ID = "toolu_123", Name = "calculator", Input = input }
333332 }
334333 },
335 new()
334 new UserMessageParam
336335 {
337 Role = Role.User,
338336 Content = new List<ContentBlockParam>
339337 {
340338 new ToolResultBlockParam { ToolUseID = "toolu_123", Content = "6912" },
from line 344
346344 // CORRECT: Send tool results directly without additional text
347345 messages =
348346 [
349 new() { Role = Role.User, Content = "Calculate the sum of 1234 and 5678" },
350 new()
347 new UserMessageParam { Content = "Calculate the sum of 1234 and 5678" },
348 new AssistantMessageParam
351349 {
352 Role = Role.Assistant,
353350 Content = new List<ContentBlockParam>
354351 {
355352 new ToolUseBlockParam { ID = "toolu_123", Name = "calculator", Input = input }
356353 }
357354 },
358 new()
355 new UserMessageParam
359356 {
360 Role = Role.User,
361357 // Just the tool_result, no additional text
362358 Content = new List<ContentBlockParam>
363359 {
from line 404
408404 
409405 // INCORRECT: Adding text immediately after tool_result
410406 List<MessageParam> messages = List.of(
411 MessageParam.builder().role(MessageParam.Role.USER)
412 .content("Calculate the sum of 1234 and 5678").build(),
413 MessageParam.builder().role(MessageParam.Role.ASSISTANT)
414 .contentOfBlockParams(List.of(ContentBlockParam.ofToolUse(toolUse))).build(),
415 MessageParam.builder().role(MessageParam.Role.USER)
416 .contentOfBlockParams(List.of(
417 ContentBlockParam.ofToolResult(
418 ToolResultBlockParam.builder().toolUseId("toolu_123").content("6912").build()),
419 // Don't add text after tool_result
420 ContentBlockParam.ofText(TextBlockParam.builder().text("Here's the result").build())
421 )).build()
407 MessageParam.ofUser("Calculate the sum of 1234 and 5678"),
408 MessageParam.ofAssistantOfContentBlockParams(List.of(ContentBlockParam.ofToolUse(toolUse))),
409 MessageParam.ofUserOfContentBlockParams(List.of(
410 ContentBlockParam.ofToolResult(
411 ToolResultBlockParam.builder().toolUseId("toolu_123").content("6912").build()),
412 // Don't add text after tool_result
413 ContentBlockParam.ofText(TextBlockParam.builder().text("Here's the result").build())
414 ))
422415 );
423416 
424417 // CORRECT: Send tool results directly without additional text
425418 messages = List.of(
426 MessageParam.builder().role(MessageParam.Role.USER)
427 .content("Calculate the sum of 1234 and 5678").build(),
428 MessageParam.builder().role(MessageParam.Role.ASSISTANT)
429 .contentOfBlockParams(List.of(ContentBlockParam.ofToolUse(toolUse))).build(),
419 MessageParam.ofUser("Calculate the sum of 1234 and 5678"),
420 MessageParam.ofAssistantOfContentBlockParams(List.of(ContentBlockParam.ofToolUse(toolUse))),
430421 // Just the tool_result, no additional text
431 MessageParam.builder().role(MessageParam.Role.USER)
432 .contentOfBlockParams(List.of(
433 ContentBlockParam.ofToolResult(
434 ToolResultBlockParam.builder().toolUseId("toolu_123").content("6912").build())
435 )).build()
422 MessageParam.ofUserOfContentBlockParams(List.of(
423 ContentBlockParam.ofToolResult(
424 ToolResultBlockParam.builder().toolUseId("toolu_123").content("6912").build())
425 ))
436426 );
437427 ```
438428 
from line 593
603593 if (response.StopReason == "end_turn" && response.Content.Count == 0)
604594 {
605595 // CORRECT: Add a continuation prompt in a NEW user message
606 messages.Add(new() { Role = Role.User, Content = "Please continue" });
596 messages.Add(new UserMessageParam { Content = "Please continue" });
607597 
608598 response = await client.Messages.Create(new MessageCreateParams
609599 {
from line 652
662652 if (isEndTurn && response.content().isEmpty()) {
663653 // CORRECT: Add a continuation prompt in a NEW user message
664654 List<MessageParam> extended = new ArrayList<>(messages);
665 extended.add(MessageParam.builder()
666 .role(MessageParam.Role.USER)
667 .content("Please continue")
668 .build());
655 extended.add(MessageParam.ofUser("Please continue"));
669656 
670657 response = client.messages().create(
671658 MessageCreateParams.builder()
from line 788
801788 {
802789 Model = Model.ClaudeOpus5_5,
803790 MaxTokens = 10,
804 Messages = [new() { Role = Role.User, Content = "Explain quantum physics" }]
791 Messages = [new UserMessageParam { Content = "Explain quantum physics" }]
805792 });
806793 
807794 if (response.StopReason == "max_tokens")
from line 1098
11111098 Model = Model.ClaudeOpus5_5,
11121099 MaxTokens = 1024,
11131100 StopSequences = ["END", "STOP"],
1114 Messages = [new() { Role = Role.User, Content = "Generate text until you say END" }]
1101 Messages = [new UserMessageParam { Content = "Generate text until you say END" }]
11151102 });
11161103 
11171104 if (response.StopReason == "stop_sequence")
from line 1319
13321319 Model = Model.ClaudeOpus5_5,
13331320 MaxTokens = 1024,
13341321 Tools = [weatherTool],
1335 Messages = [new() { Role = Role.User, Content = "What is the weather in San Francisco?" }]
1322 Messages = [new UserMessageParam { Content = "What is the weather in San Francisco?" }]
13361323 });
13371324 
13381325 if (response.StopReason == "tool_use")
from line 1600
16131600 
16141601 ```csharp C#
16151602 List<ToolUnion> tools = [new ToolUnion(new WebSearchTool20250305())];
1616 MessageParam userMessage = new() { Role = Role.User, Content = "Search for latest AI news" };
1603 MessageParam userMessage = new UserMessageParam { Content = "Search for latest AI news" };
16171604 
16181605 var response = await client.Messages.Create(new MessageCreateParams
16191606 {
from line 1621
16341621 Messages =
16351622 [
16361623 userMessage,
1637 new()
1624 new AssistantMessageParam
16381625 {
1639 Role = Role.Assistant,
16401626 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList()
16411627 }
16421628 ]
from line 1802
18161802 {
18171803 Model = Model.ClaudeOpus5_5,
18181804 MaxTokens = 1024,
1819 Messages = [new() { Role = Role.User, Content = "[Unsafe request]" }]
1805 Messages = [new UserMessageParam { Content = "[Unsafe request]" }]
18201806 });
18211807 
18221808 if (response.StopReason == "refusal")
from line 1961
19751961 {
19761962 Model = Model.ClaudeOpus5_5,
19771963 MaxTokens = 20000,
1978 Messages = [new() { Role = Role.User, Content = "Large input that uses most of context window..." }]
1964 Messages = [new BetaUserMessageParam { Content = "Large input that uses most of context window..." }]
19791965 });
19801966 
19811967 if (response.StopReason?.Value() == BetaStopReason.ModelContextWindowExceeded)
from line 2396
24102396 List<ToolUnion> tools,
24112397 int maxContinuations = 5)
24122398 {
2413 List<MessageParam> messages = [new() { Role = Role.User, Content = userQuery }];
2399 List<MessageParam> messages = [new UserMessageParam { Content = userQuery }];
24142400 Message response = null!;
24152401 
24162402 for (var i = 0; i < maxContinuations; i++)
from line 2418
24322418 // pause_turn: replace the full message list to maintain alternating roles
24332419 messages =
24342420 [
2435 new() { Role = Role.User, Content = userQuery },
2436 new()
2421 new UserMessageParam { Content = userQuery },
2422 new AssistantMessageParam
24372423 {
2438 Role = Role.Assistant,
24392424 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList()
24402425 }
24412426 ];
from line 2674
26892674 {
26902675 Model = Model.ClaudeOpus5_5,
26912676 MaxTokens = 1024,
2692 Messages = [new() { Role = Role.User, Content = "Hello!" }]
2677 Messages = [new UserMessageParam { Content = "Hello!" }]
26932678 });
26942679 
26952680 // Handle successful response with stop_reason
from line 2864
28792864 {
28802865 Model = Model.ClaudeOpus5_5,
28812866 MaxTokens = 1024,
2882 Messages = [new() { Role = Role.User, Content = "Hello!" }]
2867 Messages = [new UserMessageParam { Content = "Hello!" }]
28832868 };
28842869 
28852870 await foreach (var streamEvent in client.Messages.CreateStreaming(parameters))
from line 3025
30403025 string userQuery,
30413026 List<ToolUnion> tools)
30423027 {
3043 List<MessageParam> messages = [new() { Role = Role.User, Content = userQuery }];
3028 List<MessageParam> messages = [new UserMessageParam { Content = userQuery }];
30443029 
30453030 while (true)
30463031 {
from line 3041
30563041 {
30573042 // Execute tools and continue
30583043 var toolResults = ExecuteTools(response.Content);
3059 messages.Add(new()
3044 messages.Add(new AssistantMessageParam
30603045 {
3061 Role = Role.Assistant,
30623046 Content = response.Content.Select(block => new ContentBlockParam(block.Json)).ToList()
30633047 });
3064 messages.Add(new() { Role = Role.User, Content = toolResults });
3048 messages.Add(new UserMessageParam { Content = toolResults });
30653049 }
30663050 else
30673051 {
from line 3099
31153099 List<Tool> tools
31163100 ) {
31173101 List<MessageParam> messages = new ArrayList<>();
3118 messages.add(MessageParam.builder().role(MessageParam.Role.USER).content(userQuery).build());
3102 messages.add(MessageParam.ofUser(userQuery));
31193103 
31203104 while (true) {
31213105 MessageCreateParams.Builder params = MessageCreateParams.builder()
from line 3118
31343118 // Execute tools and continue
31353119 List<ToolResultBlockParam> toolResults = executeTools(response.content());
31363120 messages.add(response.toParam());
3137 messages.add(MessageParam.builder()
3138 .role(MessageParam.Role.USER)
3139 .contentOfBlockParams(toolResults.stream().map(ContentBlockParam::ofToolResult).toList())
3140 .build());
3121 messages.add(MessageParam.ofUserOfContentBlockParams(
3122 toolResults.stream().map(ContentBlockParam::ofToolResult).toList()));
31413123 }
31423124 }
31433125 ```
from line 3242
32603242 ```csharp C#
32613243 static async Task<string> GetCompleteResponse(AnthropicClient client, string prompt, int maxAttempts = 3)
32623244 {
3263 List<MessageParam> messages = [new() { Role = Role.User, Content = prompt }];
3245 List<MessageParam> messages = [new UserMessageParam { Content = prompt }];
32643246 var fullResponse = "";
32653247 
32663248 for (var i = 0; i < maxAttempts; i++)
from line 3271
32893271 // Continue from where it left off
32903272 messages =
32913273 [
3292 new() { Role = Role.User, Content = prompt },
3293 new() { Role = Role.Assistant, Content = fullResponse },
3294 new() { Role = Role.User, Content = "Please continue from where you left off." }
3274 new UserMessageParam { Content = prompt },
3275 new AssistantMessageParam { Content = fullResponse },
3276 new UserMessageParam { Content = "Please continue from where you left off." }
32953277 ];
32963278 }
32973279 
from line 3321
33393321 
33403322 ```java Java
33413323 static String getCompleteResponse(AnthropicClient client, String prompt, int maxAttempts) {
3342 List<MessageParam> messages = List.of(
3343 MessageParam.builder().role(MessageParam.Role.USER).content(prompt).build()
3344 );
3324 List<MessageParam> messages = List.of(MessageParam.ofUser(prompt));
33453325 StringBuilder fullResponse = new StringBuilder();
33463326 
33473327 for (int i = 0; i < maxAttempts; i++) {
from line 3344
33643344 
33653345 // Continue from where it left off
33663346 messages = List.of(
3367 MessageParam.builder().role(MessageParam.Role.USER).content(prompt).build(),
3368 MessageParam.builder().role(MessageParam.Role.ASSISTANT).content(fullResponse.toString()).build(),
3369 MessageParam.builder().role(MessageParam.Role.USER).content("Please continue from where you left off.").build()
3347 MessageParam.ofUser(prompt),
3348 MessageParam.ofAssistant(fullResponse.toString()),
3349 MessageParam.ofUser("Please continue from where you left off.")
33703350 );
33713351 }
33723352 
from line 3489
35093489 {
35103490 Model = Model.ClaudeOpus5_5,
35113491 MaxTokens = 20000,
3512 Messages = [new() { Role = Role.User, Content = prompt }]
3492 Messages = [new BetaUserMessageParam { Content = prompt }]
35133493 });
35143494 
35153495 var tokens = response.Usage.OutputTokens;
Feedback