@ai-sdk/anthropic 3.0.85 → 3.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/anthropic",
3
- "version": "3.0.85",
3
+ "version": "3.0.87",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -36,15 +36,15 @@
36
36
  }
37
37
  },
38
38
  "dependencies": {
39
- "@ai-sdk/provider": "3.0.10",
40
- "@ai-sdk/provider-utils": "4.0.30"
39
+ "@ai-sdk/provider": "3.0.11",
40
+ "@ai-sdk/provider-utils": "4.0.31"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "20.17.24",
44
44
  "tsup": "^8",
45
45
  "typescript": "5.8.3",
46
46
  "zod": "3.25.76",
47
- "@ai-sdk/test-server": "1.0.5",
47
+ "@ai-sdk/test-server": "1.0.6",
48
48
  "@vercel/ai-tsconfig": "0.0.0"
49
49
  },
50
50
  "peerDependencies": {
@@ -1132,7 +1132,10 @@ export async function convertToAnthropicMessagesPrompt({
1132
1132
  }
1133
1133
  }
1134
1134
 
1135
- messages.push({ role: 'assistant', content: anthropicContent });
1135
+ messages.push({
1136
+ role: 'assistant',
1137
+ content: moveToolUseBlocksToEnd(anthropicContent),
1138
+ });
1136
1139
 
1137
1140
  break;
1138
1141
  }
@@ -1218,3 +1221,31 @@ function groupIntoBlocks(
1218
1221
 
1219
1222
  return blocks;
1220
1223
  }
1224
+
1225
+ function moveToolUseBlocksToEnd(
1226
+ content: AnthropicAssistantMessage['content'],
1227
+ ): AnthropicAssistantMessage['content'] {
1228
+ const result: AnthropicAssistantMessage['content'] = [];
1229
+ let segment: AnthropicAssistantMessage['content'] = [];
1230
+
1231
+ function flushSegment() {
1232
+ result.push(
1233
+ ...segment.filter(part => part.type !== 'tool_use'),
1234
+ ...segment.filter(part => part.type === 'tool_use'),
1235
+ );
1236
+ segment = [];
1237
+ }
1238
+
1239
+ for (const part of content) {
1240
+ if (part.type === 'thinking' || part.type === 'redacted_thinking') {
1241
+ flushSegment();
1242
+ result.push(part);
1243
+ } else {
1244
+ segment.push(part);
1245
+ }
1246
+ }
1247
+
1248
+ flushSegment();
1249
+
1250
+ return result;
1251
+ }