@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/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
- return delayInMs == null ? Promise.resolve() : new Promise((resolve2) => setTimeout(resolve2, delayInMs));
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
- return new TransformStream({
184
- transform(chunk, controller) {
185
- const { lines, incompleteLine } = splitLines(buffer, chunk);
186
- buffer = incompleteLine;
187
- for (let i = 0; i < lines.length; i++) {
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 splitLines(buffer, chunk) {
198
- const lines = [];
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) || import_provider2.APICallError.isInstance(error)) {
274
+ if (isAbortError(error) || import_provider3.APICallError.isInstance(error)) {
308
275
  throw error;
309
276
  }
310
- throw new import_provider2.APICallError({
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) || import_provider2.APICallError.isInstance(error)) {
296
+ if (isAbortError(error) || import_provider3.APICallError.isInstance(error)) {
330
297
  throw error;
331
298
  }
332
299
  }
333
- throw new import_provider2.APICallError({
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
- if (isAbortError(error)) {
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 import_provider3 = require("@ai-sdk/provider");
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 import_provider3.LoadAPIKeyError({
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 import_provider3.LoadAPIKeyError({
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 import_provider3.LoadAPIKeyError({
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 import_provider3.LoadAPIKeyError({
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 import_provider4 = require("@ai-sdk/provider");
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 import_provider4.LoadSettingError({
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 import_provider4.LoadSettingError({
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 import_provider4.LoadSettingError({
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 import_provider4.LoadSettingError({
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 import_provider7 = require("@ai-sdk/provider");
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 import_provider6 = require("@ai-sdk/provider");
465
+ var import_provider7 = require("@ai-sdk/provider");
514
466
 
515
467
  // src/validator.ts
516
- var import_provider5 = require("@ai-sdk/provider");
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 import_provider5.TypeValidationError({
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 import_provider6.TypeValidationError.wrap({ value, cause: result.error });
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: import_provider6.TypeValidationError.wrap({ value, cause: result.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: import_provider6.TypeValidationError.wrap({ value, cause: 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({ text, schema }) {
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 (import_provider7.JSONParseError.isInstance(error) || import_provider7.TypeValidationError.isInstance(error)) {
542
+ if (import_provider8.JSONParseError.isInstance(error) || import_provider8.TypeValidationError.isInstance(error)) {
588
543
  throw error;
589
544
  }
590
- throw new import_provider7.JSONParseError({ text, cause: error });
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: import_provider7.JSONParseError.isInstance(error) ? error : new import_provider7.JSONParseError({ text, cause: 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(createEventSourceParserStream()).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 import_provider8 = require("@ai-sdk/provider");
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 import_provider8.InvalidArgumentError({
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 import_provider9 = require("@ai-sdk/provider");
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) || import_provider9.APICallError.isInstance(error)) {
689
+ if (isAbortError(error) || import_provider10.APICallError.isInstance(error)) {
734
690
  throw error;
735
691
  }
736
- throw new import_provider9.APICallError({
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) || import_provider9.APICallError.isInstance(error)) {
711
+ if (isAbortError(error) || import_provider10.APICallError.isInstance(error)) {
756
712
  throw error;
757
713
  }
758
714
  }
759
- throw new import_provider9.APICallError({
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
- if (isAbortError(error)) {
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 import_provider10 = require("@ai-sdk/provider");
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 import_provider10.APICallError({
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 import_provider10.APICallError({
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 import_provider10.APICallError({
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 import_provider10.EmptyResponseBodyError({});
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 import_provider10.EmptyResponseBodyError({});
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 import_provider10.APICallError({
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 import_provider10.APICallError({
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 import_provider10.APICallError({
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 import_provider10.APICallError({
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/core"));
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.safeParse(value);
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.safeParse(zodSchema2, value);
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,