@ai-sdk/provider-utils 3.0.0-alpha.9 → 3.0.0-beta.10
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 +129 -0
- package/dist/index.d.mts +494 -101
- package/dist/index.d.ts +494 -101
- package/dist/index.js +187 -178
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +162 -153
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
package/dist/index.js
CHANGED
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
31
31
|
// src/index.ts
|
32
32
|
var src_exports = {};
|
33
33
|
__export(src_exports, {
|
34
|
+
EventSourceParserStream: () => import_stream2.EventSourceParserStream,
|
34
35
|
asSchema: () => asSchema,
|
35
36
|
asValidator: () => asValidator,
|
36
37
|
combineHeaders: () => combineHeaders,
|
@@ -39,14 +40,16 @@ __export(src_exports, {
|
|
39
40
|
convertToBase64: () => convertToBase64,
|
40
41
|
convertUint8ArrayToBase64: () => convertUint8ArrayToBase64,
|
41
42
|
createBinaryResponseHandler: () => createBinaryResponseHandler,
|
42
|
-
createEventSourceParserStream: () => createEventSourceParserStream,
|
43
43
|
createEventSourceResponseHandler: () => createEventSourceResponseHandler,
|
44
44
|
createIdGenerator: () => createIdGenerator,
|
45
45
|
createJsonErrorResponseHandler: () => createJsonErrorResponseHandler,
|
46
46
|
createJsonResponseHandler: () => createJsonResponseHandler,
|
47
47
|
createJsonStreamResponseHandler: () => createJsonStreamResponseHandler,
|
48
|
+
createProviderDefinedToolFactory: () => createProviderDefinedToolFactory,
|
49
|
+
createProviderDefinedToolFactoryWithOutputSchema: () => createProviderDefinedToolFactoryWithOutputSchema,
|
48
50
|
createStatusCodeErrorResponseHandler: () => createStatusCodeErrorResponseHandler,
|
49
51
|
delay: () => delay,
|
52
|
+
dynamicTool: () => dynamicTool,
|
50
53
|
extractResponseHeaders: () => extractResponseHeaders,
|
51
54
|
generateId: () => generateId,
|
52
55
|
getErrorMessage: () => getErrorMessage,
|
@@ -70,6 +73,7 @@ __export(src_exports, {
|
|
70
73
|
safeParseJSON: () => safeParseJSON,
|
71
74
|
safeValidateTypes: () => safeValidateTypes,
|
72
75
|
standardSchemaValidator: () => standardSchemaValidator,
|
76
|
+
tool: () => tool,
|
73
77
|
validateTypes: () => validateTypes,
|
74
78
|
validator: () => validator,
|
75
79
|
validatorSymbol: () => validatorSymbol,
|
@@ -119,100 +123,33 @@ function convertAsyncIteratorToReadableStream(iterator) {
|
|
119
123
|
}
|
120
124
|
|
121
125
|
// src/delay.ts
|
122
|
-
async function delay(delayInMs) {
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
// src/event-source-parser-stream.ts
|
127
|
-
function createEventSourceParserStream() {
|
128
|
-
let buffer = "";
|
129
|
-
let event = void 0;
|
130
|
-
let data = [];
|
131
|
-
let lastEventId = void 0;
|
132
|
-
let retry = void 0;
|
133
|
-
function parseLine(line, controller) {
|
134
|
-
if (line === "") {
|
135
|
-
dispatchEvent(controller);
|
136
|
-
return;
|
137
|
-
}
|
138
|
-
if (line.startsWith(":")) {
|
139
|
-
return;
|
140
|
-
}
|
141
|
-
const colonIndex = line.indexOf(":");
|
142
|
-
if (colonIndex === -1) {
|
143
|
-
handleField(line, "");
|
144
|
-
return;
|
145
|
-
}
|
146
|
-
const field = line.slice(0, colonIndex);
|
147
|
-
const valueStart = colonIndex + 1;
|
148
|
-
const value = valueStart < line.length && line[valueStart] === " " ? line.slice(valueStart + 1) : line.slice(valueStart);
|
149
|
-
handleField(field, value);
|
150
|
-
}
|
151
|
-
function dispatchEvent(controller) {
|
152
|
-
if (data.length > 0) {
|
153
|
-
controller.enqueue({
|
154
|
-
event,
|
155
|
-
data: data.join("\n"),
|
156
|
-
id: lastEventId,
|
157
|
-
retry
|
158
|
-
});
|
159
|
-
data = [];
|
160
|
-
event = void 0;
|
161
|
-
retry = void 0;
|
162
|
-
}
|
163
|
-
}
|
164
|
-
function handleField(field, value) {
|
165
|
-
switch (field) {
|
166
|
-
case "event":
|
167
|
-
event = value;
|
168
|
-
break;
|
169
|
-
case "data":
|
170
|
-
data.push(value);
|
171
|
-
break;
|
172
|
-
case "id":
|
173
|
-
lastEventId = value;
|
174
|
-
break;
|
175
|
-
case "retry":
|
176
|
-
const parsedRetry = parseInt(value, 10);
|
177
|
-
if (!isNaN(parsedRetry)) {
|
178
|
-
retry = parsedRetry;
|
179
|
-
}
|
180
|
-
break;
|
181
|
-
}
|
126
|
+
async function delay(delayInMs, options) {
|
127
|
+
if (delayInMs == null) {
|
128
|
+
return Promise.resolve();
|
182
129
|
}
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
parseLine(lines[i], controller);
|
189
|
-
}
|
190
|
-
},
|
191
|
-
flush(controller) {
|
192
|
-
parseLine(buffer, controller);
|
193
|
-
dispatchEvent(controller);
|
130
|
+
const signal = options == null ? void 0 : options.abortSignal;
|
131
|
+
return new Promise((resolve2, reject) => {
|
132
|
+
if (signal == null ? void 0 : signal.aborted) {
|
133
|
+
reject(createAbortError());
|
134
|
+
return;
|
194
135
|
}
|
136
|
+
const timeoutId = setTimeout(() => {
|
137
|
+
cleanup();
|
138
|
+
resolve2();
|
139
|
+
}, delayInMs);
|
140
|
+
const cleanup = () => {
|
141
|
+
clearTimeout(timeoutId);
|
142
|
+
signal == null ? void 0 : signal.removeEventListener("abort", onAbort);
|
143
|
+
};
|
144
|
+
const onAbort = () => {
|
145
|
+
cleanup();
|
146
|
+
reject(createAbortError());
|
147
|
+
};
|
148
|
+
signal == null ? void 0 : signal.addEventListener("abort", onAbort);
|
195
149
|
});
|
196
150
|
}
|
197
|
-
function
|
198
|
-
|
199
|
-
let currentLine = buffer;
|
200
|
-
for (let i = 0; i < chunk.length; ) {
|
201
|
-
const char = chunk[i++];
|
202
|
-
if (char === "\n") {
|
203
|
-
lines.push(currentLine);
|
204
|
-
currentLine = "";
|
205
|
-
} else if (char === "\r") {
|
206
|
-
lines.push(currentLine);
|
207
|
-
currentLine = "";
|
208
|
-
if (chunk[i] === "\n") {
|
209
|
-
i++;
|
210
|
-
}
|
211
|
-
} else {
|
212
|
-
currentLine += char;
|
213
|
-
}
|
214
|
-
}
|
215
|
-
return { lines, incompleteLine: currentLine };
|
151
|
+
function createAbortError() {
|
152
|
+
return new DOMException("Delay was aborted", "AbortError");
|
216
153
|
}
|
217
154
|
|
218
155
|
// src/extract-response-headers.ts
|
@@ -264,8 +201,43 @@ function getErrorMessage(error) {
|
|
264
201
|
}
|
265
202
|
|
266
203
|
// src/get-from-api.ts
|
204
|
+
var import_provider3 = require("@ai-sdk/provider");
|
205
|
+
|
206
|
+
// src/handle-fetch-error.ts
|
267
207
|
var import_provider2 = require("@ai-sdk/provider");
|
268
208
|
|
209
|
+
// src/is-abort-error.ts
|
210
|
+
function isAbortError(error) {
|
211
|
+
return (error instanceof Error || error instanceof DOMException) && (error.name === "AbortError" || error.name === "ResponseAborted" || // Next.js
|
212
|
+
error.name === "TimeoutError");
|
213
|
+
}
|
214
|
+
|
215
|
+
// src/handle-fetch-error.ts
|
216
|
+
var FETCH_FAILED_ERROR_MESSAGES = ["fetch failed", "failed to fetch"];
|
217
|
+
function handleFetchError({
|
218
|
+
error,
|
219
|
+
url,
|
220
|
+
requestBodyValues
|
221
|
+
}) {
|
222
|
+
if (isAbortError(error)) {
|
223
|
+
return error;
|
224
|
+
}
|
225
|
+
if (error instanceof TypeError && FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())) {
|
226
|
+
const cause = error.cause;
|
227
|
+
if (cause != null) {
|
228
|
+
return new import_provider2.APICallError({
|
229
|
+
message: `Cannot connect to API: ${cause.message}`,
|
230
|
+
cause,
|
231
|
+
url,
|
232
|
+
requestBodyValues,
|
233
|
+
isRetryable: true
|
234
|
+
// retry when network error
|
235
|
+
});
|
236
|
+
}
|
237
|
+
}
|
238
|
+
return error;
|
239
|
+
}
|
240
|
+
|
269
241
|
// src/remove-undefined-entries.ts
|
270
242
|
function removeUndefinedEntries(record) {
|
271
243
|
return Object.fromEntries(
|
@@ -273,11 +245,6 @@ function removeUndefinedEntries(record) {
|
|
273
245
|
);
|
274
246
|
}
|
275
247
|
|
276
|
-
// src/is-abort-error.ts
|
277
|
-
function isAbortError(error) {
|
278
|
-
return error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError");
|
279
|
-
}
|
280
|
-
|
281
248
|
// src/get-from-api.ts
|
282
249
|
var getOriginalFetch = () => globalThis.fetch;
|
283
250
|
var getFromApi = async ({
|
@@ -304,10 +271,10 @@ var getFromApi = async ({
|
|
304
271
|
requestBodyValues: {}
|
305
272
|
});
|
306
273
|
} catch (error) {
|
307
|
-
if (isAbortError(error) ||
|
274
|
+
if (isAbortError(error) || import_provider3.APICallError.isInstance(error)) {
|
308
275
|
throw error;
|
309
276
|
}
|
310
|
-
throw new
|
277
|
+
throw new import_provider3.APICallError({
|
311
278
|
message: "Failed to process error response",
|
312
279
|
cause: error,
|
313
280
|
statusCode: response.status,
|
@@ -326,11 +293,11 @@ var getFromApi = async ({
|
|
326
293
|
});
|
327
294
|
} catch (error) {
|
328
295
|
if (error instanceof Error) {
|
329
|
-
if (isAbortError(error) ||
|
296
|
+
if (isAbortError(error) || import_provider3.APICallError.isInstance(error)) {
|
330
297
|
throw error;
|
331
298
|
}
|
332
299
|
}
|
333
|
-
throw new
|
300
|
+
throw new import_provider3.APICallError({
|
334
301
|
message: "Failed to process successful response",
|
335
302
|
cause: error,
|
336
303
|
statusCode: response.status,
|
@@ -340,22 +307,7 @@ var getFromApi = async ({
|
|
340
307
|
});
|
341
308
|
}
|
342
309
|
} catch (error) {
|
343
|
-
|
344
|
-
throw error;
|
345
|
-
}
|
346
|
-
if (error instanceof TypeError && error.message === "fetch failed") {
|
347
|
-
const cause = error.cause;
|
348
|
-
if (cause != null) {
|
349
|
-
throw new import_provider2.APICallError({
|
350
|
-
message: `Cannot connect to API: ${cause.message}`,
|
351
|
-
cause,
|
352
|
-
url,
|
353
|
-
isRetryable: true,
|
354
|
-
requestBodyValues: {}
|
355
|
-
});
|
356
|
-
}
|
357
|
-
}
|
358
|
-
throw error;
|
310
|
+
throw handleFetchError({ error, url, requestBodyValues: {} });
|
359
311
|
}
|
360
312
|
};
|
361
313
|
|
@@ -374,7 +326,7 @@ function isUrlSupported({
|
|
374
326
|
}
|
375
327
|
|
376
328
|
// src/load-api-key.ts
|
377
|
-
var
|
329
|
+
var import_provider4 = require("@ai-sdk/provider");
|
378
330
|
function loadApiKey({
|
379
331
|
apiKey,
|
380
332
|
environmentVariableName,
|
@@ -385,23 +337,23 @@ function loadApiKey({
|
|
385
337
|
return apiKey;
|
386
338
|
}
|
387
339
|
if (apiKey != null) {
|
388
|
-
throw new
|
340
|
+
throw new import_provider4.LoadAPIKeyError({
|
389
341
|
message: `${description} API key must be a string.`
|
390
342
|
});
|
391
343
|
}
|
392
344
|
if (typeof process === "undefined") {
|
393
|
-
throw new
|
345
|
+
throw new import_provider4.LoadAPIKeyError({
|
394
346
|
message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`
|
395
347
|
});
|
396
348
|
}
|
397
349
|
apiKey = process.env[environmentVariableName];
|
398
350
|
if (apiKey == null) {
|
399
|
-
throw new
|
351
|
+
throw new import_provider4.LoadAPIKeyError({
|
400
352
|
message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`
|
401
353
|
});
|
402
354
|
}
|
403
355
|
if (typeof apiKey !== "string") {
|
404
|
-
throw new
|
356
|
+
throw new import_provider4.LoadAPIKeyError({
|
405
357
|
message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`
|
406
358
|
});
|
407
359
|
}
|
@@ -427,7 +379,7 @@ function loadOptionalSetting({
|
|
427
379
|
}
|
428
380
|
|
429
381
|
// src/load-setting.ts
|
430
|
-
var
|
382
|
+
var import_provider5 = require("@ai-sdk/provider");
|
431
383
|
function loadSetting({
|
432
384
|
settingValue,
|
433
385
|
environmentVariableName,
|
@@ -438,23 +390,23 @@ function loadSetting({
|
|
438
390
|
return settingValue;
|
439
391
|
}
|
440
392
|
if (settingValue != null) {
|
441
|
-
throw new
|
393
|
+
throw new import_provider5.LoadSettingError({
|
442
394
|
message: `${description} setting must be a string.`
|
443
395
|
});
|
444
396
|
}
|
445
397
|
if (typeof process === "undefined") {
|
446
|
-
throw new
|
398
|
+
throw new import_provider5.LoadSettingError({
|
447
399
|
message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`
|
448
400
|
});
|
449
401
|
}
|
450
402
|
settingValue = process.env[environmentVariableName];
|
451
403
|
if (settingValue == null) {
|
452
|
-
throw new
|
404
|
+
throw new import_provider5.LoadSettingError({
|
453
405
|
message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`
|
454
406
|
});
|
455
407
|
}
|
456
408
|
if (typeof settingValue !== "string") {
|
457
|
-
throw new
|
409
|
+
throw new import_provider5.LoadSettingError({
|
458
410
|
message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`
|
459
411
|
});
|
460
412
|
}
|
@@ -462,7 +414,7 @@ function loadSetting({
|
|
462
414
|
}
|
463
415
|
|
464
416
|
// src/parse-json.ts
|
465
|
-
var
|
417
|
+
var import_provider8 = require("@ai-sdk/provider");
|
466
418
|
|
467
419
|
// src/secure-json-parse.ts
|
468
420
|
var suspectProtoRx = /"__proto__"\s*:/;
|
@@ -510,10 +462,10 @@ function secureJsonParse(text) {
|
|
510
462
|
}
|
511
463
|
|
512
464
|
// src/validate-types.ts
|
513
|
-
var
|
465
|
+
var import_provider7 = require("@ai-sdk/provider");
|
514
466
|
|
515
467
|
// src/validator.ts
|
516
|
-
var
|
468
|
+
var import_provider6 = require("@ai-sdk/provider");
|
517
469
|
var validatorSymbol = Symbol.for("vercel.ai.validator");
|
518
470
|
function validator(validate) {
|
519
471
|
return { [validatorSymbol]: true, validate };
|
@@ -529,7 +481,7 @@ function standardSchemaValidator(standardSchema) {
|
|
529
481
|
const result = await standardSchema["~standard"].validate(value);
|
530
482
|
return result.issues == null ? { success: true, value: result.value } : {
|
531
483
|
success: false,
|
532
|
-
error: new
|
484
|
+
error: new import_provider6.TypeValidationError({
|
533
485
|
value,
|
534
486
|
cause: result.issues
|
535
487
|
})
|
@@ -544,7 +496,7 @@ async function validateTypes({
|
|
544
496
|
}) {
|
545
497
|
const result = await safeValidateTypes({ value, schema });
|
546
498
|
if (!result.success) {
|
547
|
-
throw
|
499
|
+
throw import_provider7.TypeValidationError.wrap({ value, cause: result.error });
|
548
500
|
}
|
549
501
|
return result.value;
|
550
502
|
}
|
@@ -563,20 +515,23 @@ async function safeValidateTypes({
|
|
563
515
|
}
|
564
516
|
return {
|
565
517
|
success: false,
|
566
|
-
error:
|
518
|
+
error: import_provider7.TypeValidationError.wrap({ value, cause: result.error }),
|
567
519
|
rawValue: value
|
568
520
|
};
|
569
521
|
} catch (error) {
|
570
522
|
return {
|
571
523
|
success: false,
|
572
|
-
error:
|
524
|
+
error: import_provider7.TypeValidationError.wrap({ value, cause: error }),
|
573
525
|
rawValue: value
|
574
526
|
};
|
575
527
|
}
|
576
528
|
}
|
577
529
|
|
578
530
|
// src/parse-json.ts
|
579
|
-
async function parseJSON({
|
531
|
+
async function parseJSON({
|
532
|
+
text,
|
533
|
+
schema
|
534
|
+
}) {
|
580
535
|
try {
|
581
536
|
const value = secureJsonParse(text);
|
582
537
|
if (schema == null) {
|
@@ -584,10 +539,10 @@ async function parseJSON({ text, schema }) {
|
|
584
539
|
}
|
585
540
|
return validateTypes({ value, schema });
|
586
541
|
} catch (error) {
|
587
|
-
if (
|
542
|
+
if (import_provider8.JSONParseError.isInstance(error) || import_provider8.TypeValidationError.isInstance(error)) {
|
588
543
|
throw error;
|
589
544
|
}
|
590
|
-
throw new
|
545
|
+
throw new import_provider8.JSONParseError({ text, cause: error });
|
591
546
|
}
|
592
547
|
}
|
593
548
|
async function safeParseJSON({
|
@@ -603,7 +558,7 @@ async function safeParseJSON({
|
|
603
558
|
} catch (error) {
|
604
559
|
return {
|
605
560
|
success: false,
|
606
|
-
error:
|
561
|
+
error: import_provider8.JSONParseError.isInstance(error) ? error : new import_provider8.JSONParseError({ text, cause: error }),
|
607
562
|
rawValue: void 0
|
608
563
|
};
|
609
564
|
}
|
@@ -618,11 +573,12 @@ function isParsableJson(input) {
|
|
618
573
|
}
|
619
574
|
|
620
575
|
// src/parse-json-event-stream.ts
|
576
|
+
var import_stream = require("eventsource-parser/stream");
|
621
577
|
function parseJsonEventStream({
|
622
578
|
stream,
|
623
579
|
schema
|
624
580
|
}) {
|
625
|
-
return stream.pipeThrough(new TextDecoderStream()).pipeThrough(
|
581
|
+
return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new import_stream.EventSourceParserStream()).pipeThrough(
|
626
582
|
new TransformStream({
|
627
583
|
async transform({ data }, controller) {
|
628
584
|
if (data === "[DONE]") {
|
@@ -635,7 +591,7 @@ function parseJsonEventStream({
|
|
635
591
|
}
|
636
592
|
|
637
593
|
// src/parse-provider-options.ts
|
638
|
-
var
|
594
|
+
var import_provider9 = require("@ai-sdk/provider");
|
639
595
|
async function parseProviderOptions({
|
640
596
|
provider,
|
641
597
|
providerOptions,
|
@@ -649,7 +605,7 @@ async function parseProviderOptions({
|
|
649
605
|
schema
|
650
606
|
});
|
651
607
|
if (!parsedProviderOptions.success) {
|
652
|
-
throw new
|
608
|
+
throw new import_provider9.InvalidArgumentError({
|
653
609
|
argument: "providerOptions",
|
654
610
|
message: `invalid ${provider} provider options`,
|
655
611
|
cause: parsedProviderOptions.error
|
@@ -659,7 +615,7 @@ async function parseProviderOptions({
|
|
659
615
|
}
|
660
616
|
|
661
617
|
// src/post-to-api.ts
|
662
|
-
var
|
618
|
+
var import_provider10 = require("@ai-sdk/provider");
|
663
619
|
var getOriginalFetch2 = () => globalThis.fetch;
|
664
620
|
var postJsonToApi = async ({
|
665
621
|
url,
|
@@ -730,10 +686,10 @@ var postToApi = async ({
|
|
730
686
|
requestBodyValues: body.values
|
731
687
|
});
|
732
688
|
} catch (error) {
|
733
|
-
if (isAbortError(error) ||
|
689
|
+
if (isAbortError(error) || import_provider10.APICallError.isInstance(error)) {
|
734
690
|
throw error;
|
735
691
|
}
|
736
|
-
throw new
|
692
|
+
throw new import_provider10.APICallError({
|
737
693
|
message: "Failed to process error response",
|
738
694
|
cause: error,
|
739
695
|
statusCode: response.status,
|
@@ -752,11 +708,11 @@ var postToApi = async ({
|
|
752
708
|
});
|
753
709
|
} catch (error) {
|
754
710
|
if (error instanceof Error) {
|
755
|
-
if (isAbortError(error) ||
|
711
|
+
if (isAbortError(error) || import_provider10.APICallError.isInstance(error)) {
|
756
712
|
throw error;
|
757
713
|
}
|
758
714
|
}
|
759
|
-
throw new
|
715
|
+
throw new import_provider10.APICallError({
|
760
716
|
message: "Failed to process successful response",
|
761
717
|
cause: error,
|
762
718
|
statusCode: response.status,
|
@@ -766,26 +722,74 @@ var postToApi = async ({
|
|
766
722
|
});
|
767
723
|
}
|
768
724
|
} catch (error) {
|
769
|
-
|
770
|
-
throw error;
|
771
|
-
}
|
772
|
-
if (error instanceof TypeError && error.message === "fetch failed") {
|
773
|
-
const cause = error.cause;
|
774
|
-
if (cause != null) {
|
775
|
-
throw new import_provider9.APICallError({
|
776
|
-
message: `Cannot connect to API: ${cause.message}`,
|
777
|
-
cause,
|
778
|
-
url,
|
779
|
-
requestBodyValues: body.values,
|
780
|
-
isRetryable: true
|
781
|
-
// retry when network error
|
782
|
-
});
|
783
|
-
}
|
784
|
-
}
|
785
|
-
throw error;
|
725
|
+
throw handleFetchError({ error, url, requestBodyValues: body.values });
|
786
726
|
}
|
787
727
|
};
|
788
728
|
|
729
|
+
// src/types/tool.ts
|
730
|
+
function tool(tool2) {
|
731
|
+
return tool2;
|
732
|
+
}
|
733
|
+
function dynamicTool(tool2) {
|
734
|
+
return { ...tool2, type: "dynamic" };
|
735
|
+
}
|
736
|
+
|
737
|
+
// src/provider-defined-tool-factory.ts
|
738
|
+
function createProviderDefinedToolFactory({
|
739
|
+
id,
|
740
|
+
name,
|
741
|
+
inputSchema
|
742
|
+
}) {
|
743
|
+
return ({
|
744
|
+
execute,
|
745
|
+
outputSchema,
|
746
|
+
toModelOutput,
|
747
|
+
onInputStart,
|
748
|
+
onInputDelta,
|
749
|
+
onInputAvailable,
|
750
|
+
...args
|
751
|
+
}) => tool({
|
752
|
+
type: "provider-defined",
|
753
|
+
id,
|
754
|
+
name,
|
755
|
+
args,
|
756
|
+
inputSchema,
|
757
|
+
outputSchema,
|
758
|
+
execute,
|
759
|
+
toModelOutput,
|
760
|
+
onInputStart,
|
761
|
+
onInputDelta,
|
762
|
+
onInputAvailable
|
763
|
+
});
|
764
|
+
}
|
765
|
+
function createProviderDefinedToolFactoryWithOutputSchema({
|
766
|
+
id,
|
767
|
+
name,
|
768
|
+
inputSchema,
|
769
|
+
outputSchema
|
770
|
+
}) {
|
771
|
+
return ({
|
772
|
+
execute,
|
773
|
+
toModelOutput,
|
774
|
+
onInputStart,
|
775
|
+
onInputDelta,
|
776
|
+
onInputAvailable,
|
777
|
+
...args
|
778
|
+
}) => tool({
|
779
|
+
type: "provider-defined",
|
780
|
+
id,
|
781
|
+
name,
|
782
|
+
args,
|
783
|
+
inputSchema,
|
784
|
+
outputSchema,
|
785
|
+
execute,
|
786
|
+
toModelOutput,
|
787
|
+
onInputStart,
|
788
|
+
onInputDelta,
|
789
|
+
onInputAvailable
|
790
|
+
});
|
791
|
+
}
|
792
|
+
|
789
793
|
// src/resolve.ts
|
790
794
|
async function resolve(value) {
|
791
795
|
if (typeof value === "function") {
|
@@ -795,7 +799,7 @@ async function resolve(value) {
|
|
795
799
|
}
|
796
800
|
|
797
801
|
// src/response-handler.ts
|
798
|
-
var
|
802
|
+
var import_provider11 = require("@ai-sdk/provider");
|
799
803
|
var createJsonErrorResponseHandler = ({
|
800
804
|
errorSchema,
|
801
805
|
errorToMessage,
|
@@ -806,7 +810,7 @@ var createJsonErrorResponseHandler = ({
|
|
806
810
|
if (responseBody.trim() === "") {
|
807
811
|
return {
|
808
812
|
responseHeaders,
|
809
|
-
value: new
|
813
|
+
value: new import_provider11.APICallError({
|
810
814
|
message: response.statusText,
|
811
815
|
url,
|
812
816
|
requestBodyValues,
|
@@ -824,7 +828,7 @@ var createJsonErrorResponseHandler = ({
|
|
824
828
|
});
|
825
829
|
return {
|
826
830
|
responseHeaders,
|
827
|
-
value: new
|
831
|
+
value: new import_provider11.APICallError({
|
828
832
|
message: errorToMessage(parsedError),
|
829
833
|
url,
|
830
834
|
requestBodyValues,
|
@@ -838,7 +842,7 @@ var createJsonErrorResponseHandler = ({
|
|
838
842
|
} catch (parseError) {
|
839
843
|
return {
|
840
844
|
responseHeaders,
|
841
|
-
value: new
|
845
|
+
value: new import_provider11.APICallError({
|
842
846
|
message: response.statusText,
|
843
847
|
url,
|
844
848
|
requestBodyValues,
|
@@ -853,7 +857,7 @@ var createJsonErrorResponseHandler = ({
|
|
853
857
|
var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {
|
854
858
|
const responseHeaders = extractResponseHeaders(response);
|
855
859
|
if (response.body == null) {
|
856
|
-
throw new
|
860
|
+
throw new import_provider11.EmptyResponseBodyError({});
|
857
861
|
}
|
858
862
|
return {
|
859
863
|
responseHeaders,
|
@@ -866,7 +870,7 @@ var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) =>
|
|
866
870
|
var createJsonStreamResponseHandler = (chunkSchema) => async ({ response }) => {
|
867
871
|
const responseHeaders = extractResponseHeaders(response);
|
868
872
|
if (response.body == null) {
|
869
|
-
throw new
|
873
|
+
throw new import_provider11.EmptyResponseBodyError({});
|
870
874
|
}
|
871
875
|
let buffer = "";
|
872
876
|
return {
|
@@ -898,7 +902,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
|
|
898
902
|
});
|
899
903
|
const responseHeaders = extractResponseHeaders(response);
|
900
904
|
if (!parsedResult.success) {
|
901
|
-
throw new
|
905
|
+
throw new import_provider11.APICallError({
|
902
906
|
message: "Invalid JSON response",
|
903
907
|
cause: parsedResult.error,
|
904
908
|
statusCode: response.status,
|
@@ -917,7 +921,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
|
|
917
921
|
var createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {
|
918
922
|
const responseHeaders = extractResponseHeaders(response);
|
919
923
|
if (!response.body) {
|
920
|
-
throw new
|
924
|
+
throw new import_provider11.APICallError({
|
921
925
|
message: "Response body is empty",
|
922
926
|
url,
|
923
927
|
requestBodyValues,
|
@@ -933,7 +937,7 @@ var createBinaryResponseHandler = () => async ({ response, url, requestBodyValue
|
|
933
937
|
value: new Uint8Array(buffer)
|
934
938
|
};
|
935
939
|
} catch (error) {
|
936
|
-
throw new
|
940
|
+
throw new import_provider11.APICallError({
|
937
941
|
message: "Failed to read response as array buffer",
|
938
942
|
url,
|
939
943
|
requestBodyValues,
|
@@ -949,7 +953,7 @@ var createStatusCodeErrorResponseHandler = () => async ({ response, url, request
|
|
949
953
|
const responseBody = await response.text();
|
950
954
|
return {
|
951
955
|
responseHeaders,
|
952
|
-
value: new
|
956
|
+
value: new import_provider11.APICallError({
|
953
957
|
message: response.statusText,
|
954
958
|
url,
|
955
959
|
requestBodyValues,
|
@@ -961,7 +965,7 @@ var createStatusCodeErrorResponseHandler = () => async ({ response, url, request
|
|
961
965
|
};
|
962
966
|
|
963
967
|
// src/zod-schema.ts
|
964
|
-
var z4 = __toESM(require("zod/v4
|
968
|
+
var z4 = __toESM(require("zod/v4"));
|
965
969
|
var import_zod_to_json_schema = __toESM(require("zod-to-json-schema"));
|
966
970
|
function zod3Schema(zodSchema2, options) {
|
967
971
|
var _a;
|
@@ -973,8 +977,8 @@ function zod3Schema(zodSchema2, options) {
|
|
973
977
|
// note: openai mode breaks various gemini conversions
|
974
978
|
}),
|
975
979
|
{
|
976
|
-
validate: (value) => {
|
977
|
-
const result = zodSchema2.
|
980
|
+
validate: async (value) => {
|
981
|
+
const result = await zodSchema2.safeParseAsync(value);
|
978
982
|
return result.success ? { success: true, value: result.data } : { success: false, error: result.error };
|
979
983
|
}
|
980
984
|
}
|
@@ -989,8 +993,8 @@ function zod4Schema(zodSchema2, options) {
|
|
989
993
|
reused: useReferences ? "ref" : "inline"
|
990
994
|
});
|
991
995
|
return jsonSchema(z4JSONSchema, {
|
992
|
-
validate: (value) => {
|
993
|
-
const result = z4.
|
996
|
+
validate: async (value) => {
|
997
|
+
const result = await z4.safeParseAsync(zodSchema2, value);
|
994
998
|
return result.success ? { success: true, value: result.data } : { success: false, error: result.error };
|
995
999
|
}
|
996
1000
|
});
|
@@ -1055,8 +1059,10 @@ function withoutTrailingSlash(url) {
|
|
1055
1059
|
|
1056
1060
|
// src/index.ts
|
1057
1061
|
__reExport(src_exports, require("@standard-schema/spec"), module.exports);
|
1062
|
+
var import_stream2 = require("eventsource-parser/stream");
|
1058
1063
|
// Annotate the CommonJS export names for ESM import in node:
|
1059
1064
|
0 && (module.exports = {
|
1065
|
+
EventSourceParserStream,
|
1060
1066
|
asSchema,
|
1061
1067
|
asValidator,
|
1062
1068
|
combineHeaders,
|
@@ -1065,14 +1071,16 @@ __reExport(src_exports, require("@standard-schema/spec"), module.exports);
|
|
1065
1071
|
convertToBase64,
|
1066
1072
|
convertUint8ArrayToBase64,
|
1067
1073
|
createBinaryResponseHandler,
|
1068
|
-
createEventSourceParserStream,
|
1069
1074
|
createEventSourceResponseHandler,
|
1070
1075
|
createIdGenerator,
|
1071
1076
|
createJsonErrorResponseHandler,
|
1072
1077
|
createJsonResponseHandler,
|
1073
1078
|
createJsonStreamResponseHandler,
|
1079
|
+
createProviderDefinedToolFactory,
|
1080
|
+
createProviderDefinedToolFactoryWithOutputSchema,
|
1074
1081
|
createStatusCodeErrorResponseHandler,
|
1075
1082
|
delay,
|
1083
|
+
dynamicTool,
|
1076
1084
|
extractResponseHeaders,
|
1077
1085
|
generateId,
|
1078
1086
|
getErrorMessage,
|
@@ -1096,6 +1104,7 @@ __reExport(src_exports, require("@standard-schema/spec"), module.exports);
|
|
1096
1104
|
safeParseJSON,
|
1097
1105
|
safeValidateTypes,
|
1098
1106
|
standardSchemaValidator,
|
1107
|
+
tool,
|
1099
1108
|
validateTypes,
|
1100
1109
|
validator,
|
1101
1110
|
validatorSymbol,
|