ai 6.0.214 → 6.0.216

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.
@@ -152,7 +152,7 @@ function detectMediaType({
152
152
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
153
153
 
154
154
  // src/version.ts
155
- var VERSION = true ? "6.0.214" : "0.0.0-test";
155
+ var VERSION = true ? "6.0.216" : "0.0.0-test";
156
156
 
157
157
  // src/util/download/download.ts
158
158
  var download = async ({
@@ -132,7 +132,7 @@ import {
132
132
  } from "@ai-sdk/provider-utils";
133
133
 
134
134
  // src/version.ts
135
- var VERSION = true ? "6.0.214" : "0.0.0-test";
135
+ var VERSION = true ? "6.0.216" : "0.0.0-test";
136
136
 
137
137
  // src/util/download/download.ts
138
138
  var download = async ({
@@ -291,7 +291,7 @@ for (const file of result.files) {
291
291
  | Provider | Model | Support sizes (`width x height`) or aspect ratios (`width : height`) |
292
292
  | ------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
293
293
  | [xAI Grok](/providers/ai-sdk-providers/xai#image-models) | `grok-imagine-image` | `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `2:3`, `2:1`, `1:2`, `19.5:9`, `9:19.5`, `20:9`, `9:20`, `auto` |
294
- | [OpenAI](/providers/ai-sdk-providers/openai#image-models) | `gpt-image-1` | 1024x1024, 1536x1024, 1024x1536 |
294
+ | [OpenAI](/providers/ai-sdk-providers/openai#image-models) | `gpt-image-2` | 1024x1024, 1536x1024, 1024x1536 |
295
295
  | [OpenAI](/providers/ai-sdk-providers/openai#image-models) | `dall-e-3` | 1024x1024, 1792x1024, 1024x1792 |
296
296
  | [OpenAI](/providers/ai-sdk-providers/openai#image-models) | `dall-e-2` | 256x256, 512x512, 1024x1024 |
297
297
  | [Amazon Bedrock](/providers/ai-sdk-providers/amazon-bedrock#image-models) | `amazon.nova-canvas-v1:0` | 320-4096 (multiples of 16), 1:4 to 4:1, max 4.2M pixels |
@@ -13,7 +13,7 @@ import { generateImage, wrapImageModel } from 'ai';
13
13
  import { openai } from '@ai-sdk/openai';
14
14
 
15
15
  const model = wrapImageModel({
16
- model: openai.image('gpt-image-1'),
16
+ model: openai.image('gpt-image-2'),
17
17
  middleware: yourImageModelMiddleware,
18
18
  });
19
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai",
3
- "version": "6.0.214",
3
+ "version": "6.0.216",
4
4
  "description": "AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@opentelemetry/api": "^1.9.0",
48
- "@ai-sdk/gateway": "3.0.139",
48
+ "@ai-sdk/gateway": "3.0.140",
49
49
  "@ai-sdk/provider": "3.0.12",
50
50
  "@ai-sdk/provider-utils": "4.0.33"
51
51
  },
@@ -100,6 +100,44 @@ export function pruneMessages({
100
100
  }
101
101
  }
102
102
 
103
+ // Build global maps from tool call id and approval id to tool name.
104
+ // These must be global (not per-message) because a `tool-approval-response`
105
+ // lives in a separate `tool` message from its `tool-approval-request`
106
+ // (assistant message), so the tool name of a response can only be resolved
107
+ // by looking across messages. Resolving names per-message left responses
108
+ // unresolved, which caused them to be kept while their request was pruned,
109
+ // producing orphaned approval responses.
110
+ const toolCallIdToToolName = new Map<string, string>();
111
+ for (const message of messages) {
112
+ if (
113
+ (message.role === 'assistant' || message.role === 'tool') &&
114
+ typeof message.content !== 'string'
115
+ ) {
116
+ for (const part of message.content) {
117
+ if (part.type === 'tool-call' || part.type === 'tool-result') {
118
+ toolCallIdToToolName.set(part.toolCallId, part.toolName);
119
+ }
120
+ }
121
+ }
122
+ }
123
+
124
+ const approvalIdToToolName = new Map<string, string>();
125
+ for (const message of messages) {
126
+ if (
127
+ (message.role === 'assistant' || message.role === 'tool') &&
128
+ typeof message.content !== 'string'
129
+ ) {
130
+ for (const part of message.content) {
131
+ if (part.type === 'tool-approval-request') {
132
+ const toolName = toolCallIdToToolName.get(part.toolCallId);
133
+ if (toolName != null) {
134
+ approvalIdToToolName.set(part.approvalId, toolName);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+
103
141
  messages = messages.map((message, messageIndex) => {
104
142
  if (
105
143
  (message.role !== 'assistant' && message.role !== 'tool') ||
@@ -110,9 +148,6 @@ export function pruneMessages({
110
148
  return message;
111
149
  }
112
150
 
113
- const toolCallIdToToolName: Record<string, string> = {};
114
- const approvalIdToToolName: Record<string, string> = {};
115
-
116
151
  return {
117
152
  ...message,
118
153
  content: message.content.filter(part => {
@@ -126,14 +161,6 @@ export function pruneMessages({
126
161
  return true;
127
162
  }
128
163
 
129
- // track tool calls and approvals:
130
- if (part.type === 'tool-call') {
131
- toolCallIdToToolName[part.toolCallId] = part.toolName;
132
- } else if (part.type === 'tool-approval-request') {
133
- approvalIdToToolName[part.approvalId] =
134
- toolCallIdToToolName[part.toolCallId];
135
- }
136
-
137
164
  // keep parts that are associated with a tool call or approval that needs to be kept:
138
165
  if (
139
166
  ((part.type === 'tool-call' || part.type === 'tool-result') &&
@@ -146,13 +173,15 @@ export function pruneMessages({
146
173
  }
147
174
 
148
175
  // keep parts that are not associated with a tool that should be removed:
176
+ const partToolName =
177
+ part.type === 'tool-call' || part.type === 'tool-result'
178
+ ? part.toolName
179
+ : approvalIdToToolName.get(part.approvalId);
180
+
149
181
  return (
150
182
  toolCall.tools != null &&
151
- !toolCall.tools.includes(
152
- part.type === 'tool-call' || part.type === 'tool-result'
153
- ? part.toolName
154
- : approvalIdToToolName[part.approvalId],
155
- )
183
+ partToolName != null &&
184
+ !toolCall.tools.includes(partToolName)
156
185
  );
157
186
  }),
158
187
  } as AssistantModelMessage | ToolModelMessage;