@ai-sdk/provider-utils 5.0.0-beta.2 → 5.0.0-beta.21

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +226 -0
  2. package/dist/index.d.ts +433 -174
  3. package/dist/index.js +322 -284
  4. package/dist/index.js.map +1 -1
  5. package/dist/test/index.js +2 -35
  6. package/dist/test/index.js.map +1 -1
  7. package/package.json +8 -10
  8. package/src/convert-image-model-file-to-data-uri.ts +3 -3
  9. package/src/create-tool-name-mapping.ts +5 -21
  10. package/src/get-error-message.ts +1 -15
  11. package/src/has-required-key.ts +6 -0
  12. package/src/index.ts +17 -7
  13. package/src/inject-json-instruction.ts +5 -5
  14. package/src/is-json-serializable.ts +29 -0
  15. package/src/is-provider-reference.ts +18 -0
  16. package/src/load-api-key.ts +1 -1
  17. package/src/load-setting.ts +1 -1
  18. package/src/map-reasoning-to-provider.ts +105 -0
  19. package/src/provider-tool-factory.ts +43 -32
  20. package/src/resolve-provider-reference.ts +27 -0
  21. package/src/resolve.ts +15 -0
  22. package/src/response-handler.ts +1 -1
  23. package/src/secure-json-parse.ts +1 -1
  24. package/src/serialize-model-options.ts +63 -0
  25. package/src/to-json-schema/zod3-to-json-schema/parsers/date.ts +1 -1
  26. package/src/to-json-schema/zod3-to-json-schema/parsers/intersection.ts +1 -1
  27. package/src/to-json-schema/zod3-to-json-schema/parsers/record.ts +2 -2
  28. package/src/types/assistant-model-message.ts +4 -0
  29. package/src/types/content-part.ts +98 -14
  30. package/src/types/context.ts +4 -0
  31. package/src/types/executable-tool.ts +17 -0
  32. package/src/types/execute-tool.ts +28 -9
  33. package/src/types/index.ts +11 -9
  34. package/src/types/infer-tool-context.ts +12 -0
  35. package/src/types/infer-tool-input.ts +7 -0
  36. package/src/types/infer-tool-output.ts +7 -0
  37. package/src/types/infer-tool-set-context.ts +17 -0
  38. package/src/types/provider-options.ts +2 -2
  39. package/src/types/provider-reference.ts +10 -0
  40. package/src/types/tool-set.ts +22 -0
  41. package/src/types/tool.ts +74 -40
  42. package/src/types/union-to-intersection.ts +17 -0
  43. package/src/validate-download-url.ts +7 -2
  44. package/dist/index.d.mts +0 -1433
  45. package/dist/index.mjs +0 -2759
  46. package/dist/index.mjs.map +0 -1
  47. package/dist/test/index.d.mts +0 -17
  48. package/dist/test/index.mjs +0 -77
  49. package/dist/test/index.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,99 +1,3 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name2 in all)
10
- __defProp(target, name2, { get: all[name2], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- DEFAULT_MAX_DOWNLOAD_SIZE: () => DEFAULT_MAX_DOWNLOAD_SIZE,
34
- DelayedPromise: () => DelayedPromise,
35
- DownloadError: () => DownloadError,
36
- EventSourceParserStream: () => import_stream2.EventSourceParserStream,
37
- VERSION: () => VERSION,
38
- asSchema: () => asSchema,
39
- combineHeaders: () => combineHeaders,
40
- convertAsyncIteratorToReadableStream: () => convertAsyncIteratorToReadableStream,
41
- convertBase64ToUint8Array: () => convertBase64ToUint8Array,
42
- convertImageModelFileToDataUri: () => convertImageModelFileToDataUri,
43
- convertToBase64: () => convertToBase64,
44
- convertToFormData: () => convertToFormData,
45
- convertUint8ArrayToBase64: () => convertUint8ArrayToBase64,
46
- createBinaryResponseHandler: () => createBinaryResponseHandler,
47
- createEventSourceResponseHandler: () => createEventSourceResponseHandler,
48
- createIdGenerator: () => createIdGenerator,
49
- createJsonErrorResponseHandler: () => createJsonErrorResponseHandler,
50
- createJsonResponseHandler: () => createJsonResponseHandler,
51
- createProviderToolFactory: () => createProviderToolFactory,
52
- createProviderToolFactoryWithOutputSchema: () => createProviderToolFactoryWithOutputSchema,
53
- createStatusCodeErrorResponseHandler: () => createStatusCodeErrorResponseHandler,
54
- createToolNameMapping: () => createToolNameMapping,
55
- delay: () => delay,
56
- downloadBlob: () => downloadBlob,
57
- dynamicTool: () => dynamicTool,
58
- executeTool: () => executeTool,
59
- extractResponseHeaders: () => extractResponseHeaders,
60
- generateId: () => generateId,
61
- getErrorMessage: () => getErrorMessage,
62
- getFromApi: () => getFromApi,
63
- getRuntimeEnvironmentUserAgent: () => getRuntimeEnvironmentUserAgent,
64
- injectJsonInstructionIntoMessages: () => injectJsonInstructionIntoMessages,
65
- isAbortError: () => isAbortError,
66
- isNonNullable: () => isNonNullable,
67
- isParsableJson: () => isParsableJson,
68
- isUrlSupported: () => isUrlSupported,
69
- jsonSchema: () => jsonSchema,
70
- lazySchema: () => lazySchema,
71
- loadApiKey: () => loadApiKey,
72
- loadOptionalSetting: () => loadOptionalSetting,
73
- loadSetting: () => loadSetting,
74
- mediaTypeToExtension: () => mediaTypeToExtension,
75
- normalizeHeaders: () => normalizeHeaders,
76
- parseJSON: () => parseJSON,
77
- parseJsonEventStream: () => parseJsonEventStream,
78
- parseProviderOptions: () => parseProviderOptions,
79
- postFormDataToApi: () => postFormDataToApi,
80
- postJsonToApi: () => postJsonToApi,
81
- postToApi: () => postToApi,
82
- readResponseWithSizeLimit: () => readResponseWithSizeLimit,
83
- removeUndefinedEntries: () => removeUndefinedEntries,
84
- resolve: () => resolve,
85
- safeParseJSON: () => safeParseJSON,
86
- safeValidateTypes: () => safeValidateTypes,
87
- stripFileExtension: () => stripFileExtension,
88
- tool: () => tool,
89
- validateDownloadUrl: () => validateDownloadUrl,
90
- validateTypes: () => validateTypes,
91
- withUserAgentSuffix: () => withUserAgentSuffix,
92
- withoutTrailingSlash: () => withoutTrailingSlash,
93
- zodSchema: () => zodSchema
94
- });
95
- module.exports = __toCommonJS(index_exports);
96
-
97
1
  // src/combine-headers.ts
98
2
  function combineHeaders(...headers) {
99
3
  return headers.reduce(
@@ -143,33 +47,76 @@ function convertAsyncIteratorToReadableStream(iterator) {
143
47
  });
144
48
  }
145
49
 
50
+ // src/uint8-utils.ts
51
+ var { btoa, atob } = globalThis;
52
+ function convertBase64ToUint8Array(base64String) {
53
+ const base64Url = base64String.replace(/-/g, "+").replace(/_/g, "/");
54
+ const latin1string = atob(base64Url);
55
+ return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));
56
+ }
57
+ function convertUint8ArrayToBase64(array) {
58
+ let latin1string = "";
59
+ for (let i = 0; i < array.length; i++) {
60
+ latin1string += String.fromCodePoint(array[i]);
61
+ }
62
+ return btoa(latin1string);
63
+ }
64
+ function convertToBase64(value) {
65
+ return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;
66
+ }
67
+
68
+ // src/convert-image-model-file-to-data-uri.ts
69
+ function convertImageModelFileToDataUri(file) {
70
+ if (file.type === "url") return file.url;
71
+ return `data:${file.mediaType};base64,${typeof file.data === "string" ? file.data : convertUint8ArrayToBase64(file.data)}`;
72
+ }
73
+
74
+ // src/convert-to-form-data.ts
75
+ function convertToFormData(input, options = {}) {
76
+ const { useArrayBrackets = true } = options;
77
+ const formData = new FormData();
78
+ for (const [key, value] of Object.entries(input)) {
79
+ if (value == null) {
80
+ continue;
81
+ }
82
+ if (Array.isArray(value)) {
83
+ if (value.length === 1) {
84
+ formData.append(key, value[0]);
85
+ continue;
86
+ }
87
+ const arrayKey = useArrayBrackets ? `${key}[]` : key;
88
+ for (const item of value) {
89
+ formData.append(arrayKey, item);
90
+ }
91
+ continue;
92
+ }
93
+ formData.append(key, value);
94
+ }
95
+ return formData;
96
+ }
97
+
146
98
  // src/create-tool-name-mapping.ts
147
99
  function createToolNameMapping({
148
100
  tools = [],
149
- providerToolNames,
150
- resolveProviderToolName
101
+ providerToolNames
151
102
  }) {
152
- var _a2;
153
103
  const customToolNameToProviderToolName = {};
154
104
  const providerToolNameToCustomToolName = {};
155
105
  for (const tool2 of tools) {
156
- if (tool2.type === "provider") {
157
- const providerToolName = (_a2 = resolveProviderToolName == null ? void 0 : resolveProviderToolName(tool2)) != null ? _a2 : tool2.id in providerToolNames ? providerToolNames[tool2.id] : void 0;
158
- if (providerToolName == null) {
159
- continue;
160
- }
106
+ if (tool2.type === "provider" && tool2.id in providerToolNames) {
107
+ const providerToolName = providerToolNames[tool2.id];
161
108
  customToolNameToProviderToolName[tool2.name] = providerToolName;
162
109
  providerToolNameToCustomToolName[providerToolName] = tool2.name;
163
110
  }
164
111
  }
165
112
  return {
166
113
  toProviderToolName: (customToolName) => {
167
- var _a3;
168
- return (_a3 = customToolNameToProviderToolName[customToolName]) != null ? _a3 : customToolName;
114
+ var _a2;
115
+ return (_a2 = customToolNameToProviderToolName[customToolName]) != null ? _a2 : customToolName;
169
116
  },
170
117
  toCustomToolName: (providerToolName) => {
171
- var _a3;
172
- return (_a3 = providerToolNameToCustomToolName[providerToolName]) != null ? _a3 : providerToolName;
118
+ var _a2;
119
+ return (_a2 = providerToolNameToCustomToolName[providerToolName]) != null ? _a2 : providerToolName;
173
120
  }
174
121
  };
175
122
  }
@@ -251,66 +198,13 @@ var DelayedPromise = class {
251
198
  }
252
199
  };
253
200
 
254
- // src/extract-response-headers.ts
255
- function extractResponseHeaders(response) {
256
- return Object.fromEntries([...response.headers]);
257
- }
258
-
259
- // src/uint8-utils.ts
260
- var { btoa, atob } = globalThis;
261
- function convertBase64ToUint8Array(base64String) {
262
- const base64Url = base64String.replace(/-/g, "+").replace(/_/g, "/");
263
- const latin1string = atob(base64Url);
264
- return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));
265
- }
266
- function convertUint8ArrayToBase64(array) {
267
- let latin1string = "";
268
- for (let i = 0; i < array.length; i++) {
269
- latin1string += String.fromCodePoint(array[i]);
270
- }
271
- return btoa(latin1string);
272
- }
273
- function convertToBase64(value) {
274
- return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;
275
- }
276
-
277
- // src/convert-image-model-file-to-data-uri.ts
278
- function convertImageModelFileToDataUri(file) {
279
- if (file.type === "url") return file.url;
280
- return `data:${file.mediaType};base64,${typeof file.data === "string" ? file.data : convertUint8ArrayToBase64(file.data)}`;
281
- }
282
-
283
- // src/convert-to-form-data.ts
284
- function convertToFormData(input, options = {}) {
285
- const { useArrayBrackets = true } = options;
286
- const formData = new FormData();
287
- for (const [key, value] of Object.entries(input)) {
288
- if (value == null) {
289
- continue;
290
- }
291
- if (Array.isArray(value)) {
292
- if (value.length === 1) {
293
- formData.append(key, value[0]);
294
- continue;
295
- }
296
- const arrayKey = useArrayBrackets ? `${key}[]` : key;
297
- for (const item of value) {
298
- formData.append(arrayKey, item);
299
- }
300
- continue;
301
- }
302
- formData.append(key, value);
303
- }
304
- return formData;
305
- }
306
-
307
201
  // src/download-error.ts
308
- var import_provider = require("@ai-sdk/provider");
202
+ import { AISDKError } from "@ai-sdk/provider";
309
203
  var name = "AI_DownloadError";
310
204
  var marker = `vercel.ai.error.${name}`;
311
205
  var symbol = Symbol.for(marker);
312
206
  var _a, _b;
313
- var DownloadError = class extends (_b = import_provider.AISDKError, _a = symbol, _b) {
207
+ var DownloadError = class extends (_b = AISDKError, _a = symbol, _b) {
314
208
  constructor({
315
209
  url,
316
210
  statusCode,
@@ -325,7 +219,7 @@ var DownloadError = class extends (_b = import_provider.AISDKError, _a = symbol,
325
219
  this.statusText = statusText;
326
220
  }
327
221
  static isInstance(error) {
328
- return import_provider.AISDKError.hasMarker(error, marker);
222
+ return AISDKError.hasMarker(error, marker);
329
223
  }
330
224
  };
331
225
 
@@ -395,10 +289,13 @@ function validateDownloadUrl(url) {
395
289
  message: `Invalid URL: ${url}`
396
290
  });
397
291
  }
292
+ if (parsed.protocol === "data:") {
293
+ return;
294
+ }
398
295
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
399
296
  throw new DownloadError({
400
297
  url,
401
- message: `URL scheme must be http or https, got ${parsed.protocol}`
298
+ message: `URL scheme must be http, https, or data, got ${parsed.protocol}`
402
299
  });
403
300
  }
404
301
  const hostname = parsed.hostname;
@@ -513,8 +410,13 @@ async function downloadBlob(url, options) {
513
410
  }
514
411
  }
515
412
 
413
+ // src/extract-response-headers.ts
414
+ function extractResponseHeaders(response) {
415
+ return Object.fromEntries([...response.headers]);
416
+ }
417
+
516
418
  // src/generate-id.ts
517
- var import_provider2 = require("@ai-sdk/provider");
419
+ import { InvalidArgumentError } from "@ai-sdk/provider";
518
420
  var createIdGenerator = ({
519
421
  prefix,
520
422
  size = 16,
@@ -533,7 +435,7 @@ var createIdGenerator = ({
533
435
  return generator;
534
436
  }
535
437
  if (alphabet.includes(separator)) {
536
- throw new import_provider2.InvalidArgumentError({
438
+ throw new InvalidArgumentError({
537
439
  argument: "separator",
538
440
  message: `The separator "${separator}" must not be part of the alphabet "${alphabet}".`
539
441
  });
@@ -543,24 +445,13 @@ var createIdGenerator = ({
543
445
  var generateId = createIdGenerator();
544
446
 
545
447
  // src/get-error-message.ts
546
- function getErrorMessage(error) {
547
- if (error == null) {
548
- return "unknown error";
549
- }
550
- if (typeof error === "string") {
551
- return error;
552
- }
553
- if (error instanceof Error) {
554
- return error.message;
555
- }
556
- return JSON.stringify(error);
557
- }
448
+ import { getErrorMessage } from "@ai-sdk/provider";
558
449
 
559
450
  // src/get-from-api.ts
560
- var import_provider4 = require("@ai-sdk/provider");
451
+ import { APICallError as APICallError2 } from "@ai-sdk/provider";
561
452
 
562
453
  // src/handle-fetch-error.ts
563
- var import_provider3 = require("@ai-sdk/provider");
454
+ import { APICallError } from "@ai-sdk/provider";
564
455
 
565
456
  // src/is-abort-error.ts
566
457
  function isAbortError(error) {
@@ -600,7 +491,7 @@ function handleFetchError({
600
491
  if (error instanceof TypeError && FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())) {
601
492
  const cause = error.cause;
602
493
  if (cause != null) {
603
- return new import_provider3.APICallError({
494
+ return new APICallError({
604
495
  message: `Cannot connect to API: ${cause.message}`,
605
496
  cause,
606
497
  url,
@@ -611,7 +502,7 @@ function handleFetchError({
611
502
  }
612
503
  }
613
504
  if (isBunNetworkError(error)) {
614
- return new import_provider3.APICallError({
505
+ return new APICallError({
615
506
  message: `Cannot connect to API: ${error.message}`,
616
507
  cause: error,
617
508
  url,
@@ -675,7 +566,7 @@ function withUserAgentSuffix(headers, ...userAgentSuffixParts) {
675
566
  }
676
567
 
677
568
  // src/version.ts
678
- var VERSION = true ? "5.0.0-beta.2" : "0.0.0-test";
569
+ var VERSION = true ? "5.0.0-beta.21" : "0.0.0-test";
679
570
 
680
571
  // src/get-from-api.ts
681
572
  var getOriginalFetch = () => globalThis.fetch;
@@ -707,10 +598,10 @@ var getFromApi = async ({
707
598
  requestBodyValues: {}
708
599
  });
709
600
  } catch (error) {
710
- if (isAbortError(error) || import_provider4.APICallError.isInstance(error)) {
601
+ if (isAbortError(error) || APICallError2.isInstance(error)) {
711
602
  throw error;
712
603
  }
713
- throw new import_provider4.APICallError({
604
+ throw new APICallError2({
714
605
  message: "Failed to process error response",
715
606
  cause: error,
716
607
  statusCode: response.status,
@@ -729,11 +620,11 @@ var getFromApi = async ({
729
620
  });
730
621
  } catch (error) {
731
622
  if (error instanceof Error) {
732
- if (isAbortError(error) || import_provider4.APICallError.isInstance(error)) {
623
+ if (isAbortError(error) || APICallError2.isInstance(error)) {
733
624
  throw error;
734
625
  }
735
626
  }
736
- throw new import_provider4.APICallError({
627
+ throw new APICallError2({
737
628
  message: "Failed to process successful response",
738
629
  cause: error,
739
630
  statusCode: response.status,
@@ -791,6 +682,11 @@ function isNonNullable(value) {
791
682
  return value != null;
792
683
  }
793
684
 
685
+ // src/is-provider-reference.ts
686
+ function isProviderReference(data) {
687
+ return typeof data === "object" && !(data instanceof Uint8Array) && !(data instanceof URL);
688
+ }
689
+
794
690
  // src/is-url-supported.ts
795
691
  function isUrlSupported({
796
692
  mediaType,
@@ -806,7 +702,7 @@ function isUrlSupported({
806
702
  }
807
703
 
808
704
  // src/load-api-key.ts
809
- var import_provider5 = require("@ai-sdk/provider");
705
+ import { LoadAPIKeyError } from "@ai-sdk/provider";
810
706
  function loadApiKey({
811
707
  apiKey,
812
708
  environmentVariableName,
@@ -817,23 +713,23 @@ function loadApiKey({
817
713
  return apiKey;
818
714
  }
819
715
  if (apiKey != null) {
820
- throw new import_provider5.LoadAPIKeyError({
716
+ throw new LoadAPIKeyError({
821
717
  message: `${description} API key must be a string.`
822
718
  });
823
719
  }
824
720
  if (typeof process === "undefined") {
825
- throw new import_provider5.LoadAPIKeyError({
826
- message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`
721
+ throw new LoadAPIKeyError({
722
+ message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables are not supported in this environment.`
827
723
  });
828
724
  }
829
725
  apiKey = process.env[environmentVariableName];
830
726
  if (apiKey == null) {
831
- throw new import_provider5.LoadAPIKeyError({
727
+ throw new LoadAPIKeyError({
832
728
  message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`
833
729
  });
834
730
  }
835
731
  if (typeof apiKey !== "string") {
836
- throw new import_provider5.LoadAPIKeyError({
732
+ throw new LoadAPIKeyError({
837
733
  message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`
838
734
  });
839
735
  }
@@ -859,7 +755,7 @@ function loadOptionalSetting({
859
755
  }
860
756
 
861
757
  // src/load-setting.ts
862
- var import_provider6 = require("@ai-sdk/provider");
758
+ import { LoadSettingError } from "@ai-sdk/provider";
863
759
  function loadSetting({
864
760
  settingValue,
865
761
  environmentVariableName,
@@ -870,29 +766,86 @@ function loadSetting({
870
766
  return settingValue;
871
767
  }
872
768
  if (settingValue != null) {
873
- throw new import_provider6.LoadSettingError({
769
+ throw new LoadSettingError({
874
770
  message: `${description} setting must be a string.`
875
771
  });
876
772
  }
877
773
  if (typeof process === "undefined") {
878
- throw new import_provider6.LoadSettingError({
879
- message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables is not supported in this environment.`
774
+ throw new LoadSettingError({
775
+ message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables are not supported in this environment.`
880
776
  });
881
777
  }
882
778
  settingValue = process.env[environmentVariableName];
883
779
  if (settingValue == null) {
884
- throw new import_provider6.LoadSettingError({
780
+ throw new LoadSettingError({
885
781
  message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`
886
782
  });
887
783
  }
888
784
  if (typeof settingValue !== "string") {
889
- throw new import_provider6.LoadSettingError({
785
+ throw new LoadSettingError({
890
786
  message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`
891
787
  });
892
788
  }
893
789
  return settingValue;
894
790
  }
895
791
 
792
+ // src/map-reasoning-to-provider.ts
793
+ function isCustomReasoning(reasoning) {
794
+ return reasoning !== void 0 && reasoning !== "provider-default";
795
+ }
796
+ function mapReasoningToProviderEffort({
797
+ reasoning,
798
+ effortMap,
799
+ warnings
800
+ }) {
801
+ const mapped = effortMap[reasoning];
802
+ if (mapped == null) {
803
+ warnings.push({
804
+ type: "unsupported",
805
+ feature: "reasoning",
806
+ details: `reasoning "${reasoning}" is not supported by this model.`
807
+ });
808
+ return void 0;
809
+ }
810
+ if (mapped !== reasoning) {
811
+ warnings.push({
812
+ type: "compatibility",
813
+ feature: "reasoning",
814
+ details: `reasoning "${reasoning}" is not directly supported by this model. mapped to effort "${mapped}".`
815
+ });
816
+ }
817
+ return mapped;
818
+ }
819
+ var DEFAULT_REASONING_BUDGET_PERCENTAGES = {
820
+ minimal: 0.02,
821
+ low: 0.1,
822
+ medium: 0.3,
823
+ high: 0.6,
824
+ xhigh: 0.9
825
+ };
826
+ function mapReasoningToProviderBudget({
827
+ reasoning,
828
+ maxOutputTokens,
829
+ maxReasoningBudget,
830
+ minReasoningBudget = 1024,
831
+ budgetPercentages = DEFAULT_REASONING_BUDGET_PERCENTAGES,
832
+ warnings
833
+ }) {
834
+ const pct = budgetPercentages[reasoning];
835
+ if (pct == null) {
836
+ warnings.push({
837
+ type: "unsupported",
838
+ feature: "reasoning",
839
+ details: `reasoning "${reasoning}" is not supported by this model.`
840
+ });
841
+ return void 0;
842
+ }
843
+ return Math.min(
844
+ maxReasoningBudget,
845
+ Math.max(minReasoningBudget, Math.round(maxOutputTokens * pct))
846
+ );
847
+ }
848
+
896
849
  // src/media-type-to-extension.ts
897
850
  function mediaTypeToExtension(mediaType) {
898
851
  var _a2;
@@ -907,7 +860,10 @@ function mediaTypeToExtension(mediaType) {
907
860
  }
908
861
 
909
862
  // src/parse-json.ts
910
- var import_provider9 = require("@ai-sdk/provider");
863
+ import {
864
+ JSONParseError,
865
+ TypeValidationError as TypeValidationError3
866
+ } from "@ai-sdk/provider";
911
867
 
912
868
  // src/secure-json-parse.ts
913
869
  var suspectProtoRx = /"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*:/;
@@ -959,11 +915,11 @@ function secureJsonParse(text) {
959
915
  }
960
916
 
961
917
  // src/validate-types.ts
962
- var import_provider8 = require("@ai-sdk/provider");
918
+ import { TypeValidationError as TypeValidationError2 } from "@ai-sdk/provider";
963
919
 
964
920
  // src/schema.ts
965
- var import_provider7 = require("@ai-sdk/provider");
966
- var z4 = __toESM(require("zod/v4"));
921
+ import { TypeValidationError } from "@ai-sdk/provider";
922
+ import * as z4 from "zod/v4";
967
923
 
968
924
  // src/add-additional-properties-to-json-schema.ts
969
925
  function addAdditionalPropertiesToJsonSchema(jsonSchema2) {
@@ -1035,7 +991,7 @@ var getDefaultOptions = (options) => typeof options === "string" ? {
1035
991
  };
1036
992
 
1037
993
  // src/to-json-schema/zod3-to-json-schema/select-parser.ts
1038
- var import_v33 = require("zod/v3");
994
+ import { ZodFirstPartyTypeKind as ZodFirstPartyTypeKind3 } from "zod/v3";
1039
995
 
1040
996
  // src/to-json-schema/zod3-to-json-schema/parsers/any.ts
1041
997
  function parseAnyDef() {
@@ -1043,13 +999,13 @@ function parseAnyDef() {
1043
999
  }
1044
1000
 
1045
1001
  // src/to-json-schema/zod3-to-json-schema/parsers/array.ts
1046
- var import_v3 = require("zod/v3");
1002
+ import { ZodFirstPartyTypeKind } from "zod/v3";
1047
1003
  function parseArrayDef(def, refs) {
1048
1004
  var _a2, _b2, _c;
1049
1005
  const res = {
1050
1006
  type: "array"
1051
1007
  };
1052
- if (((_a2 = def.type) == null ? void 0 : _a2._def) && ((_c = (_b2 = def.type) == null ? void 0 : _b2._def) == null ? void 0 : _c.typeName) !== import_v3.ZodFirstPartyTypeKind.ZodAny) {
1008
+ if (((_a2 = def.type) == null ? void 0 : _a2._def) && ((_c = (_b2 = def.type) == null ? void 0 : _b2._def) == null ? void 0 : _c.typeName) !== ZodFirstPartyTypeKind.ZodAny) {
1053
1009
  res.items = parseDef(def.type._def, {
1054
1010
  ...refs,
1055
1011
  currentPath: [...refs.currentPath, "items"]
@@ -1119,7 +1075,7 @@ function parseDateDef(def, refs, overrideDateStrategy) {
1119
1075
  const strategy = overrideDateStrategy != null ? overrideDateStrategy : refs.dateStrategy;
1120
1076
  if (Array.isArray(strategy)) {
1121
1077
  return {
1122
- anyOf: strategy.map((item, i) => parseDateDef(def, refs, item))
1078
+ anyOf: strategy.map((item) => parseDateDef(def, refs, item))
1123
1079
  };
1124
1080
  }
1125
1081
  switch (strategy) {
@@ -1200,7 +1156,7 @@ function parseIntersectionDef(def, refs) {
1200
1156
  } else {
1201
1157
  let nestedSchema = schema;
1202
1158
  if ("additionalProperties" in schema && schema.additionalProperties === false) {
1203
- const { additionalProperties, ...rest } = schema;
1159
+ const { additionalProperties: _additionalProperties, ...rest } = schema;
1204
1160
  nestedSchema = rest;
1205
1161
  }
1206
1162
  mergedAllOf.push(nestedSchema);
@@ -1224,7 +1180,9 @@ function parseLiteralDef(def) {
1224
1180
  }
1225
1181
 
1226
1182
  // src/to-json-schema/zod3-to-json-schema/parsers/record.ts
1227
- var import_v32 = require("zod/v3");
1183
+ import {
1184
+ ZodFirstPartyTypeKind as ZodFirstPartyTypeKind2
1185
+ } from "zod/v3";
1228
1186
 
1229
1187
  // src/to-json-schema/zod3-to-json-schema/parsers/string.ts
1230
1188
  var emojiRegex = void 0;
@@ -1572,21 +1530,21 @@ function parseRecordDef(def, refs) {
1572
1530
  currentPath: [...refs.currentPath, "additionalProperties"]
1573
1531
  })) != null ? _a2 : refs.allowedAdditionalProperties
1574
1532
  };
1575
- if (((_b2 = def.keyType) == null ? void 0 : _b2._def.typeName) === import_v32.ZodFirstPartyTypeKind.ZodString && ((_c = def.keyType._def.checks) == null ? void 0 : _c.length)) {
1576
- const { type, ...keyType } = parseStringDef(def.keyType._def, refs);
1533
+ if (((_b2 = def.keyType) == null ? void 0 : _b2._def.typeName) === ZodFirstPartyTypeKind2.ZodString && ((_c = def.keyType._def.checks) == null ? void 0 : _c.length)) {
1534
+ const { type: _type, ...keyType } = parseStringDef(def.keyType._def, refs);
1577
1535
  return {
1578
1536
  ...schema,
1579
1537
  propertyNames: keyType
1580
1538
  };
1581
- } else if (((_d = def.keyType) == null ? void 0 : _d._def.typeName) === import_v32.ZodFirstPartyTypeKind.ZodEnum) {
1539
+ } else if (((_d = def.keyType) == null ? void 0 : _d._def.typeName) === ZodFirstPartyTypeKind2.ZodEnum) {
1582
1540
  return {
1583
1541
  ...schema,
1584
1542
  propertyNames: {
1585
1543
  enum: def.keyType._def.values
1586
1544
  }
1587
1545
  };
1588
- } else if (((_e = def.keyType) == null ? void 0 : _e._def.typeName) === import_v32.ZodFirstPartyTypeKind.ZodBranded && def.keyType._def.type._def.typeName === import_v32.ZodFirstPartyTypeKind.ZodString && ((_f = def.keyType._def.type._def.checks) == null ? void 0 : _f.length)) {
1589
- const { type, ...keyType } = parseBrandedDef(
1546
+ } else if (((_e = def.keyType) == null ? void 0 : _e._def.typeName) === ZodFirstPartyTypeKind2.ZodBranded && def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind2.ZodString && ((_f = def.keyType._def.type._def.checks) == null ? void 0 : _f.length)) {
1547
+ const { type: _type, ...keyType } = parseBrandedDef(
1590
1548
  def.keyType._def,
1591
1549
  refs
1592
1550
  );
@@ -1959,73 +1917,73 @@ var parseReadonlyDef = (def, refs) => {
1959
1917
  // src/to-json-schema/zod3-to-json-schema/select-parser.ts
1960
1918
  var selectParser = (def, typeName, refs) => {
1961
1919
  switch (typeName) {
1962
- case import_v33.ZodFirstPartyTypeKind.ZodString:
1920
+ case ZodFirstPartyTypeKind3.ZodString:
1963
1921
  return parseStringDef(def, refs);
1964
- case import_v33.ZodFirstPartyTypeKind.ZodNumber:
1922
+ case ZodFirstPartyTypeKind3.ZodNumber:
1965
1923
  return parseNumberDef(def);
1966
- case import_v33.ZodFirstPartyTypeKind.ZodObject:
1924
+ case ZodFirstPartyTypeKind3.ZodObject:
1967
1925
  return parseObjectDef(def, refs);
1968
- case import_v33.ZodFirstPartyTypeKind.ZodBigInt:
1926
+ case ZodFirstPartyTypeKind3.ZodBigInt:
1969
1927
  return parseBigintDef(def);
1970
- case import_v33.ZodFirstPartyTypeKind.ZodBoolean:
1928
+ case ZodFirstPartyTypeKind3.ZodBoolean:
1971
1929
  return parseBooleanDef();
1972
- case import_v33.ZodFirstPartyTypeKind.ZodDate:
1930
+ case ZodFirstPartyTypeKind3.ZodDate:
1973
1931
  return parseDateDef(def, refs);
1974
- case import_v33.ZodFirstPartyTypeKind.ZodUndefined:
1932
+ case ZodFirstPartyTypeKind3.ZodUndefined:
1975
1933
  return parseUndefinedDef();
1976
- case import_v33.ZodFirstPartyTypeKind.ZodNull:
1934
+ case ZodFirstPartyTypeKind3.ZodNull:
1977
1935
  return parseNullDef();
1978
- case import_v33.ZodFirstPartyTypeKind.ZodArray:
1936
+ case ZodFirstPartyTypeKind3.ZodArray:
1979
1937
  return parseArrayDef(def, refs);
1980
- case import_v33.ZodFirstPartyTypeKind.ZodUnion:
1981
- case import_v33.ZodFirstPartyTypeKind.ZodDiscriminatedUnion:
1938
+ case ZodFirstPartyTypeKind3.ZodUnion:
1939
+ case ZodFirstPartyTypeKind3.ZodDiscriminatedUnion:
1982
1940
  return parseUnionDef(def, refs);
1983
- case import_v33.ZodFirstPartyTypeKind.ZodIntersection:
1941
+ case ZodFirstPartyTypeKind3.ZodIntersection:
1984
1942
  return parseIntersectionDef(def, refs);
1985
- case import_v33.ZodFirstPartyTypeKind.ZodTuple:
1943
+ case ZodFirstPartyTypeKind3.ZodTuple:
1986
1944
  return parseTupleDef(def, refs);
1987
- case import_v33.ZodFirstPartyTypeKind.ZodRecord:
1945
+ case ZodFirstPartyTypeKind3.ZodRecord:
1988
1946
  return parseRecordDef(def, refs);
1989
- case import_v33.ZodFirstPartyTypeKind.ZodLiteral:
1947
+ case ZodFirstPartyTypeKind3.ZodLiteral:
1990
1948
  return parseLiteralDef(def);
1991
- case import_v33.ZodFirstPartyTypeKind.ZodEnum:
1949
+ case ZodFirstPartyTypeKind3.ZodEnum:
1992
1950
  return parseEnumDef(def);
1993
- case import_v33.ZodFirstPartyTypeKind.ZodNativeEnum:
1951
+ case ZodFirstPartyTypeKind3.ZodNativeEnum:
1994
1952
  return parseNativeEnumDef(def);
1995
- case import_v33.ZodFirstPartyTypeKind.ZodNullable:
1953
+ case ZodFirstPartyTypeKind3.ZodNullable:
1996
1954
  return parseNullableDef(def, refs);
1997
- case import_v33.ZodFirstPartyTypeKind.ZodOptional:
1955
+ case ZodFirstPartyTypeKind3.ZodOptional:
1998
1956
  return parseOptionalDef(def, refs);
1999
- case import_v33.ZodFirstPartyTypeKind.ZodMap:
1957
+ case ZodFirstPartyTypeKind3.ZodMap:
2000
1958
  return parseMapDef(def, refs);
2001
- case import_v33.ZodFirstPartyTypeKind.ZodSet:
1959
+ case ZodFirstPartyTypeKind3.ZodSet:
2002
1960
  return parseSetDef(def, refs);
2003
- case import_v33.ZodFirstPartyTypeKind.ZodLazy:
1961
+ case ZodFirstPartyTypeKind3.ZodLazy:
2004
1962
  return () => def.getter()._def;
2005
- case import_v33.ZodFirstPartyTypeKind.ZodPromise:
1963
+ case ZodFirstPartyTypeKind3.ZodPromise:
2006
1964
  return parsePromiseDef(def, refs);
2007
- case import_v33.ZodFirstPartyTypeKind.ZodNaN:
2008
- case import_v33.ZodFirstPartyTypeKind.ZodNever:
1965
+ case ZodFirstPartyTypeKind3.ZodNaN:
1966
+ case ZodFirstPartyTypeKind3.ZodNever:
2009
1967
  return parseNeverDef();
2010
- case import_v33.ZodFirstPartyTypeKind.ZodEffects:
1968
+ case ZodFirstPartyTypeKind3.ZodEffects:
2011
1969
  return parseEffectsDef(def, refs);
2012
- case import_v33.ZodFirstPartyTypeKind.ZodAny:
1970
+ case ZodFirstPartyTypeKind3.ZodAny:
2013
1971
  return parseAnyDef();
2014
- case import_v33.ZodFirstPartyTypeKind.ZodUnknown:
1972
+ case ZodFirstPartyTypeKind3.ZodUnknown:
2015
1973
  return parseUnknownDef();
2016
- case import_v33.ZodFirstPartyTypeKind.ZodDefault:
1974
+ case ZodFirstPartyTypeKind3.ZodDefault:
2017
1975
  return parseDefaultDef(def, refs);
2018
- case import_v33.ZodFirstPartyTypeKind.ZodBranded:
1976
+ case ZodFirstPartyTypeKind3.ZodBranded:
2019
1977
  return parseBrandedDef(def, refs);
2020
- case import_v33.ZodFirstPartyTypeKind.ZodReadonly:
1978
+ case ZodFirstPartyTypeKind3.ZodReadonly:
2021
1979
  return parseReadonlyDef(def, refs);
2022
- case import_v33.ZodFirstPartyTypeKind.ZodCatch:
1980
+ case ZodFirstPartyTypeKind3.ZodCatch:
2023
1981
  return parseCatchDef(def, refs);
2024
- case import_v33.ZodFirstPartyTypeKind.ZodPipeline:
1982
+ case ZodFirstPartyTypeKind3.ZodPipeline:
2025
1983
  return parsePipelineDef(def, refs);
2026
- case import_v33.ZodFirstPartyTypeKind.ZodFunction:
2027
- case import_v33.ZodFirstPartyTypeKind.ZodVoid:
2028
- case import_v33.ZodFirstPartyTypeKind.ZodSymbol:
1984
+ case ZodFirstPartyTypeKind3.ZodFunction:
1985
+ case ZodFirstPartyTypeKind3.ZodVoid:
1986
+ case ZodFirstPartyTypeKind3.ZodSymbol:
2029
1987
  return void 0;
2030
1988
  default:
2031
1989
  return /* @__PURE__ */ ((_) => void 0)(typeName);
@@ -2224,7 +2182,7 @@ function standardSchema(standardSchema2) {
2224
2182
  const result = await standardSchema2["~standard"].validate(value);
2225
2183
  return "value" in result ? { success: true, value: result.value } : {
2226
2184
  success: false,
2227
- error: new import_provider7.TypeValidationError({
2185
+ error: new TypeValidationError({
2228
2186
  value,
2229
2187
  cause: result.issues
2230
2188
  })
@@ -2288,7 +2246,7 @@ async function validateTypes({
2288
2246
  }) {
2289
2247
  const result = await safeValidateTypes({ value, schema, context });
2290
2248
  if (!result.success) {
2291
- throw import_provider8.TypeValidationError.wrap({ value, cause: result.error, context });
2249
+ throw TypeValidationError2.wrap({ value, cause: result.error, context });
2292
2250
  }
2293
2251
  return result.value;
2294
2252
  }
@@ -2308,13 +2266,13 @@ async function safeValidateTypes({
2308
2266
  }
2309
2267
  return {
2310
2268
  success: false,
2311
- error: import_provider8.TypeValidationError.wrap({ value, cause: result.error, context }),
2269
+ error: TypeValidationError2.wrap({ value, cause: result.error, context }),
2312
2270
  rawValue: value
2313
2271
  };
2314
2272
  } catch (error) {
2315
2273
  return {
2316
2274
  success: false,
2317
- error: import_provider8.TypeValidationError.wrap({ value, cause: error, context }),
2275
+ error: TypeValidationError2.wrap({ value, cause: error, context }),
2318
2276
  rawValue: value
2319
2277
  };
2320
2278
  }
@@ -2332,10 +2290,10 @@ async function parseJSON({
2332
2290
  }
2333
2291
  return validateTypes({ value, schema });
2334
2292
  } catch (error) {
2335
- if (import_provider9.JSONParseError.isInstance(error) || import_provider9.TypeValidationError.isInstance(error)) {
2293
+ if (JSONParseError.isInstance(error) || TypeValidationError3.isInstance(error)) {
2336
2294
  throw error;
2337
2295
  }
2338
- throw new import_provider9.JSONParseError({ text, cause: error });
2296
+ throw new JSONParseError({ text, cause: error });
2339
2297
  }
2340
2298
  }
2341
2299
  async function safeParseJSON({
@@ -2351,7 +2309,7 @@ async function safeParseJSON({
2351
2309
  } catch (error) {
2352
2310
  return {
2353
2311
  success: false,
2354
- error: import_provider9.JSONParseError.isInstance(error) ? error : new import_provider9.JSONParseError({ text, cause: error }),
2312
+ error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error }),
2355
2313
  rawValue: void 0
2356
2314
  };
2357
2315
  }
@@ -2366,12 +2324,14 @@ function isParsableJson(input) {
2366
2324
  }
2367
2325
 
2368
2326
  // src/parse-json-event-stream.ts
2369
- var import_stream = require("eventsource-parser/stream");
2327
+ import {
2328
+ EventSourceParserStream
2329
+ } from "eventsource-parser/stream";
2370
2330
  function parseJsonEventStream({
2371
2331
  stream,
2372
2332
  schema
2373
2333
  }) {
2374
- return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new import_stream.EventSourceParserStream()).pipeThrough(
2334
+ return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream()).pipeThrough(
2375
2335
  new TransformStream({
2376
2336
  async transform({ data }, controller) {
2377
2337
  if (data === "[DONE]") {
@@ -2384,7 +2344,7 @@ function parseJsonEventStream({
2384
2344
  }
2385
2345
 
2386
2346
  // src/parse-provider-options.ts
2387
- var import_provider10 = require("@ai-sdk/provider");
2347
+ import { InvalidArgumentError as InvalidArgumentError2 } from "@ai-sdk/provider";
2388
2348
  async function parseProviderOptions({
2389
2349
  provider,
2390
2350
  providerOptions,
@@ -2398,7 +2358,7 @@ async function parseProviderOptions({
2398
2358
  schema
2399
2359
  });
2400
2360
  if (!parsedProviderOptions.success) {
2401
- throw new import_provider10.InvalidArgumentError({
2361
+ throw new InvalidArgumentError2({
2402
2362
  argument: "providerOptions",
2403
2363
  message: `invalid ${provider} provider options`,
2404
2364
  cause: parsedProviderOptions.error
@@ -2408,7 +2368,7 @@ async function parseProviderOptions({
2408
2368
  }
2409
2369
 
2410
2370
  // src/post-to-api.ts
2411
- var import_provider11 = require("@ai-sdk/provider");
2371
+ import { APICallError as APICallError3 } from "@ai-sdk/provider";
2412
2372
  var getOriginalFetch2 = () => globalThis.fetch;
2413
2373
  var postJsonToApi = async ({
2414
2374
  url,
@@ -2483,10 +2443,10 @@ var postToApi = async ({
2483
2443
  requestBodyValues: body.values
2484
2444
  });
2485
2445
  } catch (error) {
2486
- if (isAbortError(error) || import_provider11.APICallError.isInstance(error)) {
2446
+ if (isAbortError(error) || APICallError3.isInstance(error)) {
2487
2447
  throw error;
2488
2448
  }
2489
- throw new import_provider11.APICallError({
2449
+ throw new APICallError3({
2490
2450
  message: "Failed to process error response",
2491
2451
  cause: error,
2492
2452
  statusCode: response.status,
@@ -2505,11 +2465,11 @@ var postToApi = async ({
2505
2465
  });
2506
2466
  } catch (error) {
2507
2467
  if (error instanceof Error) {
2508
- if (isAbortError(error) || import_provider11.APICallError.isInstance(error)) {
2468
+ if (isAbortError(error) || APICallError3.isInstance(error)) {
2509
2469
  throw error;
2510
2470
  }
2511
2471
  }
2512
- throw new import_provider11.APICallError({
2472
+ throw new APICallError3({
2513
2473
  message: "Failed to process successful response",
2514
2474
  cause: error,
2515
2475
  statusCode: response.status,
@@ -2604,8 +2564,26 @@ async function resolve(value) {
2604
2564
  return Promise.resolve(value);
2605
2565
  }
2606
2566
 
2567
+ // src/resolve-provider-reference.ts
2568
+ import {
2569
+ NoSuchProviderReferenceError
2570
+ } from "@ai-sdk/provider";
2571
+ function resolveProviderReference({
2572
+ reference,
2573
+ provider
2574
+ }) {
2575
+ const id = reference[provider];
2576
+ if (id != null) {
2577
+ return id;
2578
+ }
2579
+ throw new NoSuchProviderReferenceError({
2580
+ provider,
2581
+ reference
2582
+ });
2583
+ }
2584
+
2607
2585
  // src/response-handler.ts
2608
- var import_provider12 = require("@ai-sdk/provider");
2586
+ import { APICallError as APICallError4, EmptyResponseBodyError } from "@ai-sdk/provider";
2609
2587
  var createJsonErrorResponseHandler = ({
2610
2588
  errorSchema,
2611
2589
  errorToMessage,
@@ -2616,7 +2594,7 @@ var createJsonErrorResponseHandler = ({
2616
2594
  if (responseBody.trim() === "") {
2617
2595
  return {
2618
2596
  responseHeaders,
2619
- value: new import_provider12.APICallError({
2597
+ value: new APICallError4({
2620
2598
  message: response.statusText,
2621
2599
  url,
2622
2600
  requestBodyValues,
@@ -2634,7 +2612,7 @@ var createJsonErrorResponseHandler = ({
2634
2612
  });
2635
2613
  return {
2636
2614
  responseHeaders,
2637
- value: new import_provider12.APICallError({
2615
+ value: new APICallError4({
2638
2616
  message: errorToMessage(parsedError),
2639
2617
  url,
2640
2618
  requestBodyValues,
@@ -2645,10 +2623,10 @@ var createJsonErrorResponseHandler = ({
2645
2623
  isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError)
2646
2624
  })
2647
2625
  };
2648
- } catch (parseError) {
2626
+ } catch (e) {
2649
2627
  return {
2650
2628
  responseHeaders,
2651
- value: new import_provider12.APICallError({
2629
+ value: new APICallError4({
2652
2630
  message: response.statusText,
2653
2631
  url,
2654
2632
  requestBodyValues,
@@ -2663,7 +2641,7 @@ var createJsonErrorResponseHandler = ({
2663
2641
  var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {
2664
2642
  const responseHeaders = extractResponseHeaders(response);
2665
2643
  if (response.body == null) {
2666
- throw new import_provider12.EmptyResponseBodyError({});
2644
+ throw new EmptyResponseBodyError({});
2667
2645
  }
2668
2646
  return {
2669
2647
  responseHeaders,
@@ -2681,7 +2659,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
2681
2659
  });
2682
2660
  const responseHeaders = extractResponseHeaders(response);
2683
2661
  if (!parsedResult.success) {
2684
- throw new import_provider12.APICallError({
2662
+ throw new APICallError4({
2685
2663
  message: "Invalid JSON response",
2686
2664
  cause: parsedResult.error,
2687
2665
  statusCode: response.status,
@@ -2700,7 +2678,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
2700
2678
  var createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {
2701
2679
  const responseHeaders = extractResponseHeaders(response);
2702
2680
  if (!response.body) {
2703
- throw new import_provider12.APICallError({
2681
+ throw new APICallError4({
2704
2682
  message: "Response body is empty",
2705
2683
  url,
2706
2684
  requestBodyValues,
@@ -2716,7 +2694,7 @@ var createBinaryResponseHandler = () => async ({ response, url, requestBodyValue
2716
2694
  value: new Uint8Array(buffer)
2717
2695
  };
2718
2696
  } catch (error) {
2719
- throw new import_provider12.APICallError({
2697
+ throw new APICallError4({
2720
2698
  message: "Failed to read response as array buffer",
2721
2699
  url,
2722
2700
  requestBodyValues,
@@ -2732,7 +2710,7 @@ var createStatusCodeErrorResponseHandler = () => async ({ response, url, request
2732
2710
  const responseBody = await response.text();
2733
2711
  return {
2734
2712
  responseHeaders,
2735
- value: new import_provider12.APICallError({
2713
+ value: new APICallError4({
2736
2714
  message: response.statusText,
2737
2715
  url,
2738
2716
  requestBodyValues,
@@ -2743,6 +2721,50 @@ var createStatusCodeErrorResponseHandler = () => async ({ response, url, request
2743
2721
  };
2744
2722
  };
2745
2723
 
2724
+ // src/is-json-serializable.ts
2725
+ function isJSONSerializable(value) {
2726
+ if (value === null || value === void 0) return true;
2727
+ const type = typeof value;
2728
+ if (type === "string" || type === "number" || type === "boolean") return true;
2729
+ if (type === "function" || type === "symbol" || type === "bigint")
2730
+ return false;
2731
+ if (Array.isArray(value)) {
2732
+ return value.every(isJSONSerializable);
2733
+ }
2734
+ if (Object.getPrototypeOf(value) === Object.prototype) {
2735
+ return Object.values(value).every(
2736
+ isJSONSerializable
2737
+ );
2738
+ }
2739
+ return false;
2740
+ }
2741
+
2742
+ // src/serialize-model-options.ts
2743
+ function serializeModelOptions(options) {
2744
+ const serializableConfig = {};
2745
+ for (const [key, value] of Object.entries(options.config)) {
2746
+ if (key === "headers") {
2747
+ const resolvedHeaders = resolveSync(value);
2748
+ if (isJSONSerializable(resolvedHeaders)) {
2749
+ serializableConfig[key] = resolvedHeaders;
2750
+ }
2751
+ } else if (isJSONSerializable(value)) {
2752
+ serializableConfig[key] = value;
2753
+ }
2754
+ }
2755
+ return { modelId: options.modelId, config: serializableConfig };
2756
+ }
2757
+ function resolveSync(value) {
2758
+ let next = value;
2759
+ if (typeof value === "function") {
2760
+ next = value();
2761
+ }
2762
+ if (next instanceof Promise) {
2763
+ throw new Error("Promise returned from resolveSync");
2764
+ }
2765
+ return next;
2766
+ }
2767
+
2746
2768
  // src/strip-file-extension.ts
2747
2769
  function stripFileExtension(filename) {
2748
2770
  const firstDotIndex = filename.indexOf(".");
@@ -2761,11 +2783,11 @@ function isAsyncIterable(obj) {
2761
2783
 
2762
2784
  // src/types/execute-tool.ts
2763
2785
  async function* executeTool({
2764
- execute,
2786
+ tool: tool2,
2765
2787
  input,
2766
2788
  options
2767
2789
  }) {
2768
- const result = execute(input, options);
2790
+ const result = tool2.execute(input, options);
2769
2791
  if (isAsyncIterable(result)) {
2770
2792
  let lastOutput;
2771
2793
  for await (const output of result) {
@@ -2778,15 +2800,24 @@ async function* executeTool({
2778
2800
  }
2779
2801
  }
2780
2802
 
2803
+ // src/types/executable-tool.ts
2804
+ function isExecutableTool(tool2) {
2805
+ return tool2 != null && typeof tool2.execute === "function";
2806
+ }
2807
+
2781
2808
  // src/index.ts
2782
- var import_stream2 = require("eventsource-parser/stream");
2783
- // Annotate the CommonJS export names for ESM import in node:
2784
- 0 && (module.exports = {
2809
+ import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from "@workflow/serde";
2810
+ import {
2811
+ EventSourceParserStream as EventSourceParserStream2
2812
+ } from "eventsource-parser/stream";
2813
+ export {
2785
2814
  DEFAULT_MAX_DOWNLOAD_SIZE,
2786
2815
  DelayedPromise,
2787
2816
  DownloadError,
2788
- EventSourceParserStream,
2817
+ EventSourceParserStream2 as EventSourceParserStream,
2789
2818
  VERSION,
2819
+ WORKFLOW_DESERIALIZE,
2820
+ WORKFLOW_SERIALIZE,
2790
2821
  asSchema,
2791
2822
  combineHeaders,
2792
2823
  convertAsyncIteratorToReadableStream,
@@ -2815,14 +2846,19 @@ var import_stream2 = require("eventsource-parser/stream");
2815
2846
  getRuntimeEnvironmentUserAgent,
2816
2847
  injectJsonInstructionIntoMessages,
2817
2848
  isAbortError,
2849
+ isCustomReasoning,
2850
+ isExecutableTool,
2818
2851
  isNonNullable,
2819
2852
  isParsableJson,
2853
+ isProviderReference,
2820
2854
  isUrlSupported,
2821
2855
  jsonSchema,
2822
2856
  lazySchema,
2823
2857
  loadApiKey,
2824
2858
  loadOptionalSetting,
2825
2859
  loadSetting,
2860
+ mapReasoningToProviderBudget,
2861
+ mapReasoningToProviderEffort,
2826
2862
  mediaTypeToExtension,
2827
2863
  normalizeHeaders,
2828
2864
  parseJSON,
@@ -2834,8 +2870,10 @@ var import_stream2 = require("eventsource-parser/stream");
2834
2870
  readResponseWithSizeLimit,
2835
2871
  removeUndefinedEntries,
2836
2872
  resolve,
2873
+ resolveProviderReference,
2837
2874
  safeParseJSON,
2838
2875
  safeValidateTypes,
2876
+ serializeModelOptions,
2839
2877
  stripFileExtension,
2840
2878
  tool,
2841
2879
  validateDownloadUrl,
@@ -2843,5 +2881,5 @@ var import_stream2 = require("eventsource-parser/stream");
2843
2881
  withUserAgentSuffix,
2844
2882
  withoutTrailingSlash,
2845
2883
  zodSchema
2846
- });
2884
+ };
2847
2885
  //# sourceMappingURL=index.js.map