ai 5.0.5 → 5.0.7
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/CHANGELOG.md +12 -0
- package/dist/index.d.mts +25 -4
- package/dist/index.d.ts +25 -4
- package/dist/index.js +855 -738
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +842 -721
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -20,31 +20,31 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
20
20
|
// src/index.ts
|
21
21
|
var src_exports = {};
|
22
22
|
__export(src_exports, {
|
23
|
-
AISDKError: () =>
|
24
|
-
APICallError: () =>
|
23
|
+
AISDKError: () => import_provider16.AISDKError,
|
24
|
+
APICallError: () => import_provider16.APICallError,
|
25
25
|
AbstractChat: () => AbstractChat,
|
26
26
|
DefaultChatTransport: () => DefaultChatTransport,
|
27
27
|
DownloadError: () => DownloadError,
|
28
|
-
EmptyResponseBodyError: () =>
|
28
|
+
EmptyResponseBodyError: () => import_provider16.EmptyResponseBodyError,
|
29
29
|
Experimental_Agent: () => Agent,
|
30
30
|
HttpChatTransport: () => HttpChatTransport,
|
31
31
|
InvalidArgumentError: () => InvalidArgumentError,
|
32
32
|
InvalidDataContentError: () => InvalidDataContentError,
|
33
33
|
InvalidMessageRoleError: () => InvalidMessageRoleError,
|
34
|
-
InvalidPromptError: () =>
|
35
|
-
InvalidResponseDataError: () =>
|
34
|
+
InvalidPromptError: () => import_provider16.InvalidPromptError,
|
35
|
+
InvalidResponseDataError: () => import_provider16.InvalidResponseDataError,
|
36
36
|
InvalidStreamPartError: () => InvalidStreamPartError,
|
37
37
|
InvalidToolInputError: () => InvalidToolInputError,
|
38
|
-
JSONParseError: () =>
|
38
|
+
JSONParseError: () => import_provider16.JSONParseError,
|
39
39
|
JsonToSseTransformStream: () => JsonToSseTransformStream,
|
40
|
-
LoadAPIKeyError: () =>
|
40
|
+
LoadAPIKeyError: () => import_provider16.LoadAPIKeyError,
|
41
41
|
MCPClientError: () => MCPClientError,
|
42
42
|
MessageConversionError: () => MessageConversionError,
|
43
|
-
NoContentGeneratedError: () =>
|
43
|
+
NoContentGeneratedError: () => import_provider16.NoContentGeneratedError,
|
44
44
|
NoImageGeneratedError: () => NoImageGeneratedError,
|
45
45
|
NoObjectGeneratedError: () => NoObjectGeneratedError,
|
46
46
|
NoOutputSpecifiedError: () => NoOutputSpecifiedError,
|
47
|
-
NoSuchModelError: () =>
|
47
|
+
NoSuchModelError: () => import_provider16.NoSuchModelError,
|
48
48
|
NoSuchProviderError: () => NoSuchProviderError,
|
49
49
|
NoSuchToolError: () => NoSuchToolError,
|
50
50
|
Output: () => output_exports,
|
@@ -52,9 +52,9 @@ __export(src_exports, {
|
|
52
52
|
SerialJobExecutor: () => SerialJobExecutor,
|
53
53
|
TextStreamChatTransport: () => TextStreamChatTransport,
|
54
54
|
ToolCallRepairError: () => ToolCallRepairError,
|
55
|
-
TypeValidationError: () =>
|
55
|
+
TypeValidationError: () => import_provider16.TypeValidationError,
|
56
56
|
UI_MESSAGE_STREAM_HEADERS: () => UI_MESSAGE_STREAM_HEADERS,
|
57
|
-
UnsupportedFunctionalityError: () =>
|
57
|
+
UnsupportedFunctionalityError: () => import_provider16.UnsupportedFunctionalityError,
|
58
58
|
UnsupportedModelVersionError: () => UnsupportedModelVersionError,
|
59
59
|
asSchema: () => import_provider_utils28.asSchema,
|
60
60
|
assistantModelMessageSchema: () => assistantModelMessageSchema,
|
@@ -139,10 +139,11 @@ var NoOutputSpecifiedError = class extends import_provider.AISDKError {
|
|
139
139
|
};
|
140
140
|
_a = symbol;
|
141
141
|
|
142
|
-
// src/
|
143
|
-
|
144
|
-
|
145
|
-
|
142
|
+
// src/model/resolve-model.ts
|
143
|
+
var import_gateway = require("@ai-sdk/gateway");
|
144
|
+
|
145
|
+
// src/error/index.ts
|
146
|
+
var import_provider16 = require("@ai-sdk/provider");
|
146
147
|
|
147
148
|
// src/error/invalid-argument-error.ts
|
148
149
|
var import_provider2 = require("@ai-sdk/provider");
|
@@ -170,27 +171,20 @@ var InvalidArgumentError = class extends import_provider2.AISDKError {
|
|
170
171
|
};
|
171
172
|
_a2 = symbol2;
|
172
173
|
|
173
|
-
// src/
|
174
|
-
var import_provider4 = require("@ai-sdk/provider");
|
175
|
-
var import_provider_utils = require("@ai-sdk/provider-utils");
|
176
|
-
|
177
|
-
// src/util/retry-error.ts
|
174
|
+
// src/error/invalid-stream-part-error.ts
|
178
175
|
var import_provider3 = require("@ai-sdk/provider");
|
179
|
-
var name3 = "
|
176
|
+
var name3 = "AI_InvalidStreamPartError";
|
180
177
|
var marker3 = `vercel.ai.error.${name3}`;
|
181
178
|
var symbol3 = Symbol.for(marker3);
|
182
179
|
var _a3;
|
183
|
-
var
|
180
|
+
var InvalidStreamPartError = class extends import_provider3.AISDKError {
|
184
181
|
constructor({
|
185
|
-
|
186
|
-
|
187
|
-
errors
|
182
|
+
chunk,
|
183
|
+
message
|
188
184
|
}) {
|
189
185
|
super({ name: name3, message });
|
190
186
|
this[_a3] = true;
|
191
|
-
this.
|
192
|
-
this.errors = errors;
|
193
|
-
this.lastError = errors[errors.length - 1];
|
187
|
+
this.chunk = chunk;
|
194
188
|
}
|
195
189
|
static isInstance(error) {
|
196
190
|
return import_provider3.AISDKError.hasMarker(error, marker3);
|
@@ -198,179 +192,354 @@ var RetryError = class extends import_provider3.AISDKError {
|
|
198
192
|
};
|
199
193
|
_a3 = symbol3;
|
200
194
|
|
201
|
-
// src/
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
195
|
+
// src/error/invalid-tool-input-error.ts
|
196
|
+
var import_provider4 = require("@ai-sdk/provider");
|
197
|
+
var name4 = "AI_InvalidToolInputError";
|
198
|
+
var marker4 = `vercel.ai.error.${name4}`;
|
199
|
+
var symbol4 = Symbol.for(marker4);
|
200
|
+
var _a4;
|
201
|
+
var InvalidToolInputError = class extends import_provider4.AISDKError {
|
202
|
+
constructor({
|
203
|
+
toolInput,
|
204
|
+
toolName,
|
205
|
+
cause,
|
206
|
+
message = `Invalid input for tool ${toolName}: ${(0, import_provider4.getErrorMessage)(cause)}`
|
207
|
+
}) {
|
208
|
+
super({ name: name4, message, cause });
|
209
|
+
this[_a4] = true;
|
210
|
+
this.toolInput = toolInput;
|
211
|
+
this.toolName = toolName;
|
216
212
|
}
|
217
|
-
|
218
|
-
|
219
|
-
const timeoutSeconds = parseFloat(retryAfter);
|
220
|
-
if (!Number.isNaN(timeoutSeconds)) {
|
221
|
-
ms = timeoutSeconds * 1e3;
|
222
|
-
} else {
|
223
|
-
ms = Date.parse(retryAfter) - Date.now();
|
224
|
-
}
|
213
|
+
static isInstance(error) {
|
214
|
+
return import_provider4.AISDKError.hasMarker(error, marker4);
|
225
215
|
}
|
226
|
-
|
227
|
-
|
216
|
+
};
|
217
|
+
_a4 = symbol4;
|
218
|
+
|
219
|
+
// src/error/mcp-client-error.ts
|
220
|
+
var import_provider5 = require("@ai-sdk/provider");
|
221
|
+
var name5 = "AI_MCPClientError";
|
222
|
+
var marker5 = `vercel.ai.error.${name5}`;
|
223
|
+
var symbol5 = Symbol.for(marker5);
|
224
|
+
var _a5;
|
225
|
+
var MCPClientError = class extends import_provider5.AISDKError {
|
226
|
+
constructor({
|
227
|
+
name: name16 = "MCPClientError",
|
228
|
+
message,
|
229
|
+
cause
|
230
|
+
}) {
|
231
|
+
super({ name: name16, message, cause });
|
232
|
+
this[_a5] = true;
|
228
233
|
}
|
229
|
-
|
230
|
-
|
231
|
-
var retryWithExponentialBackoffRespectingRetryHeaders = ({
|
232
|
-
maxRetries = 2,
|
233
|
-
initialDelayInMs = 2e3,
|
234
|
-
backoffFactor = 2,
|
235
|
-
abortSignal
|
236
|
-
} = {}) => async (f) => _retryWithExponentialBackoff(f, {
|
237
|
-
maxRetries,
|
238
|
-
delayInMs: initialDelayInMs,
|
239
|
-
backoffFactor,
|
240
|
-
abortSignal
|
241
|
-
});
|
242
|
-
async function _retryWithExponentialBackoff(f, {
|
243
|
-
maxRetries,
|
244
|
-
delayInMs,
|
245
|
-
backoffFactor,
|
246
|
-
abortSignal
|
247
|
-
}, errors = []) {
|
248
|
-
try {
|
249
|
-
return await f();
|
250
|
-
} catch (error) {
|
251
|
-
if ((0, import_provider_utils.isAbortError)(error)) {
|
252
|
-
throw error;
|
253
|
-
}
|
254
|
-
if (maxRetries === 0) {
|
255
|
-
throw error;
|
256
|
-
}
|
257
|
-
const errorMessage = (0, import_provider_utils.getErrorMessage)(error);
|
258
|
-
const newErrors = [...errors, error];
|
259
|
-
const tryNumber = newErrors.length;
|
260
|
-
if (tryNumber > maxRetries) {
|
261
|
-
throw new RetryError({
|
262
|
-
message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
|
263
|
-
reason: "maxRetriesExceeded",
|
264
|
-
errors: newErrors
|
265
|
-
});
|
266
|
-
}
|
267
|
-
if (error instanceof Error && import_provider4.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
268
|
-
await (0, import_provider_utils.delay)(
|
269
|
-
getRetryDelayInMs({
|
270
|
-
error,
|
271
|
-
exponentialBackoffDelay: delayInMs
|
272
|
-
}),
|
273
|
-
{ abortSignal }
|
274
|
-
);
|
275
|
-
return _retryWithExponentialBackoff(
|
276
|
-
f,
|
277
|
-
{
|
278
|
-
maxRetries,
|
279
|
-
delayInMs: backoffFactor * delayInMs,
|
280
|
-
backoffFactor,
|
281
|
-
abortSignal
|
282
|
-
},
|
283
|
-
newErrors
|
284
|
-
);
|
285
|
-
}
|
286
|
-
if (tryNumber === 1) {
|
287
|
-
throw error;
|
288
|
-
}
|
289
|
-
throw new RetryError({
|
290
|
-
message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
|
291
|
-
reason: "errorNotRetryable",
|
292
|
-
errors: newErrors
|
293
|
-
});
|
234
|
+
static isInstance(error) {
|
235
|
+
return import_provider5.AISDKError.hasMarker(error, marker5);
|
294
236
|
}
|
295
|
-
}
|
237
|
+
};
|
238
|
+
_a5 = symbol5;
|
296
239
|
|
297
|
-
// src/
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
}
|
310
|
-
|
311
|
-
|
312
|
-
parameter: "maxRetries",
|
313
|
-
value: maxRetries,
|
314
|
-
message: "maxRetries must be >= 0"
|
315
|
-
});
|
316
|
-
}
|
240
|
+
// src/error/no-image-generated-error.ts
|
241
|
+
var import_provider6 = require("@ai-sdk/provider");
|
242
|
+
var name6 = "AI_NoImageGeneratedError";
|
243
|
+
var marker6 = `vercel.ai.error.${name6}`;
|
244
|
+
var symbol6 = Symbol.for(marker6);
|
245
|
+
var _a6;
|
246
|
+
var NoImageGeneratedError = class extends import_provider6.AISDKError {
|
247
|
+
constructor({
|
248
|
+
message = "No image generated.",
|
249
|
+
cause,
|
250
|
+
responses
|
251
|
+
}) {
|
252
|
+
super({ name: name6, message, cause });
|
253
|
+
this[_a6] = true;
|
254
|
+
this.responses = responses;
|
317
255
|
}
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
abortSignal
|
324
|
-
})
|
325
|
-
};
|
326
|
-
}
|
256
|
+
static isInstance(error) {
|
257
|
+
return import_provider6.AISDKError.hasMarker(error, marker6);
|
258
|
+
}
|
259
|
+
};
|
260
|
+
_a6 = symbol6;
|
327
261
|
|
328
|
-
// src/
|
329
|
-
var
|
262
|
+
// src/error/no-object-generated-error.ts
|
263
|
+
var import_provider7 = require("@ai-sdk/provider");
|
264
|
+
var name7 = "AI_NoObjectGeneratedError";
|
265
|
+
var marker7 = `vercel.ai.error.${name7}`;
|
266
|
+
var symbol7 = Symbol.for(marker7);
|
267
|
+
var _a7;
|
268
|
+
var NoObjectGeneratedError = class extends import_provider7.AISDKError {
|
269
|
+
constructor({
|
270
|
+
message = "No object generated.",
|
271
|
+
cause,
|
272
|
+
text: text2,
|
273
|
+
response,
|
274
|
+
usage,
|
275
|
+
finishReason
|
276
|
+
}) {
|
277
|
+
super({ name: name7, message, cause });
|
278
|
+
this[_a7] = true;
|
279
|
+
this.text = text2;
|
280
|
+
this.response = response;
|
281
|
+
this.usage = usage;
|
282
|
+
this.finishReason = finishReason;
|
283
|
+
}
|
284
|
+
static isInstance(error) {
|
285
|
+
return import_provider7.AISDKError.hasMarker(error, marker7);
|
286
|
+
}
|
287
|
+
};
|
288
|
+
_a7 = symbol7;
|
330
289
|
|
331
|
-
// src/
|
332
|
-
var
|
333
|
-
var
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
290
|
+
// src/error/no-such-tool-error.ts
|
291
|
+
var import_provider8 = require("@ai-sdk/provider");
|
292
|
+
var name8 = "AI_NoSuchToolError";
|
293
|
+
var marker8 = `vercel.ai.error.${name8}`;
|
294
|
+
var symbol8 = Symbol.for(marker8);
|
295
|
+
var _a8;
|
296
|
+
var NoSuchToolError = class extends import_provider8.AISDKError {
|
297
|
+
constructor({
|
298
|
+
toolName,
|
299
|
+
availableTools = void 0,
|
300
|
+
message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
|
301
|
+
}) {
|
302
|
+
super({ name: name8, message });
|
303
|
+
this[_a8] = true;
|
304
|
+
this.toolName = toolName;
|
305
|
+
this.availableTools = availableTools;
|
306
|
+
}
|
307
|
+
static isInstance(error) {
|
308
|
+
return import_provider8.AISDKError.hasMarker(error, marker8);
|
309
|
+
}
|
310
|
+
};
|
311
|
+
_a8 = symbol8;
|
312
|
+
|
313
|
+
// src/error/tool-call-repair-error.ts
|
314
|
+
var import_provider9 = require("@ai-sdk/provider");
|
315
|
+
var name9 = "AI_ToolCallRepairError";
|
316
|
+
var marker9 = `vercel.ai.error.${name9}`;
|
317
|
+
var symbol9 = Symbol.for(marker9);
|
318
|
+
var _a9;
|
319
|
+
var ToolCallRepairError = class extends import_provider9.AISDKError {
|
320
|
+
constructor({
|
321
|
+
cause,
|
322
|
+
originalError,
|
323
|
+
message = `Error repairing tool call: ${(0, import_provider9.getErrorMessage)(cause)}`
|
324
|
+
}) {
|
325
|
+
super({ name: name9, message, cause });
|
326
|
+
this[_a9] = true;
|
327
|
+
this.originalError = originalError;
|
328
|
+
}
|
329
|
+
static isInstance(error) {
|
330
|
+
return import_provider9.AISDKError.hasMarker(error, marker9);
|
331
|
+
}
|
332
|
+
};
|
333
|
+
_a9 = symbol9;
|
334
|
+
|
335
|
+
// src/error/unsupported-model-version-error.ts
|
336
|
+
var import_provider10 = require("@ai-sdk/provider");
|
337
|
+
var UnsupportedModelVersionError = class extends import_provider10.AISDKError {
|
338
|
+
constructor(options) {
|
339
|
+
super({
|
340
|
+
name: "AI_UnsupportedModelVersionError",
|
341
|
+
message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".`
|
342
|
+
});
|
343
|
+
this.version = options.version;
|
344
|
+
this.provider = options.provider;
|
345
|
+
this.modelId = options.modelId;
|
346
|
+
}
|
347
|
+
};
|
348
|
+
|
349
|
+
// src/prompt/invalid-data-content-error.ts
|
350
|
+
var import_provider11 = require("@ai-sdk/provider");
|
351
|
+
var name10 = "AI_InvalidDataContentError";
|
352
|
+
var marker10 = `vercel.ai.error.${name10}`;
|
353
|
+
var symbol10 = Symbol.for(marker10);
|
354
|
+
var _a10;
|
355
|
+
var InvalidDataContentError = class extends import_provider11.AISDKError {
|
356
|
+
constructor({
|
357
|
+
content,
|
358
|
+
cause,
|
359
|
+
message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
|
360
|
+
}) {
|
361
|
+
super({ name: name10, message, cause });
|
362
|
+
this[_a10] = true;
|
363
|
+
this.content = content;
|
364
|
+
}
|
365
|
+
static isInstance(error) {
|
366
|
+
return import_provider11.AISDKError.hasMarker(error, marker10);
|
367
|
+
}
|
368
|
+
};
|
369
|
+
_a10 = symbol10;
|
370
|
+
|
371
|
+
// src/prompt/invalid-message-role-error.ts
|
372
|
+
var import_provider12 = require("@ai-sdk/provider");
|
373
|
+
var name11 = "AI_InvalidMessageRoleError";
|
374
|
+
var marker11 = `vercel.ai.error.${name11}`;
|
375
|
+
var symbol11 = Symbol.for(marker11);
|
376
|
+
var _a11;
|
377
|
+
var InvalidMessageRoleError = class extends import_provider12.AISDKError {
|
378
|
+
constructor({
|
379
|
+
role,
|
380
|
+
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
381
|
+
}) {
|
382
|
+
super({ name: name11, message });
|
383
|
+
this[_a11] = true;
|
384
|
+
this.role = role;
|
385
|
+
}
|
386
|
+
static isInstance(error) {
|
387
|
+
return import_provider12.AISDKError.hasMarker(error, marker11);
|
388
|
+
}
|
389
|
+
};
|
390
|
+
_a11 = symbol11;
|
391
|
+
|
392
|
+
// src/prompt/message-conversion-error.ts
|
393
|
+
var import_provider13 = require("@ai-sdk/provider");
|
394
|
+
var name12 = "AI_MessageConversionError";
|
395
|
+
var marker12 = `vercel.ai.error.${name12}`;
|
396
|
+
var symbol12 = Symbol.for(marker12);
|
397
|
+
var _a12;
|
398
|
+
var MessageConversionError = class extends import_provider13.AISDKError {
|
399
|
+
constructor({
|
400
|
+
originalMessage,
|
401
|
+
message
|
402
|
+
}) {
|
403
|
+
super({ name: name12, message });
|
404
|
+
this[_a12] = true;
|
405
|
+
this.originalMessage = originalMessage;
|
406
|
+
}
|
407
|
+
static isInstance(error) {
|
408
|
+
return import_provider13.AISDKError.hasMarker(error, marker12);
|
409
|
+
}
|
410
|
+
};
|
411
|
+
_a12 = symbol12;
|
412
|
+
|
413
|
+
// src/util/download-error.ts
|
414
|
+
var import_provider14 = require("@ai-sdk/provider");
|
415
|
+
var name13 = "AI_DownloadError";
|
416
|
+
var marker13 = `vercel.ai.error.${name13}`;
|
417
|
+
var symbol13 = Symbol.for(marker13);
|
418
|
+
var _a13;
|
419
|
+
var DownloadError = class extends import_provider14.AISDKError {
|
420
|
+
constructor({
|
421
|
+
url,
|
422
|
+
statusCode,
|
423
|
+
statusText,
|
424
|
+
cause,
|
425
|
+
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
426
|
+
}) {
|
427
|
+
super({ name: name13, message, cause });
|
428
|
+
this[_a13] = true;
|
429
|
+
this.url = url;
|
430
|
+
this.statusCode = statusCode;
|
431
|
+
this.statusText = statusText;
|
432
|
+
}
|
433
|
+
static isInstance(error) {
|
434
|
+
return import_provider14.AISDKError.hasMarker(error, marker13);
|
435
|
+
}
|
436
|
+
};
|
437
|
+
_a13 = symbol13;
|
438
|
+
|
439
|
+
// src/util/retry-error.ts
|
440
|
+
var import_provider15 = require("@ai-sdk/provider");
|
441
|
+
var name14 = "AI_RetryError";
|
442
|
+
var marker14 = `vercel.ai.error.${name14}`;
|
443
|
+
var symbol14 = Symbol.for(marker14);
|
444
|
+
var _a14;
|
445
|
+
var RetryError = class extends import_provider15.AISDKError {
|
446
|
+
constructor({
|
447
|
+
message,
|
448
|
+
reason,
|
449
|
+
errors
|
450
|
+
}) {
|
451
|
+
super({ name: name14, message });
|
452
|
+
this[_a14] = true;
|
453
|
+
this.reason = reason;
|
454
|
+
this.errors = errors;
|
455
|
+
this.lastError = errors[errors.length - 1];
|
456
|
+
}
|
457
|
+
static isInstance(error) {
|
458
|
+
return import_provider15.AISDKError.hasMarker(error, marker14);
|
459
|
+
}
|
460
|
+
};
|
461
|
+
_a14 = symbol14;
|
462
|
+
|
463
|
+
// src/model/resolve-model.ts
|
464
|
+
function resolveLanguageModel(model) {
|
465
|
+
if (typeof model !== "string") {
|
466
|
+
if (model.specificationVersion !== "v2") {
|
467
|
+
throw new UnsupportedModelVersionError({
|
468
|
+
version: model.specificationVersion,
|
469
|
+
provider: model.provider,
|
470
|
+
modelId: model.modelId
|
471
|
+
});
|
472
|
+
}
|
473
|
+
return model;
|
474
|
+
}
|
475
|
+
return getGlobalProvider().languageModel(model);
|
476
|
+
}
|
477
|
+
function resolveEmbeddingModel(model) {
|
478
|
+
if (typeof model !== "string") {
|
479
|
+
if (model.specificationVersion !== "v2") {
|
480
|
+
throw new UnsupportedModelVersionError({
|
481
|
+
version: model.specificationVersion,
|
482
|
+
provider: model.provider,
|
483
|
+
modelId: model.modelId
|
484
|
+
});
|
485
|
+
}
|
486
|
+
return model;
|
487
|
+
}
|
488
|
+
return getGlobalProvider().textEmbeddingModel(
|
489
|
+
model
|
490
|
+
);
|
491
|
+
}
|
492
|
+
function getGlobalProvider() {
|
493
|
+
var _a16;
|
494
|
+
return (_a16 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a16 : import_gateway.gateway;
|
495
|
+
}
|
496
|
+
|
497
|
+
// src/prompt/convert-to-language-model-prompt.ts
|
498
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
499
|
+
|
500
|
+
// src/util/detect-media-type.ts
|
501
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
502
|
+
var imageMediaTypeSignatures = [
|
503
|
+
{
|
504
|
+
mediaType: "image/gif",
|
505
|
+
bytesPrefix: [71, 73, 70],
|
506
|
+
base64Prefix: "R0lG"
|
507
|
+
},
|
508
|
+
{
|
509
|
+
mediaType: "image/png",
|
510
|
+
bytesPrefix: [137, 80, 78, 71],
|
511
|
+
base64Prefix: "iVBORw"
|
512
|
+
},
|
513
|
+
{
|
514
|
+
mediaType: "image/jpeg",
|
515
|
+
bytesPrefix: [255, 216],
|
516
|
+
base64Prefix: "/9j/"
|
517
|
+
},
|
518
|
+
{
|
519
|
+
mediaType: "image/webp",
|
520
|
+
bytesPrefix: [82, 73, 70, 70],
|
521
|
+
base64Prefix: "UklGRg"
|
522
|
+
},
|
523
|
+
{
|
524
|
+
mediaType: "image/bmp",
|
525
|
+
bytesPrefix: [66, 77],
|
526
|
+
base64Prefix: "Qk"
|
527
|
+
},
|
528
|
+
{
|
529
|
+
mediaType: "image/tiff",
|
530
|
+
bytesPrefix: [73, 73, 42, 0],
|
531
|
+
base64Prefix: "SUkqAA"
|
532
|
+
},
|
533
|
+
{
|
534
|
+
mediaType: "image/tiff",
|
535
|
+
bytesPrefix: [77, 77, 0, 42],
|
536
|
+
base64Prefix: "TU0AKg"
|
537
|
+
},
|
538
|
+
{
|
539
|
+
mediaType: "image/avif",
|
540
|
+
bytesPrefix: [
|
541
|
+
0,
|
542
|
+
0,
|
374
543
|
0,
|
375
544
|
32,
|
376
545
|
102,
|
@@ -441,7 +610,7 @@ var audioMediaTypeSignatures = [
|
|
441
610
|
}
|
442
611
|
];
|
443
612
|
var stripID3 = (data) => {
|
444
|
-
const bytes = typeof data === "string" ? (0,
|
613
|
+
const bytes = typeof data === "string" ? (0, import_provider_utils.convertBase64ToUint8Array)(data) : data;
|
445
614
|
const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127;
|
446
615
|
return bytes.slice(id3Size + 10);
|
447
616
|
};
|
@@ -466,32 +635,6 @@ function detectMediaType({
|
|
466
635
|
return void 0;
|
467
636
|
}
|
468
637
|
|
469
|
-
// src/util/download-error.ts
|
470
|
-
var import_provider5 = require("@ai-sdk/provider");
|
471
|
-
var name4 = "AI_DownloadError";
|
472
|
-
var marker4 = `vercel.ai.error.${name4}`;
|
473
|
-
var symbol4 = Symbol.for(marker4);
|
474
|
-
var _a4;
|
475
|
-
var DownloadError = class extends import_provider5.AISDKError {
|
476
|
-
constructor({
|
477
|
-
url,
|
478
|
-
statusCode,
|
479
|
-
statusText,
|
480
|
-
cause,
|
481
|
-
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
482
|
-
}) {
|
483
|
-
super({ name: name4, message, cause });
|
484
|
-
this[_a4] = true;
|
485
|
-
this.url = url;
|
486
|
-
this.statusCode = statusCode;
|
487
|
-
this.statusText = statusText;
|
488
|
-
}
|
489
|
-
static isInstance(error) {
|
490
|
-
return import_provider5.AISDKError.hasMarker(error, marker4);
|
491
|
-
}
|
492
|
-
};
|
493
|
-
_a4 = symbol4;
|
494
|
-
|
495
638
|
// src/util/download.ts
|
496
639
|
async function download({ url }) {
|
497
640
|
var _a16;
|
@@ -518,32 +661,10 @@ async function download({ url }) {
|
|
518
661
|
}
|
519
662
|
|
520
663
|
// src/prompt/data-content.ts
|
521
|
-
var
|
522
|
-
var
|
664
|
+
var import_provider17 = require("@ai-sdk/provider");
|
665
|
+
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
523
666
|
var import_v4 = require("zod/v4");
|
524
667
|
|
525
|
-
// src/prompt/invalid-data-content-error.ts
|
526
|
-
var import_provider6 = require("@ai-sdk/provider");
|
527
|
-
var name5 = "AI_InvalidDataContentError";
|
528
|
-
var marker5 = `vercel.ai.error.${name5}`;
|
529
|
-
var symbol5 = Symbol.for(marker5);
|
530
|
-
var _a5;
|
531
|
-
var InvalidDataContentError = class extends import_provider6.AISDKError {
|
532
|
-
constructor({
|
533
|
-
content,
|
534
|
-
cause,
|
535
|
-
message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
|
536
|
-
}) {
|
537
|
-
super({ name: name5, message, cause });
|
538
|
-
this[_a5] = true;
|
539
|
-
this.content = content;
|
540
|
-
}
|
541
|
-
static isInstance(error) {
|
542
|
-
return import_provider6.AISDKError.hasMarker(error, marker5);
|
543
|
-
}
|
544
|
-
};
|
545
|
-
_a5 = symbol5;
|
546
|
-
|
547
668
|
// src/prompt/split-data-url.ts
|
548
669
|
function splitDataUrl(dataUrl) {
|
549
670
|
try {
|
@@ -592,7 +713,7 @@ function convertToLanguageModelV2DataContent(content) {
|
|
592
713
|
content.toString()
|
593
714
|
);
|
594
715
|
if (dataUrlMediaType == null || base64Content == null) {
|
595
|
-
throw new
|
716
|
+
throw new import_provider17.AISDKError({
|
596
717
|
name: "InvalidDataContentError",
|
597
718
|
message: `Invalid data URL format in content ${content.toString()}`
|
598
719
|
});
|
@@ -606,9 +727,9 @@ function convertDataContentToBase64String(content) {
|
|
606
727
|
return content;
|
607
728
|
}
|
608
729
|
if (content instanceof ArrayBuffer) {
|
609
|
-
return (0,
|
730
|
+
return (0, import_provider_utils2.convertUint8ArrayToBase64)(new Uint8Array(content));
|
610
731
|
}
|
611
|
-
return (0,
|
732
|
+
return (0, import_provider_utils2.convertUint8ArrayToBase64)(content);
|
612
733
|
}
|
613
734
|
function convertDataContentToUint8Array(content) {
|
614
735
|
if (content instanceof Uint8Array) {
|
@@ -616,7 +737,7 @@ function convertDataContentToUint8Array(content) {
|
|
616
737
|
}
|
617
738
|
if (typeof content === "string") {
|
618
739
|
try {
|
619
|
-
return (0,
|
740
|
+
return (0, import_provider_utils2.convertBase64ToUint8Array)(content);
|
620
741
|
} catch (error) {
|
621
742
|
throw new InvalidDataContentError({
|
622
743
|
message: "Invalid data content. Content string is not a base64-encoded media.",
|
@@ -631,27 +752,6 @@ function convertDataContentToUint8Array(content) {
|
|
631
752
|
throw new InvalidDataContentError({ content });
|
632
753
|
}
|
633
754
|
|
634
|
-
// src/prompt/invalid-message-role-error.ts
|
635
|
-
var import_provider8 = require("@ai-sdk/provider");
|
636
|
-
var name6 = "AI_InvalidMessageRoleError";
|
637
|
-
var marker6 = `vercel.ai.error.${name6}`;
|
638
|
-
var symbol6 = Symbol.for(marker6);
|
639
|
-
var _a6;
|
640
|
-
var InvalidMessageRoleError = class extends import_provider8.AISDKError {
|
641
|
-
constructor({
|
642
|
-
role,
|
643
|
-
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
644
|
-
}) {
|
645
|
-
super({ name: name6, message });
|
646
|
-
this[_a6] = true;
|
647
|
-
this.role = role;
|
648
|
-
}
|
649
|
-
static isInstance(error) {
|
650
|
-
return import_provider8.AISDKError.hasMarker(error, marker6);
|
651
|
-
}
|
652
|
-
};
|
653
|
-
_a6 = symbol6;
|
654
|
-
|
655
755
|
// src/prompt/convert-to-language-model-prompt.ts
|
656
756
|
async function convertToLanguageModelPrompt({
|
657
757
|
prompt,
|
@@ -799,7 +899,7 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
|
|
799
899
|
}
|
800
900
|
return { mediaType, data };
|
801
901
|
}).filter(
|
802
|
-
(part) => part.data instanceof URL && part.mediaType != null && !(0,
|
902
|
+
(part) => part.data instanceof URL && part.mediaType != null && !(0, import_provider_utils3.isUrlSupported)({
|
803
903
|
url: part.data.toString(),
|
804
904
|
mediaType: part.mediaType,
|
805
905
|
supportedUrls
|
@@ -911,338 +1011,120 @@ function prepareCallSettings({
|
|
911
1011
|
});
|
912
1012
|
}
|
913
1013
|
}
|
914
|
-
if (topP != null) {
|
915
|
-
if (typeof topP !== "number") {
|
916
|
-
throw new InvalidArgumentError({
|
917
|
-
parameter: "topP",
|
918
|
-
value: topP,
|
919
|
-
message: "topP must be a number"
|
920
|
-
});
|
921
|
-
}
|
922
|
-
}
|
923
|
-
if (topK != null) {
|
924
|
-
if (typeof topK !== "number") {
|
925
|
-
throw new InvalidArgumentError({
|
926
|
-
parameter: "topK",
|
927
|
-
value: topK,
|
928
|
-
message: "topK must be a number"
|
929
|
-
});
|
930
|
-
}
|
931
|
-
}
|
932
|
-
if (presencePenalty != null) {
|
933
|
-
if (typeof presencePenalty !== "number") {
|
934
|
-
throw new InvalidArgumentError({
|
935
|
-
parameter: "presencePenalty",
|
936
|
-
value: presencePenalty,
|
937
|
-
message: "presencePenalty must be a number"
|
938
|
-
});
|
939
|
-
}
|
940
|
-
}
|
941
|
-
if (frequencyPenalty != null) {
|
942
|
-
if (typeof frequencyPenalty !== "number") {
|
943
|
-
throw new InvalidArgumentError({
|
944
|
-
parameter: "frequencyPenalty",
|
945
|
-
value: frequencyPenalty,
|
946
|
-
message: "frequencyPenalty must be a number"
|
947
|
-
});
|
948
|
-
}
|
949
|
-
}
|
950
|
-
if (seed != null) {
|
951
|
-
if (!Number.isInteger(seed)) {
|
952
|
-
throw new InvalidArgumentError({
|
953
|
-
parameter: "seed",
|
954
|
-
value: seed,
|
955
|
-
message: "seed must be an integer"
|
956
|
-
});
|
957
|
-
}
|
958
|
-
}
|
959
|
-
return {
|
960
|
-
maxOutputTokens,
|
961
|
-
temperature,
|
962
|
-
topP,
|
963
|
-
topK,
|
964
|
-
presencePenalty,
|
965
|
-
frequencyPenalty,
|
966
|
-
stopSequences,
|
967
|
-
seed
|
968
|
-
};
|
969
|
-
}
|
970
|
-
|
971
|
-
// src/prompt/prepare-tools-and-tool-choice.ts
|
972
|
-
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
973
|
-
|
974
|
-
// src/util/is-non-empty-object.ts
|
975
|
-
function isNonEmptyObject(object2) {
|
976
|
-
return object2 != null && Object.keys(object2).length > 0;
|
977
|
-
}
|
978
|
-
|
979
|
-
// src/prompt/prepare-tools-and-tool-choice.ts
|
980
|
-
function prepareToolsAndToolChoice({
|
981
|
-
tools,
|
982
|
-
toolChoice,
|
983
|
-
activeTools
|
984
|
-
}) {
|
985
|
-
if (!isNonEmptyObject(tools)) {
|
986
|
-
return {
|
987
|
-
tools: void 0,
|
988
|
-
toolChoice: void 0
|
989
|
-
};
|
990
|
-
}
|
991
|
-
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
992
|
-
([name16]) => activeTools.includes(name16)
|
993
|
-
) : Object.entries(tools);
|
994
|
-
return {
|
995
|
-
tools: filteredTools.map(([name16, tool3]) => {
|
996
|
-
const toolType = tool3.type;
|
997
|
-
switch (toolType) {
|
998
|
-
case void 0:
|
999
|
-
case "dynamic":
|
1000
|
-
case "function":
|
1001
|
-
return {
|
1002
|
-
type: "function",
|
1003
|
-
name: name16,
|
1004
|
-
description: tool3.description,
|
1005
|
-
inputSchema: (0, import_provider_utils5.asSchema)(tool3.inputSchema).jsonSchema,
|
1006
|
-
providerOptions: tool3.providerOptions
|
1007
|
-
};
|
1008
|
-
case "provider-defined":
|
1009
|
-
return {
|
1010
|
-
type: "provider-defined",
|
1011
|
-
name: name16,
|
1012
|
-
id: tool3.id,
|
1013
|
-
args: tool3.args
|
1014
|
-
};
|
1015
|
-
default: {
|
1016
|
-
const exhaustiveCheck = toolType;
|
1017
|
-
throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
|
1018
|
-
}
|
1019
|
-
}
|
1020
|
-
}),
|
1021
|
-
toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
|
1022
|
-
};
|
1023
|
-
}
|
1024
|
-
|
1025
|
-
// src/prompt/resolve-language-model.ts
|
1026
|
-
var import_gateway = require("@ai-sdk/gateway");
|
1027
|
-
|
1028
|
-
// src/error/index.ts
|
1029
|
-
var import_provider18 = require("@ai-sdk/provider");
|
1030
|
-
|
1031
|
-
// src/error/invalid-stream-part-error.ts
|
1032
|
-
var import_provider9 = require("@ai-sdk/provider");
|
1033
|
-
var name7 = "AI_InvalidStreamPartError";
|
1034
|
-
var marker7 = `vercel.ai.error.${name7}`;
|
1035
|
-
var symbol7 = Symbol.for(marker7);
|
1036
|
-
var _a7;
|
1037
|
-
var InvalidStreamPartError = class extends import_provider9.AISDKError {
|
1038
|
-
constructor({
|
1039
|
-
chunk,
|
1040
|
-
message
|
1041
|
-
}) {
|
1042
|
-
super({ name: name7, message });
|
1043
|
-
this[_a7] = true;
|
1044
|
-
this.chunk = chunk;
|
1045
|
-
}
|
1046
|
-
static isInstance(error) {
|
1047
|
-
return import_provider9.AISDKError.hasMarker(error, marker7);
|
1048
|
-
}
|
1049
|
-
};
|
1050
|
-
_a7 = symbol7;
|
1051
|
-
|
1052
|
-
// src/error/invalid-tool-input-error.ts
|
1053
|
-
var import_provider10 = require("@ai-sdk/provider");
|
1054
|
-
var name8 = "AI_InvalidToolInputError";
|
1055
|
-
var marker8 = `vercel.ai.error.${name8}`;
|
1056
|
-
var symbol8 = Symbol.for(marker8);
|
1057
|
-
var _a8;
|
1058
|
-
var InvalidToolInputError = class extends import_provider10.AISDKError {
|
1059
|
-
constructor({
|
1060
|
-
toolInput,
|
1061
|
-
toolName,
|
1062
|
-
cause,
|
1063
|
-
message = `Invalid input for tool ${toolName}: ${(0, import_provider10.getErrorMessage)(cause)}`
|
1064
|
-
}) {
|
1065
|
-
super({ name: name8, message, cause });
|
1066
|
-
this[_a8] = true;
|
1067
|
-
this.toolInput = toolInput;
|
1068
|
-
this.toolName = toolName;
|
1069
|
-
}
|
1070
|
-
static isInstance(error) {
|
1071
|
-
return import_provider10.AISDKError.hasMarker(error, marker8);
|
1072
|
-
}
|
1073
|
-
};
|
1074
|
-
_a8 = symbol8;
|
1075
|
-
|
1076
|
-
// src/error/mcp-client-error.ts
|
1077
|
-
var import_provider11 = require("@ai-sdk/provider");
|
1078
|
-
var name9 = "AI_MCPClientError";
|
1079
|
-
var marker9 = `vercel.ai.error.${name9}`;
|
1080
|
-
var symbol9 = Symbol.for(marker9);
|
1081
|
-
var _a9;
|
1082
|
-
var MCPClientError = class extends import_provider11.AISDKError {
|
1083
|
-
constructor({
|
1084
|
-
name: name16 = "MCPClientError",
|
1085
|
-
message,
|
1086
|
-
cause
|
1087
|
-
}) {
|
1088
|
-
super({ name: name16, message, cause });
|
1089
|
-
this[_a9] = true;
|
1090
|
-
}
|
1091
|
-
static isInstance(error) {
|
1092
|
-
return import_provider11.AISDKError.hasMarker(error, marker9);
|
1093
|
-
}
|
1094
|
-
};
|
1095
|
-
_a9 = symbol9;
|
1096
|
-
|
1097
|
-
// src/error/no-image-generated-error.ts
|
1098
|
-
var import_provider12 = require("@ai-sdk/provider");
|
1099
|
-
var name10 = "AI_NoImageGeneratedError";
|
1100
|
-
var marker10 = `vercel.ai.error.${name10}`;
|
1101
|
-
var symbol10 = Symbol.for(marker10);
|
1102
|
-
var _a10;
|
1103
|
-
var NoImageGeneratedError = class extends import_provider12.AISDKError {
|
1104
|
-
constructor({
|
1105
|
-
message = "No image generated.",
|
1106
|
-
cause,
|
1107
|
-
responses
|
1108
|
-
}) {
|
1109
|
-
super({ name: name10, message, cause });
|
1110
|
-
this[_a10] = true;
|
1111
|
-
this.responses = responses;
|
1112
|
-
}
|
1113
|
-
static isInstance(error) {
|
1114
|
-
return import_provider12.AISDKError.hasMarker(error, marker10);
|
1115
|
-
}
|
1116
|
-
};
|
1117
|
-
_a10 = symbol10;
|
1118
|
-
|
1119
|
-
// src/error/no-object-generated-error.ts
|
1120
|
-
var import_provider13 = require("@ai-sdk/provider");
|
1121
|
-
var name11 = "AI_NoObjectGeneratedError";
|
1122
|
-
var marker11 = `vercel.ai.error.${name11}`;
|
1123
|
-
var symbol11 = Symbol.for(marker11);
|
1124
|
-
var _a11;
|
1125
|
-
var NoObjectGeneratedError = class extends import_provider13.AISDKError {
|
1126
|
-
constructor({
|
1127
|
-
message = "No object generated.",
|
1128
|
-
cause,
|
1129
|
-
text: text2,
|
1130
|
-
response,
|
1131
|
-
usage,
|
1132
|
-
finishReason
|
1133
|
-
}) {
|
1134
|
-
super({ name: name11, message, cause });
|
1135
|
-
this[_a11] = true;
|
1136
|
-
this.text = text2;
|
1137
|
-
this.response = response;
|
1138
|
-
this.usage = usage;
|
1139
|
-
this.finishReason = finishReason;
|
1140
|
-
}
|
1141
|
-
static isInstance(error) {
|
1142
|
-
return import_provider13.AISDKError.hasMarker(error, marker11);
|
1143
|
-
}
|
1144
|
-
};
|
1145
|
-
_a11 = symbol11;
|
1146
|
-
|
1147
|
-
// src/error/no-such-tool-error.ts
|
1148
|
-
var import_provider14 = require("@ai-sdk/provider");
|
1149
|
-
var name12 = "AI_NoSuchToolError";
|
1150
|
-
var marker12 = `vercel.ai.error.${name12}`;
|
1151
|
-
var symbol12 = Symbol.for(marker12);
|
1152
|
-
var _a12;
|
1153
|
-
var NoSuchToolError = class extends import_provider14.AISDKError {
|
1154
|
-
constructor({
|
1155
|
-
toolName,
|
1156
|
-
availableTools = void 0,
|
1157
|
-
message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
|
1158
|
-
}) {
|
1159
|
-
super({ name: name12, message });
|
1160
|
-
this[_a12] = true;
|
1161
|
-
this.toolName = toolName;
|
1162
|
-
this.availableTools = availableTools;
|
1163
|
-
}
|
1164
|
-
static isInstance(error) {
|
1165
|
-
return import_provider14.AISDKError.hasMarker(error, marker12);
|
1166
|
-
}
|
1167
|
-
};
|
1168
|
-
_a12 = symbol12;
|
1169
|
-
|
1170
|
-
// src/error/tool-call-repair-error.ts
|
1171
|
-
var import_provider15 = require("@ai-sdk/provider");
|
1172
|
-
var name13 = "AI_ToolCallRepairError";
|
1173
|
-
var marker13 = `vercel.ai.error.${name13}`;
|
1174
|
-
var symbol13 = Symbol.for(marker13);
|
1175
|
-
var _a13;
|
1176
|
-
var ToolCallRepairError = class extends import_provider15.AISDKError {
|
1177
|
-
constructor({
|
1178
|
-
cause,
|
1179
|
-
originalError,
|
1180
|
-
message = `Error repairing tool call: ${(0, import_provider15.getErrorMessage)(cause)}`
|
1181
|
-
}) {
|
1182
|
-
super({ name: name13, message, cause });
|
1183
|
-
this[_a13] = true;
|
1184
|
-
this.originalError = originalError;
|
1185
|
-
}
|
1186
|
-
static isInstance(error) {
|
1187
|
-
return import_provider15.AISDKError.hasMarker(error, marker13);
|
1188
|
-
}
|
1189
|
-
};
|
1190
|
-
_a13 = symbol13;
|
1191
|
-
|
1192
|
-
// src/error/unsupported-model-version-error.ts
|
1193
|
-
var import_provider16 = require("@ai-sdk/provider");
|
1194
|
-
var UnsupportedModelVersionError = class extends import_provider16.AISDKError {
|
1195
|
-
constructor(options) {
|
1196
|
-
super({
|
1197
|
-
name: "AI_UnsupportedModelVersionError",
|
1198
|
-
message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".`
|
1199
|
-
});
|
1200
|
-
this.version = options.version;
|
1201
|
-
this.provider = options.provider;
|
1202
|
-
this.modelId = options.modelId;
|
1203
|
-
}
|
1204
|
-
};
|
1205
|
-
|
1206
|
-
// src/prompt/message-conversion-error.ts
|
1207
|
-
var import_provider17 = require("@ai-sdk/provider");
|
1208
|
-
var name14 = "AI_MessageConversionError";
|
1209
|
-
var marker14 = `vercel.ai.error.${name14}`;
|
1210
|
-
var symbol14 = Symbol.for(marker14);
|
1211
|
-
var _a14;
|
1212
|
-
var MessageConversionError = class extends import_provider17.AISDKError {
|
1213
|
-
constructor({
|
1214
|
-
originalMessage,
|
1215
|
-
message
|
1216
|
-
}) {
|
1217
|
-
super({ name: name14, message });
|
1218
|
-
this[_a14] = true;
|
1219
|
-
this.originalMessage = originalMessage;
|
1014
|
+
if (topP != null) {
|
1015
|
+
if (typeof topP !== "number") {
|
1016
|
+
throw new InvalidArgumentError({
|
1017
|
+
parameter: "topP",
|
1018
|
+
value: topP,
|
1019
|
+
message: "topP must be a number"
|
1020
|
+
});
|
1021
|
+
}
|
1220
1022
|
}
|
1221
|
-
|
1222
|
-
|
1023
|
+
if (topK != null) {
|
1024
|
+
if (typeof topK !== "number") {
|
1025
|
+
throw new InvalidArgumentError({
|
1026
|
+
parameter: "topK",
|
1027
|
+
value: topK,
|
1028
|
+
message: "topK must be a number"
|
1029
|
+
});
|
1030
|
+
}
|
1223
1031
|
}
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
if (model.specificationVersion !== "v2") {
|
1231
|
-
throw new UnsupportedModelVersionError({
|
1232
|
-
version: model.specificationVersion,
|
1233
|
-
provider: model.provider,
|
1234
|
-
modelId: model.modelId
|
1032
|
+
if (presencePenalty != null) {
|
1033
|
+
if (typeof presencePenalty !== "number") {
|
1034
|
+
throw new InvalidArgumentError({
|
1035
|
+
parameter: "presencePenalty",
|
1036
|
+
value: presencePenalty,
|
1037
|
+
message: "presencePenalty must be a number"
|
1235
1038
|
});
|
1236
1039
|
}
|
1237
|
-
return model;
|
1238
1040
|
}
|
1239
|
-
|
1240
|
-
|
1041
|
+
if (frequencyPenalty != null) {
|
1042
|
+
if (typeof frequencyPenalty !== "number") {
|
1043
|
+
throw new InvalidArgumentError({
|
1044
|
+
parameter: "frequencyPenalty",
|
1045
|
+
value: frequencyPenalty,
|
1046
|
+
message: "frequencyPenalty must be a number"
|
1047
|
+
});
|
1048
|
+
}
|
1049
|
+
}
|
1050
|
+
if (seed != null) {
|
1051
|
+
if (!Number.isInteger(seed)) {
|
1052
|
+
throw new InvalidArgumentError({
|
1053
|
+
parameter: "seed",
|
1054
|
+
value: seed,
|
1055
|
+
message: "seed must be an integer"
|
1056
|
+
});
|
1057
|
+
}
|
1058
|
+
}
|
1059
|
+
return {
|
1060
|
+
maxOutputTokens,
|
1061
|
+
temperature,
|
1062
|
+
topP,
|
1063
|
+
topK,
|
1064
|
+
presencePenalty,
|
1065
|
+
frequencyPenalty,
|
1066
|
+
stopSequences,
|
1067
|
+
seed
|
1068
|
+
};
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
// src/prompt/prepare-tools-and-tool-choice.ts
|
1072
|
+
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
1073
|
+
|
1074
|
+
// src/util/is-non-empty-object.ts
|
1075
|
+
function isNonEmptyObject(object2) {
|
1076
|
+
return object2 != null && Object.keys(object2).length > 0;
|
1077
|
+
}
|
1078
|
+
|
1079
|
+
// src/prompt/prepare-tools-and-tool-choice.ts
|
1080
|
+
function prepareToolsAndToolChoice({
|
1081
|
+
tools,
|
1082
|
+
toolChoice,
|
1083
|
+
activeTools
|
1084
|
+
}) {
|
1085
|
+
if (!isNonEmptyObject(tools)) {
|
1086
|
+
return {
|
1087
|
+
tools: void 0,
|
1088
|
+
toolChoice: void 0
|
1089
|
+
};
|
1090
|
+
}
|
1091
|
+
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
1092
|
+
([name16]) => activeTools.includes(name16)
|
1093
|
+
) : Object.entries(tools);
|
1094
|
+
return {
|
1095
|
+
tools: filteredTools.map(([name16, tool3]) => {
|
1096
|
+
const toolType = tool3.type;
|
1097
|
+
switch (toolType) {
|
1098
|
+
case void 0:
|
1099
|
+
case "dynamic":
|
1100
|
+
case "function":
|
1101
|
+
return {
|
1102
|
+
type: "function",
|
1103
|
+
name: name16,
|
1104
|
+
description: tool3.description,
|
1105
|
+
inputSchema: (0, import_provider_utils4.asSchema)(tool3.inputSchema).jsonSchema,
|
1106
|
+
providerOptions: tool3.providerOptions
|
1107
|
+
};
|
1108
|
+
case "provider-defined":
|
1109
|
+
return {
|
1110
|
+
type: "provider-defined",
|
1111
|
+
name: name16,
|
1112
|
+
id: tool3.id,
|
1113
|
+
args: tool3.args
|
1114
|
+
};
|
1115
|
+
default: {
|
1116
|
+
const exhaustiveCheck = toolType;
|
1117
|
+
throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
|
1118
|
+
}
|
1119
|
+
}
|
1120
|
+
}),
|
1121
|
+
toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
|
1122
|
+
};
|
1241
1123
|
}
|
1242
1124
|
|
1243
1125
|
// src/prompt/standardize-prompt.ts
|
1244
|
-
var
|
1245
|
-
var
|
1126
|
+
var import_provider18 = require("@ai-sdk/provider");
|
1127
|
+
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
1246
1128
|
var import_v46 = require("zod/v4");
|
1247
1129
|
|
1248
1130
|
// src/prompt/message.ts
|
@@ -1397,19 +1279,19 @@ var coreMessageSchema = modelMessageSchema;
|
|
1397
1279
|
// src/prompt/standardize-prompt.ts
|
1398
1280
|
async function standardizePrompt(prompt) {
|
1399
1281
|
if (prompt.prompt == null && prompt.messages == null) {
|
1400
|
-
throw new
|
1282
|
+
throw new import_provider18.InvalidPromptError({
|
1401
1283
|
prompt,
|
1402
1284
|
message: "prompt or messages must be defined"
|
1403
1285
|
});
|
1404
1286
|
}
|
1405
1287
|
if (prompt.prompt != null && prompt.messages != null) {
|
1406
|
-
throw new
|
1288
|
+
throw new import_provider18.InvalidPromptError({
|
1407
1289
|
prompt,
|
1408
1290
|
message: "prompt and messages cannot be defined at the same time"
|
1409
1291
|
});
|
1410
1292
|
}
|
1411
1293
|
if (prompt.system != null && typeof prompt.system !== "string") {
|
1412
|
-
throw new
|
1294
|
+
throw new import_provider18.InvalidPromptError({
|
1413
1295
|
prompt,
|
1414
1296
|
message: "system must be a string"
|
1415
1297
|
});
|
@@ -1422,23 +1304,23 @@ async function standardizePrompt(prompt) {
|
|
1422
1304
|
} else if (prompt.messages != null) {
|
1423
1305
|
messages = prompt.messages;
|
1424
1306
|
} else {
|
1425
|
-
throw new
|
1307
|
+
throw new import_provider18.InvalidPromptError({
|
1426
1308
|
prompt,
|
1427
1309
|
message: "prompt or messages must be defined"
|
1428
1310
|
});
|
1429
1311
|
}
|
1430
1312
|
if (messages.length === 0) {
|
1431
|
-
throw new
|
1313
|
+
throw new import_provider18.InvalidPromptError({
|
1432
1314
|
prompt,
|
1433
1315
|
message: "messages must not be empty"
|
1434
1316
|
});
|
1435
1317
|
}
|
1436
|
-
const validationResult = await (0,
|
1318
|
+
const validationResult = await (0, import_provider_utils5.safeValidateTypes)({
|
1437
1319
|
value: messages,
|
1438
1320
|
schema: import_v46.z.array(modelMessageSchema)
|
1439
1321
|
});
|
1440
1322
|
if (!validationResult.success) {
|
1441
|
-
throw new
|
1323
|
+
throw new import_provider18.InvalidPromptError({
|
1442
1324
|
prompt,
|
1443
1325
|
message: "The messages must be a ModelMessage[]. If you have passed a UIMessage[], you can use convertToModelMessages to convert them.",
|
1444
1326
|
cause: validationResult.error
|
@@ -1452,10 +1334,10 @@ async function standardizePrompt(prompt) {
|
|
1452
1334
|
|
1453
1335
|
// src/prompt/wrap-gateway-error.ts
|
1454
1336
|
var import_gateway2 = require("@ai-sdk/gateway");
|
1455
|
-
var
|
1337
|
+
var import_provider19 = require("@ai-sdk/provider");
|
1456
1338
|
function wrapGatewayError(error) {
|
1457
1339
|
if (import_gateway2.GatewayAuthenticationError.isInstance(error) || import_gateway2.GatewayModelNotFoundError.isInstance(error)) {
|
1458
|
-
return new
|
1340
|
+
return new import_provider19.AISDKError({
|
1459
1341
|
name: "GatewayError",
|
1460
1342
|
message: "Vercel AI Gateway access failed. If you want to use AI SDK providers directly, use the providers, e.g. @ai-sdk/openai, or register a different global default provider.",
|
1461
1343
|
cause: error
|
@@ -1691,9 +1573,143 @@ function addLanguageModelUsage(usage1, usage2) {
|
|
1691
1573
|
)
|
1692
1574
|
};
|
1693
1575
|
}
|
1694
|
-
function addTokenCounts(tokenCount1, tokenCount2) {
|
1695
|
-
return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
|
1696
|
-
}
|
1576
|
+
function addTokenCounts(tokenCount1, tokenCount2) {
|
1577
|
+
return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
|
1578
|
+
}
|
1579
|
+
|
1580
|
+
// src/util/as-array.ts
|
1581
|
+
function asArray(value) {
|
1582
|
+
return value === void 0 ? [] : Array.isArray(value) ? value : [value];
|
1583
|
+
}
|
1584
|
+
|
1585
|
+
// src/util/retry-with-exponential-backoff.ts
|
1586
|
+
var import_provider20 = require("@ai-sdk/provider");
|
1587
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
1588
|
+
function getRetryDelayInMs({
|
1589
|
+
error,
|
1590
|
+
exponentialBackoffDelay
|
1591
|
+
}) {
|
1592
|
+
const headers = error.responseHeaders;
|
1593
|
+
if (!headers)
|
1594
|
+
return exponentialBackoffDelay;
|
1595
|
+
let ms;
|
1596
|
+
const retryAfterMs = headers["retry-after-ms"];
|
1597
|
+
if (retryAfterMs) {
|
1598
|
+
const timeoutMs = parseFloat(retryAfterMs);
|
1599
|
+
if (!Number.isNaN(timeoutMs)) {
|
1600
|
+
ms = timeoutMs;
|
1601
|
+
}
|
1602
|
+
}
|
1603
|
+
const retryAfter = headers["retry-after"];
|
1604
|
+
if (retryAfter && ms === void 0) {
|
1605
|
+
const timeoutSeconds = parseFloat(retryAfter);
|
1606
|
+
if (!Number.isNaN(timeoutSeconds)) {
|
1607
|
+
ms = timeoutSeconds * 1e3;
|
1608
|
+
} else {
|
1609
|
+
ms = Date.parse(retryAfter) - Date.now();
|
1610
|
+
}
|
1611
|
+
}
|
1612
|
+
if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {
|
1613
|
+
return ms;
|
1614
|
+
}
|
1615
|
+
return exponentialBackoffDelay;
|
1616
|
+
}
|
1617
|
+
var retryWithExponentialBackoffRespectingRetryHeaders = ({
|
1618
|
+
maxRetries = 2,
|
1619
|
+
initialDelayInMs = 2e3,
|
1620
|
+
backoffFactor = 2,
|
1621
|
+
abortSignal
|
1622
|
+
} = {}) => async (f) => _retryWithExponentialBackoff(f, {
|
1623
|
+
maxRetries,
|
1624
|
+
delayInMs: initialDelayInMs,
|
1625
|
+
backoffFactor,
|
1626
|
+
abortSignal
|
1627
|
+
});
|
1628
|
+
async function _retryWithExponentialBackoff(f, {
|
1629
|
+
maxRetries,
|
1630
|
+
delayInMs,
|
1631
|
+
backoffFactor,
|
1632
|
+
abortSignal
|
1633
|
+
}, errors = []) {
|
1634
|
+
try {
|
1635
|
+
return await f();
|
1636
|
+
} catch (error) {
|
1637
|
+
if ((0, import_provider_utils6.isAbortError)(error)) {
|
1638
|
+
throw error;
|
1639
|
+
}
|
1640
|
+
if (maxRetries === 0) {
|
1641
|
+
throw error;
|
1642
|
+
}
|
1643
|
+
const errorMessage = (0, import_provider_utils6.getErrorMessage)(error);
|
1644
|
+
const newErrors = [...errors, error];
|
1645
|
+
const tryNumber = newErrors.length;
|
1646
|
+
if (tryNumber > maxRetries) {
|
1647
|
+
throw new RetryError({
|
1648
|
+
message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
|
1649
|
+
reason: "maxRetriesExceeded",
|
1650
|
+
errors: newErrors
|
1651
|
+
});
|
1652
|
+
}
|
1653
|
+
if (error instanceof Error && import_provider20.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
1654
|
+
await (0, import_provider_utils6.delay)(
|
1655
|
+
getRetryDelayInMs({
|
1656
|
+
error,
|
1657
|
+
exponentialBackoffDelay: delayInMs
|
1658
|
+
}),
|
1659
|
+
{ abortSignal }
|
1660
|
+
);
|
1661
|
+
return _retryWithExponentialBackoff(
|
1662
|
+
f,
|
1663
|
+
{
|
1664
|
+
maxRetries,
|
1665
|
+
delayInMs: backoffFactor * delayInMs,
|
1666
|
+
backoffFactor,
|
1667
|
+
abortSignal
|
1668
|
+
},
|
1669
|
+
newErrors
|
1670
|
+
);
|
1671
|
+
}
|
1672
|
+
if (tryNumber === 1) {
|
1673
|
+
throw error;
|
1674
|
+
}
|
1675
|
+
throw new RetryError({
|
1676
|
+
message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
|
1677
|
+
reason: "errorNotRetryable",
|
1678
|
+
errors: newErrors
|
1679
|
+
});
|
1680
|
+
}
|
1681
|
+
}
|
1682
|
+
|
1683
|
+
// src/util/prepare-retries.ts
|
1684
|
+
function prepareRetries({
|
1685
|
+
maxRetries,
|
1686
|
+
abortSignal
|
1687
|
+
}) {
|
1688
|
+
if (maxRetries != null) {
|
1689
|
+
if (!Number.isInteger(maxRetries)) {
|
1690
|
+
throw new InvalidArgumentError({
|
1691
|
+
parameter: "maxRetries",
|
1692
|
+
value: maxRetries,
|
1693
|
+
message: "maxRetries must be an integer"
|
1694
|
+
});
|
1695
|
+
}
|
1696
|
+
if (maxRetries < 0) {
|
1697
|
+
throw new InvalidArgumentError({
|
1698
|
+
parameter: "maxRetries",
|
1699
|
+
value: maxRetries,
|
1700
|
+
message: "maxRetries must be >= 0"
|
1701
|
+
});
|
1702
|
+
}
|
1703
|
+
}
|
1704
|
+
const maxRetriesResult = maxRetries != null ? maxRetries : 2;
|
1705
|
+
return {
|
1706
|
+
maxRetries: maxRetriesResult,
|
1707
|
+
retry: retryWithExponentialBackoffRespectingRetryHeaders({
|
1708
|
+
maxRetries: maxRetriesResult,
|
1709
|
+
abortSignal
|
1710
|
+
})
|
1711
|
+
};
|
1712
|
+
}
|
1697
1713
|
|
1698
1714
|
// src/generate-text/extract-content-text.ts
|
1699
1715
|
function extractContentText(content) {
|
@@ -1749,38 +1765,50 @@ async function parseToolCall({
|
|
1749
1765
|
system,
|
1750
1766
|
messages
|
1751
1767
|
}) {
|
1752
|
-
if (tools == null) {
|
1753
|
-
throw new NoSuchToolError({ toolName: toolCall.toolName });
|
1754
|
-
}
|
1755
1768
|
try {
|
1756
|
-
|
1757
|
-
|
1758
|
-
if (repairToolCall == null || !(NoSuchToolError.isInstance(error) || InvalidToolInputError.isInstance(error))) {
|
1759
|
-
throw error;
|
1769
|
+
if (tools == null) {
|
1770
|
+
throw new NoSuchToolError({ toolName: toolCall.toolName });
|
1760
1771
|
}
|
1761
|
-
let repairedToolCall = null;
|
1762
1772
|
try {
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1773
|
+
return await doParseToolCall({ toolCall, tools });
|
1774
|
+
} catch (error) {
|
1775
|
+
if (repairToolCall == null || !(NoSuchToolError.isInstance(error) || InvalidToolInputError.isInstance(error))) {
|
1776
|
+
throw error;
|
1777
|
+
}
|
1778
|
+
let repairedToolCall = null;
|
1779
|
+
try {
|
1780
|
+
repairedToolCall = await repairToolCall({
|
1781
|
+
toolCall,
|
1782
|
+
tools,
|
1783
|
+
inputSchema: ({ toolName }) => {
|
1784
|
+
const { inputSchema } = tools[toolName];
|
1785
|
+
return (0, import_provider_utils8.asSchema)(inputSchema).jsonSchema;
|
1786
|
+
},
|
1787
|
+
system,
|
1788
|
+
messages,
|
1789
|
+
error
|
1790
|
+
});
|
1791
|
+
} catch (repairError) {
|
1792
|
+
throw new ToolCallRepairError({
|
1793
|
+
cause: repairError,
|
1794
|
+
originalError: error
|
1795
|
+
});
|
1796
|
+
}
|
1797
|
+
if (repairedToolCall == null) {
|
1798
|
+
throw error;
|
1799
|
+
}
|
1800
|
+
return await doParseToolCall({ toolCall: repairedToolCall, tools });
|
1782
1801
|
}
|
1783
|
-
|
1802
|
+
} catch (error) {
|
1803
|
+
return {
|
1804
|
+
type: "tool-call",
|
1805
|
+
toolCallId: toolCall.toolCallId,
|
1806
|
+
toolName: toolCall.toolName,
|
1807
|
+
input: toolCall.input,
|
1808
|
+
dynamic: true,
|
1809
|
+
invalid: true,
|
1810
|
+
error
|
1811
|
+
};
|
1784
1812
|
}
|
1785
1813
|
}
|
1786
1814
|
async function doParseToolCall({
|
@@ -2230,6 +2258,9 @@ async function generateText({
|
|
2230
2258
|
)
|
2231
2259
|
);
|
2232
2260
|
for (const toolCall of stepToolCalls) {
|
2261
|
+
if (toolCall.invalid) {
|
2262
|
+
continue;
|
2263
|
+
}
|
2233
2264
|
const tool3 = tools[toolCall.toolName];
|
2234
2265
|
if ((tool3 == null ? void 0 : tool3.onInputAvailable) != null) {
|
2235
2266
|
await tool3.onInputAvailable({
|
@@ -2241,18 +2272,38 @@ async function generateText({
|
|
2241
2272
|
});
|
2242
2273
|
}
|
2243
2274
|
}
|
2275
|
+
const invalidToolCalls = stepToolCalls.filter(
|
2276
|
+
(toolCall) => toolCall.invalid && toolCall.dynamic
|
2277
|
+
);
|
2278
|
+
clientToolOutputs = [];
|
2279
|
+
for (const toolCall of invalidToolCalls) {
|
2280
|
+
clientToolOutputs.push({
|
2281
|
+
type: "tool-error",
|
2282
|
+
toolCallId: toolCall.toolCallId,
|
2283
|
+
toolName: toolCall.toolName,
|
2284
|
+
input: toolCall.input,
|
2285
|
+
error: (0, import_provider_utils9.getErrorMessage)(toolCall.error),
|
2286
|
+
dynamic: true
|
2287
|
+
});
|
2288
|
+
}
|
2244
2289
|
clientToolCalls = stepToolCalls.filter(
|
2245
|
-
(toolCall) => toolCall.providerExecuted
|
2290
|
+
(toolCall) => !toolCall.providerExecuted
|
2246
2291
|
);
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2250
|
-
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2292
|
+
if (tools != null) {
|
2293
|
+
clientToolOutputs.push(
|
2294
|
+
...await executeTools({
|
2295
|
+
toolCalls: clientToolCalls.filter(
|
2296
|
+
(toolCall) => !toolCall.invalid
|
2297
|
+
),
|
2298
|
+
tools,
|
2299
|
+
tracer,
|
2300
|
+
telemetry,
|
2301
|
+
messages: stepInputMessages,
|
2302
|
+
abortSignal,
|
2303
|
+
experimental_context
|
2304
|
+
})
|
2305
|
+
);
|
2306
|
+
}
|
2256
2307
|
const stepContent = asContent({
|
2257
2308
|
content: currentModelResponse.content,
|
2258
2309
|
toolCalls: stepToolCalls,
|
@@ -2744,6 +2795,16 @@ var uiMessageChunkSchema = import_v47.z.union([
|
|
2744
2795
|
providerMetadata: providerMetadataSchema.optional(),
|
2745
2796
|
dynamic: import_v47.z.boolean().optional()
|
2746
2797
|
}),
|
2798
|
+
import_v47.z.strictObject({
|
2799
|
+
type: import_v47.z.literal("tool-input-error"),
|
2800
|
+
toolCallId: import_v47.z.string(),
|
2801
|
+
toolName: import_v47.z.string(),
|
2802
|
+
input: import_v47.z.unknown(),
|
2803
|
+
providerExecuted: import_v47.z.boolean().optional(),
|
2804
|
+
providerMetadata: providerMetadataSchema.optional(),
|
2805
|
+
dynamic: import_v47.z.boolean().optional(),
|
2806
|
+
errorText: import_v47.z.string()
|
2807
|
+
}),
|
2747
2808
|
import_v47.z.strictObject({
|
2748
2809
|
type: import_v47.z.literal("tool-output-available"),
|
2749
2810
|
toolCallId: import_v47.z.string(),
|
@@ -3283,6 +3344,7 @@ function processUIMessageStream({
|
|
3283
3344
|
anyPart.input = anyOptions.input;
|
3284
3345
|
anyPart.output = anyOptions.output;
|
3285
3346
|
anyPart.errorText = anyOptions.errorText;
|
3347
|
+
anyPart.rawInput = anyOptions.rawInput;
|
3286
3348
|
anyPart.providerExecuted = (_a17 = anyOptions.providerExecuted) != null ? _a17 : part.providerExecuted;
|
3287
3349
|
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
3288
3350
|
part.callProviderMetadata = anyOptions.providerMetadata;
|
@@ -3294,6 +3356,7 @@ function processUIMessageStream({
|
|
3294
3356
|
state: options.state,
|
3295
3357
|
input: anyOptions.input,
|
3296
3358
|
output: anyOptions.output,
|
3359
|
+
rawInput: anyOptions.rawInput,
|
3297
3360
|
errorText: anyOptions.errorText,
|
3298
3361
|
providerExecuted: anyOptions.providerExecuted,
|
3299
3362
|
...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
|
@@ -3301,6 +3364,7 @@ function processUIMessageStream({
|
|
3301
3364
|
}
|
3302
3365
|
}
|
3303
3366
|
function updateDynamicToolPart(options) {
|
3367
|
+
var _a17;
|
3304
3368
|
const part = state.message.parts.find(
|
3305
3369
|
(part2) => part2.type === "dynamic-tool" && part2.toolCallId === options.toolCallId
|
3306
3370
|
);
|
@@ -3312,6 +3376,7 @@ function processUIMessageStream({
|
|
3312
3376
|
anyPart.input = anyOptions.input;
|
3313
3377
|
anyPart.output = anyOptions.output;
|
3314
3378
|
anyPart.errorText = anyOptions.errorText;
|
3379
|
+
anyPart.rawInput = (_a17 = anyOptions.rawInput) != null ? _a17 : anyPart.rawInput;
|
3315
3380
|
if (anyOptions.providerMetadata != null && part.state === "input-available") {
|
3316
3381
|
part.callProviderMetadata = anyOptions.providerMetadata;
|
3317
3382
|
}
|
@@ -3505,6 +3570,31 @@ function processUIMessageStream({
|
|
3505
3570
|
}
|
3506
3571
|
break;
|
3507
3572
|
}
|
3573
|
+
case "tool-input-error": {
|
3574
|
+
if (chunk.dynamic) {
|
3575
|
+
updateDynamicToolPart({
|
3576
|
+
toolCallId: chunk.toolCallId,
|
3577
|
+
toolName: chunk.toolName,
|
3578
|
+
state: "output-error",
|
3579
|
+
input: chunk.input,
|
3580
|
+
errorText: chunk.errorText,
|
3581
|
+
providerMetadata: chunk.providerMetadata
|
3582
|
+
});
|
3583
|
+
} else {
|
3584
|
+
updateToolPart({
|
3585
|
+
toolCallId: chunk.toolCallId,
|
3586
|
+
toolName: chunk.toolName,
|
3587
|
+
state: "output-error",
|
3588
|
+
input: void 0,
|
3589
|
+
rawInput: chunk.input,
|
3590
|
+
errorText: chunk.errorText,
|
3591
|
+
providerExecuted: chunk.providerExecuted,
|
3592
|
+
providerMetadata: chunk.providerMetadata
|
3593
|
+
});
|
3594
|
+
}
|
3595
|
+
write();
|
3596
|
+
break;
|
3597
|
+
}
|
3508
3598
|
case "tool-output-available": {
|
3509
3599
|
if (chunk.dynamic) {
|
3510
3600
|
const toolInvocation = getDynamicToolInvocation(
|
@@ -3550,6 +3640,7 @@ function processUIMessageStream({
|
|
3550
3640
|
toolName: getToolName(toolInvocation),
|
3551
3641
|
state: "output-error",
|
3552
3642
|
input: toolInvocation.input,
|
3643
|
+
rawInput: toolInvocation.rawInput,
|
3553
3644
|
errorText: chunk.errorText
|
3554
3645
|
});
|
3555
3646
|
}
|
@@ -3888,12 +3979,6 @@ var DelayedPromise = class {
|
|
3888
3979
|
}
|
3889
3980
|
};
|
3890
3981
|
|
3891
|
-
// src/util/now.ts
|
3892
|
-
function now() {
|
3893
|
-
var _a16, _b;
|
3894
|
-
return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();
|
3895
|
-
}
|
3896
|
-
|
3897
3982
|
// src/util/filter-stream-errors.ts
|
3898
3983
|
function filterStreamErrors(readable, onError) {
|
3899
3984
|
return new ReadableStream({
|
@@ -3918,6 +4003,12 @@ function filterStreamErrors(readable, onError) {
|
|
3918
4003
|
});
|
3919
4004
|
}
|
3920
4005
|
|
4006
|
+
// src/util/now.ts
|
4007
|
+
function now() {
|
4008
|
+
var _a16, _b;
|
4009
|
+
return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();
|
4010
|
+
}
|
4011
|
+
|
3921
4012
|
// src/generate-text/run-tools-transformation.ts
|
3922
4013
|
var import_provider_utils12 = require("@ai-sdk/provider-utils");
|
3923
4014
|
function runToolsTransformation({
|
@@ -3999,6 +4090,17 @@ function runToolsTransformation({
|
|
3999
4090
|
messages
|
4000
4091
|
});
|
4001
4092
|
controller.enqueue(toolCall);
|
4093
|
+
if (toolCall.invalid) {
|
4094
|
+
toolResultsStreamController.enqueue({
|
4095
|
+
type: "tool-error",
|
4096
|
+
toolCallId: toolCall.toolCallId,
|
4097
|
+
toolName: toolCall.toolName,
|
4098
|
+
input: toolCall.input,
|
4099
|
+
error: (0, import_provider_utils12.getErrorMessage)(toolCall.error),
|
4100
|
+
dynamic: true
|
4101
|
+
});
|
4102
|
+
break;
|
4103
|
+
}
|
4002
4104
|
const tool3 = tools[toolCall.toolName];
|
4003
4105
|
toolInputs.set(toolCall.toolCallId, toolCall.input);
|
4004
4106
|
if (tool3.onInputAvailable != null) {
|
@@ -4311,6 +4413,7 @@ var DefaultStreamTextResult = class {
|
|
4311
4413
|
this._steps = new DelayedPromise();
|
4312
4414
|
this.output = output;
|
4313
4415
|
this.includeRawChunks = includeRawChunks;
|
4416
|
+
this.tools = tools;
|
4314
4417
|
let stepFinish;
|
4315
4418
|
let recordedContent = [];
|
4316
4419
|
const recordedResponseMessages = [];
|
@@ -5119,6 +5222,13 @@ var DefaultStreamTextResult = class {
|
|
5119
5222
|
originalMessages,
|
5120
5223
|
responseMessageId: generateMessageId
|
5121
5224
|
}) : void 0;
|
5225
|
+
const toolNamesByCallId = {};
|
5226
|
+
const isDynamic = (toolCallId) => {
|
5227
|
+
var _a16, _b;
|
5228
|
+
const toolName = toolNamesByCallId[toolCallId];
|
5229
|
+
const dynamic = ((_b = (_a16 = this.tools) == null ? void 0 : _a16[toolName]) == null ? void 0 : _b.type) === "dynamic";
|
5230
|
+
return dynamic ? true : void 0;
|
5231
|
+
};
|
5122
5232
|
const baseStream = this.fullStream.pipeThrough(
|
5123
5233
|
new TransformStream({
|
5124
5234
|
transform: async (part, controller) => {
|
@@ -5208,12 +5318,14 @@ var DefaultStreamTextResult = class {
|
|
5208
5318
|
break;
|
5209
5319
|
}
|
5210
5320
|
case "tool-input-start": {
|
5321
|
+
toolNamesByCallId[part.id] = part.toolName;
|
5322
|
+
const dynamic = isDynamic(part.id);
|
5211
5323
|
controller.enqueue({
|
5212
5324
|
type: "tool-input-start",
|
5213
5325
|
toolCallId: part.id,
|
5214
5326
|
toolName: part.toolName,
|
5215
5327
|
...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
|
5216
|
-
...
|
5328
|
+
...dynamic != null ? { dynamic } : {}
|
5217
5329
|
});
|
5218
5330
|
break;
|
5219
5331
|
}
|
@@ -5226,34 +5338,51 @@ var DefaultStreamTextResult = class {
|
|
5226
5338
|
break;
|
5227
5339
|
}
|
5228
5340
|
case "tool-call": {
|
5229
|
-
|
5230
|
-
|
5231
|
-
|
5232
|
-
|
5233
|
-
|
5234
|
-
|
5235
|
-
|
5236
|
-
|
5237
|
-
|
5341
|
+
toolNamesByCallId[part.toolCallId] = part.toolName;
|
5342
|
+
const dynamic = isDynamic(part.toolCallId);
|
5343
|
+
if (part.invalid) {
|
5344
|
+
controller.enqueue({
|
5345
|
+
type: "tool-input-error",
|
5346
|
+
toolCallId: part.toolCallId,
|
5347
|
+
toolName: part.toolName,
|
5348
|
+
input: part.input,
|
5349
|
+
...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
|
5350
|
+
...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},
|
5351
|
+
...dynamic != null ? { dynamic } : {},
|
5352
|
+
errorText: onError(part.error)
|
5353
|
+
});
|
5354
|
+
} else {
|
5355
|
+
controller.enqueue({
|
5356
|
+
type: "tool-input-available",
|
5357
|
+
toolCallId: part.toolCallId,
|
5358
|
+
toolName: part.toolName,
|
5359
|
+
input: part.input,
|
5360
|
+
...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
|
5361
|
+
...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},
|
5362
|
+
...dynamic != null ? { dynamic } : {}
|
5363
|
+
});
|
5364
|
+
}
|
5238
5365
|
break;
|
5239
5366
|
}
|
5240
5367
|
case "tool-result": {
|
5368
|
+
const dynamic = isDynamic(part.toolCallId);
|
5241
5369
|
controller.enqueue({
|
5242
5370
|
type: "tool-output-available",
|
5243
5371
|
toolCallId: part.toolCallId,
|
5244
5372
|
output: part.output,
|
5245
5373
|
...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
|
5246
|
-
...
|
5374
|
+
...dynamic != null ? { dynamic } : {}
|
5247
5375
|
});
|
5248
5376
|
break;
|
5249
5377
|
}
|
5250
5378
|
case "tool-error": {
|
5379
|
+
const dynamic = isDynamic(part.toolCallId);
|
5251
5380
|
controller.enqueue({
|
5252
5381
|
type: "tool-output-error",
|
5253
5382
|
toolCallId: part.toolCallId,
|
5254
5383
|
errorText: onError(part.error),
|
5255
5384
|
...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
|
5256
|
-
...
|
5385
|
+
...dynamic != null ? { dynamic } : {}
|
5257
5386
|
});
|
5258
5387
|
break;
|
5259
5388
|
}
|
@@ -5410,7 +5539,7 @@ var Agent = class {
|
|
5410
5539
|
|
5411
5540
|
// src/embed/embed.ts
|
5412
5541
|
async function embed({
|
5413
|
-
model,
|
5542
|
+
model: modelArg,
|
5414
5543
|
value,
|
5415
5544
|
providerOptions,
|
5416
5545
|
maxRetries: maxRetriesArg,
|
@@ -5418,13 +5547,7 @@ async function embed({
|
|
5418
5547
|
headers,
|
5419
5548
|
experimental_telemetry: telemetry
|
5420
5549
|
}) {
|
5421
|
-
|
5422
|
-
throw new UnsupportedModelVersionError({
|
5423
|
-
version: model.specificationVersion,
|
5424
|
-
provider: model.provider,
|
5425
|
-
modelId: model.modelId
|
5426
|
-
});
|
5427
|
-
}
|
5550
|
+
const model = resolveEmbeddingModel(modelArg);
|
5428
5551
|
const { maxRetries, retry } = prepareRetries({
|
5429
5552
|
maxRetries: maxRetriesArg,
|
5430
5553
|
abortSignal
|
@@ -5542,7 +5665,7 @@ function splitArray(array, chunkSize) {
|
|
5542
5665
|
|
5543
5666
|
// src/embed/embed-many.ts
|
5544
5667
|
async function embedMany({
|
5545
|
-
model,
|
5668
|
+
model: modelArg,
|
5546
5669
|
values,
|
5547
5670
|
maxParallelCalls = Infinity,
|
5548
5671
|
maxRetries: maxRetriesArg,
|
@@ -5551,13 +5674,7 @@ async function embedMany({
|
|
5551
5674
|
providerOptions,
|
5552
5675
|
experimental_telemetry: telemetry
|
5553
5676
|
}) {
|
5554
|
-
|
5555
|
-
throw new UnsupportedModelVersionError({
|
5556
|
-
version: model.specificationVersion,
|
5557
|
-
provider: model.provider,
|
5558
|
-
modelId: model.modelId
|
5559
|
-
});
|
5560
|
-
}
|
5677
|
+
const model = resolveEmbeddingModel(modelArg);
|
5561
5678
|
const { maxRetries, retry } = prepareRetries({
|
5562
5679
|
maxRetries: maxRetriesArg,
|
5563
5680
|
abortSignal
|
@@ -6149,6 +6266,63 @@ function getOutputStrategy({
|
|
6149
6266
|
}
|
6150
6267
|
}
|
6151
6268
|
|
6269
|
+
// src/generate-object/parse-and-validate-object-result.ts
|
6270
|
+
var import_provider24 = require("@ai-sdk/provider");
|
6271
|
+
var import_provider_utils15 = require("@ai-sdk/provider-utils");
|
6272
|
+
async function parseAndValidateObjectResult(result, outputStrategy, context) {
|
6273
|
+
const parseResult = await (0, import_provider_utils15.safeParseJSON)({ text: result });
|
6274
|
+
if (!parseResult.success) {
|
6275
|
+
throw new NoObjectGeneratedError({
|
6276
|
+
message: "No object generated: could not parse the response.",
|
6277
|
+
cause: parseResult.error,
|
6278
|
+
text: result,
|
6279
|
+
response: context.response,
|
6280
|
+
usage: context.usage,
|
6281
|
+
finishReason: context.finishReason
|
6282
|
+
});
|
6283
|
+
}
|
6284
|
+
const validationResult = await outputStrategy.validateFinalResult(
|
6285
|
+
parseResult.value,
|
6286
|
+
{
|
6287
|
+
text: result,
|
6288
|
+
response: context.response,
|
6289
|
+
usage: context.usage
|
6290
|
+
}
|
6291
|
+
);
|
6292
|
+
if (!validationResult.success) {
|
6293
|
+
throw new NoObjectGeneratedError({
|
6294
|
+
message: "No object generated: response did not match schema.",
|
6295
|
+
cause: validationResult.error,
|
6296
|
+
text: result,
|
6297
|
+
response: context.response,
|
6298
|
+
usage: context.usage,
|
6299
|
+
finishReason: context.finishReason
|
6300
|
+
});
|
6301
|
+
}
|
6302
|
+
return validationResult.value;
|
6303
|
+
}
|
6304
|
+
async function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {
|
6305
|
+
try {
|
6306
|
+
return await parseAndValidateObjectResult(result, outputStrategy, context);
|
6307
|
+
} catch (error) {
|
6308
|
+
if (repairText != null && NoObjectGeneratedError.isInstance(error) && (import_provider24.JSONParseError.isInstance(error.cause) || import_provider24.TypeValidationError.isInstance(error.cause))) {
|
6309
|
+
const repairedText = await repairText({
|
6310
|
+
text: result,
|
6311
|
+
error: error.cause
|
6312
|
+
});
|
6313
|
+
if (repairedText === null) {
|
6314
|
+
throw error;
|
6315
|
+
}
|
6316
|
+
return await parseAndValidateObjectResult(
|
6317
|
+
repairedText,
|
6318
|
+
outputStrategy,
|
6319
|
+
context
|
6320
|
+
);
|
6321
|
+
}
|
6322
|
+
throw error;
|
6323
|
+
}
|
6324
|
+
}
|
6325
|
+
|
6152
6326
|
// src/generate-object/validate-object-generation-input.ts
|
6153
6327
|
function validateObjectGenerationInput({
|
6154
6328
|
output,
|
@@ -6267,63 +6441,6 @@ function validateObjectGenerationInput({
|
|
6267
6441
|
}
|
6268
6442
|
}
|
6269
6443
|
|
6270
|
-
// src/generate-object/parse-and-validate-object-result.ts
|
6271
|
-
var import_provider24 = require("@ai-sdk/provider");
|
6272
|
-
var import_provider_utils15 = require("@ai-sdk/provider-utils");
|
6273
|
-
async function parseAndValidateObjectResult(result, outputStrategy, context) {
|
6274
|
-
const parseResult = await (0, import_provider_utils15.safeParseJSON)({ text: result });
|
6275
|
-
if (!parseResult.success) {
|
6276
|
-
throw new NoObjectGeneratedError({
|
6277
|
-
message: "No object generated: could not parse the response.",
|
6278
|
-
cause: parseResult.error,
|
6279
|
-
text: result,
|
6280
|
-
response: context.response,
|
6281
|
-
usage: context.usage,
|
6282
|
-
finishReason: context.finishReason
|
6283
|
-
});
|
6284
|
-
}
|
6285
|
-
const validationResult = await outputStrategy.validateFinalResult(
|
6286
|
-
parseResult.value,
|
6287
|
-
{
|
6288
|
-
text: result,
|
6289
|
-
response: context.response,
|
6290
|
-
usage: context.usage
|
6291
|
-
}
|
6292
|
-
);
|
6293
|
-
if (!validationResult.success) {
|
6294
|
-
throw new NoObjectGeneratedError({
|
6295
|
-
message: "No object generated: response did not match schema.",
|
6296
|
-
cause: validationResult.error,
|
6297
|
-
text: result,
|
6298
|
-
response: context.response,
|
6299
|
-
usage: context.usage,
|
6300
|
-
finishReason: context.finishReason
|
6301
|
-
});
|
6302
|
-
}
|
6303
|
-
return validationResult.value;
|
6304
|
-
}
|
6305
|
-
async function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {
|
6306
|
-
try {
|
6307
|
-
return await parseAndValidateObjectResult(result, outputStrategy, context);
|
6308
|
-
} catch (error) {
|
6309
|
-
if (repairText != null && NoObjectGeneratedError.isInstance(error) && (import_provider24.JSONParseError.isInstance(error.cause) || import_provider24.TypeValidationError.isInstance(error.cause))) {
|
6310
|
-
const repairedText = await repairText({
|
6311
|
-
text: result,
|
6312
|
-
error: error.cause
|
6313
|
-
});
|
6314
|
-
if (repairedText === null) {
|
6315
|
-
throw error;
|
6316
|
-
}
|
6317
|
-
return await parseAndValidateObjectResult(
|
6318
|
-
repairedText,
|
6319
|
-
outputStrategy,
|
6320
|
-
context
|
6321
|
-
);
|
6322
|
-
}
|
6323
|
-
throw error;
|
6324
|
-
}
|
6325
|
-
}
|
6326
|
-
|
6327
6444
|
// src/generate-object/generate-object.ts
|
6328
6445
|
var originalGenerateId3 = (0, import_provider_utils16.createIdGenerator)({ prefix: "aiobj", size: 24 });
|
6329
6446
|
async function generateObject(options) {
|
@@ -9288,7 +9405,7 @@ function convertToModelMessages(messages, options) {
|
|
9288
9405
|
case "assistant": {
|
9289
9406
|
if (message.parts != null) {
|
9290
9407
|
let processBlock2 = function() {
|
9291
|
-
var _a16;
|
9408
|
+
var _a16, _b;
|
9292
9409
|
if (block.length === 0) {
|
9293
9410
|
return;
|
9294
9411
|
}
|
@@ -9340,7 +9457,7 @@ function convertToModelMessages(messages, options) {
|
|
9340
9457
|
type: "tool-call",
|
9341
9458
|
toolCallId: part.toolCallId,
|
9342
9459
|
toolName,
|
9343
|
-
input: part.input,
|
9460
|
+
input: part.state === "output-error" ? (_a16 = part.input) != null ? _a16 : part.rawInput : part.input,
|
9344
9461
|
providerExecuted: part.providerExecuted,
|
9345
9462
|
...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
|
9346
9463
|
});
|
@@ -9351,7 +9468,7 @@ function convertToModelMessages(messages, options) {
|
|
9351
9468
|
toolName,
|
9352
9469
|
output: createToolModelOutput({
|
9353
9470
|
output: part.state === "output-error" ? part.errorText : part.output,
|
9354
|
-
tool: (
|
9471
|
+
tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
|
9355
9472
|
errorMode: part.state === "output-error" ? "json" : "none"
|
9356
9473
|
})
|
9357
9474
|
});
|