@ai-sdk/provider-utils 5.0.0-beta.0 → 5.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
@@ -28,8 +28,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
30
  // src/index.ts
31
- var src_exports = {};
32
- __export(src_exports, {
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
33
  DEFAULT_MAX_DOWNLOAD_SIZE: () => DEFAULT_MAX_DOWNLOAD_SIZE,
34
34
  DelayedPromise: () => DelayedPromise,
35
35
  DownloadError: () => DownloadError,
@@ -63,14 +63,18 @@ __export(src_exports, {
63
63
  getRuntimeEnvironmentUserAgent: () => getRuntimeEnvironmentUserAgent,
64
64
  injectJsonInstructionIntoMessages: () => injectJsonInstructionIntoMessages,
65
65
  isAbortError: () => isAbortError,
66
+ isCustomReasoning: () => isCustomReasoning,
66
67
  isNonNullable: () => isNonNullable,
67
68
  isParsableJson: () => isParsableJson,
69
+ isProviderReference: () => isProviderReference,
68
70
  isUrlSupported: () => isUrlSupported,
69
71
  jsonSchema: () => jsonSchema,
70
72
  lazySchema: () => lazySchema,
71
73
  loadApiKey: () => loadApiKey,
72
74
  loadOptionalSetting: () => loadOptionalSetting,
73
75
  loadSetting: () => loadSetting,
76
+ mapReasoningToProviderBudget: () => mapReasoningToProviderBudget,
77
+ mapReasoningToProviderEffort: () => mapReasoningToProviderEffort,
74
78
  mediaTypeToExtension: () => mediaTypeToExtension,
75
79
  normalizeHeaders: () => normalizeHeaders,
76
80
  parseJSON: () => parseJSON,
@@ -82,6 +86,7 @@ __export(src_exports, {
82
86
  readResponseWithSizeLimit: () => readResponseWithSizeLimit,
83
87
  removeUndefinedEntries: () => removeUndefinedEntries,
84
88
  resolve: () => resolve,
89
+ resolveProviderReference: () => resolveProviderReference,
85
90
  safeParseJSON: () => safeParseJSON,
86
91
  safeValidateTypes: () => safeValidateTypes,
87
92
  stripFileExtension: () => stripFileExtension,
@@ -92,7 +97,7 @@ __export(src_exports, {
92
97
  withoutTrailingSlash: () => withoutTrailingSlash,
93
98
  zodSchema: () => zodSchema
94
99
  });
95
- module.exports = __toCommonJS(src_exports);
100
+ module.exports = __toCommonJS(index_exports);
96
101
 
97
102
  // src/combine-headers.ts
98
103
  function combineHeaders(...headers) {
@@ -146,30 +151,25 @@ function convertAsyncIteratorToReadableStream(iterator) {
146
151
  // src/create-tool-name-mapping.ts
147
152
  function createToolNameMapping({
148
153
  tools = [],
149
- providerToolNames,
150
- resolveProviderToolName
154
+ providerToolNames
151
155
  }) {
152
- var _a2;
153
156
  const customToolNameToProviderToolName = {};
154
157
  const providerToolNameToCustomToolName = {};
155
158
  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
- }
159
+ if (tool2.type === "provider" && tool2.id in providerToolNames) {
160
+ const providerToolName = providerToolNames[tool2.id];
161
161
  customToolNameToProviderToolName[tool2.name] = providerToolName;
162
162
  providerToolNameToCustomToolName[providerToolName] = tool2.name;
163
163
  }
164
164
  }
165
165
  return {
166
166
  toProviderToolName: (customToolName) => {
167
- var _a3;
168
- return (_a3 = customToolNameToProviderToolName[customToolName]) != null ? _a3 : customToolName;
167
+ var _a2;
168
+ return (_a2 = customToolNameToProviderToolName[customToolName]) != null ? _a2 : customToolName;
169
169
  },
170
170
  toCustomToolName: (providerToolName) => {
171
- var _a3;
172
- return (_a3 = providerToolNameToCustomToolName[providerToolName]) != null ? _a3 : providerToolName;
171
+ var _a2;
172
+ return (_a2 = providerToolNameToCustomToolName[providerToolName]) != null ? _a2 : providerToolName;
173
173
  }
174
174
  };
175
175
  }
@@ -395,10 +395,13 @@ function validateDownloadUrl(url) {
395
395
  message: `Invalid URL: ${url}`
396
396
  });
397
397
  }
398
+ if (parsed.protocol === "data:") {
399
+ return;
400
+ }
398
401
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
399
402
  throw new DownloadError({
400
403
  url,
401
- message: `URL scheme must be http or https, got ${parsed.protocol}`
404
+ message: `URL scheme must be http, https, or data, got ${parsed.protocol}`
402
405
  });
403
406
  }
404
407
  const hostname = parsed.hostname;
@@ -488,6 +491,9 @@ async function downloadBlob(url, options) {
488
491
  const response = await fetch(url, {
489
492
  signal: options == null ? void 0 : options.abortSignal
490
493
  });
494
+ if (response.redirected) {
495
+ validateDownloadUrl(response.url);
496
+ }
491
497
  if (!response.ok) {
492
498
  throw new DownloadError({
493
499
  url,
@@ -672,7 +678,7 @@ function withUserAgentSuffix(headers, ...userAgentSuffixParts) {
672
678
  }
673
679
 
674
680
  // src/version.ts
675
- var VERSION = true ? "5.0.0-beta.0" : "0.0.0-test";
681
+ var VERSION = true ? "5.0.0-beta.10" : "0.0.0-test";
676
682
 
677
683
  // src/get-from-api.ts
678
684
  var getOriginalFetch = () => globalThis.fetch;
@@ -788,6 +794,11 @@ function isNonNullable(value) {
788
794
  return value != null;
789
795
  }
790
796
 
797
+ // src/is-provider-reference.ts
798
+ function isProviderReference(data) {
799
+ return typeof data === "object" && !(data instanceof Uint8Array) && !(data instanceof URL);
800
+ }
801
+
791
802
  // src/is-url-supported.ts
792
803
  function isUrlSupported({
793
804
  mediaType,
@@ -837,6 +848,63 @@ function loadApiKey({
837
848
  return apiKey;
838
849
  }
839
850
 
851
+ // src/map-reasoning-to-provider.ts
852
+ function isCustomReasoning(reasoning) {
853
+ return reasoning !== void 0 && reasoning !== "provider-default";
854
+ }
855
+ function mapReasoningToProviderEffort({
856
+ reasoning,
857
+ effortMap,
858
+ warnings
859
+ }) {
860
+ const mapped = effortMap[reasoning];
861
+ if (mapped == null) {
862
+ warnings.push({
863
+ type: "unsupported",
864
+ feature: "reasoning",
865
+ details: `reasoning "${reasoning}" is not supported by this model.`
866
+ });
867
+ return void 0;
868
+ }
869
+ if (mapped !== reasoning) {
870
+ warnings.push({
871
+ type: "compatibility",
872
+ feature: "reasoning",
873
+ details: `reasoning "${reasoning}" is not directly supported by this model. mapped to effort "${mapped}".`
874
+ });
875
+ }
876
+ return mapped;
877
+ }
878
+ var DEFAULT_REASONING_BUDGET_PERCENTAGES = {
879
+ minimal: 0.02,
880
+ low: 0.1,
881
+ medium: 0.3,
882
+ high: 0.6,
883
+ xhigh: 0.9
884
+ };
885
+ function mapReasoningToProviderBudget({
886
+ reasoning,
887
+ maxOutputTokens,
888
+ maxReasoningBudget,
889
+ minReasoningBudget = 1024,
890
+ budgetPercentages = DEFAULT_REASONING_BUDGET_PERCENTAGES,
891
+ warnings
892
+ }) {
893
+ const pct = budgetPercentages[reasoning];
894
+ if (pct == null) {
895
+ warnings.push({
896
+ type: "unsupported",
897
+ feature: "reasoning",
898
+ details: `reasoning "${reasoning}" is not supported by this model.`
899
+ });
900
+ return void 0;
901
+ }
902
+ return Math.min(
903
+ maxReasoningBudget,
904
+ Math.max(minReasoningBudget, Math.round(maxOutputTokens * pct))
905
+ );
906
+ }
907
+
840
908
  // src/load-optional-setting.ts
841
909
  function loadOptionalSetting({
842
910
  settingValue,
@@ -999,7 +1067,7 @@ function visit(def) {
999
1067
  }
1000
1068
 
1001
1069
  // src/to-json-schema/zod3-to-json-schema/options.ts
1002
- var ignoreOverride = Symbol(
1070
+ var ignoreOverride = /* @__PURE__ */ Symbol(
1003
1071
  "Let zodToJsonSchema decide on which parser to use"
1004
1072
  );
1005
1073
  var defaultOptions = {
@@ -2177,7 +2245,7 @@ var zod3ToJsonSchema = (schema, options) => {
2177
2245
  };
2178
2246
 
2179
2247
  // src/schema.ts
2180
- var schemaSymbol = Symbol.for("vercel.ai.schema");
2248
+ var schemaSymbol = /* @__PURE__ */ Symbol.for("vercel.ai.schema");
2181
2249
  function lazySchema(createSchema) {
2182
2250
  let schema;
2183
2251
  return () => {
@@ -2593,6 +2661,22 @@ function removeUndefinedEntries(record) {
2593
2661
  );
2594
2662
  }
2595
2663
 
2664
+ // src/resolve-provider-reference.ts
2665
+ var import_provider12 = require("@ai-sdk/provider");
2666
+ function resolveProviderReference({
2667
+ reference,
2668
+ provider
2669
+ }) {
2670
+ const id = reference[provider];
2671
+ if (id != null) {
2672
+ return id;
2673
+ }
2674
+ throw new import_provider12.NoSuchProviderReferenceError({
2675
+ provider,
2676
+ reference
2677
+ });
2678
+ }
2679
+
2596
2680
  // src/resolve.ts
2597
2681
  async function resolve(value) {
2598
2682
  if (typeof value === "function") {
@@ -2602,7 +2686,7 @@ async function resolve(value) {
2602
2686
  }
2603
2687
 
2604
2688
  // src/response-handler.ts
2605
- var import_provider12 = require("@ai-sdk/provider");
2689
+ var import_provider13 = require("@ai-sdk/provider");
2606
2690
  var createJsonErrorResponseHandler = ({
2607
2691
  errorSchema,
2608
2692
  errorToMessage,
@@ -2613,7 +2697,7 @@ var createJsonErrorResponseHandler = ({
2613
2697
  if (responseBody.trim() === "") {
2614
2698
  return {
2615
2699
  responseHeaders,
2616
- value: new import_provider12.APICallError({
2700
+ value: new import_provider13.APICallError({
2617
2701
  message: response.statusText,
2618
2702
  url,
2619
2703
  requestBodyValues,
@@ -2631,7 +2715,7 @@ var createJsonErrorResponseHandler = ({
2631
2715
  });
2632
2716
  return {
2633
2717
  responseHeaders,
2634
- value: new import_provider12.APICallError({
2718
+ value: new import_provider13.APICallError({
2635
2719
  message: errorToMessage(parsedError),
2636
2720
  url,
2637
2721
  requestBodyValues,
@@ -2645,7 +2729,7 @@ var createJsonErrorResponseHandler = ({
2645
2729
  } catch (parseError) {
2646
2730
  return {
2647
2731
  responseHeaders,
2648
- value: new import_provider12.APICallError({
2732
+ value: new import_provider13.APICallError({
2649
2733
  message: response.statusText,
2650
2734
  url,
2651
2735
  requestBodyValues,
@@ -2660,7 +2744,7 @@ var createJsonErrorResponseHandler = ({
2660
2744
  var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {
2661
2745
  const responseHeaders = extractResponseHeaders(response);
2662
2746
  if (response.body == null) {
2663
- throw new import_provider12.EmptyResponseBodyError({});
2747
+ throw new import_provider13.EmptyResponseBodyError({});
2664
2748
  }
2665
2749
  return {
2666
2750
  responseHeaders,
@@ -2678,7 +2762,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
2678
2762
  });
2679
2763
  const responseHeaders = extractResponseHeaders(response);
2680
2764
  if (!parsedResult.success) {
2681
- throw new import_provider12.APICallError({
2765
+ throw new import_provider13.APICallError({
2682
2766
  message: "Invalid JSON response",
2683
2767
  cause: parsedResult.error,
2684
2768
  statusCode: response.status,
@@ -2697,7 +2781,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
2697
2781
  var createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {
2698
2782
  const responseHeaders = extractResponseHeaders(response);
2699
2783
  if (!response.body) {
2700
- throw new import_provider12.APICallError({
2784
+ throw new import_provider13.APICallError({
2701
2785
  message: "Response body is empty",
2702
2786
  url,
2703
2787
  requestBodyValues,
@@ -2713,7 +2797,7 @@ var createBinaryResponseHandler = () => async ({ response, url, requestBodyValue
2713
2797
  value: new Uint8Array(buffer)
2714
2798
  };
2715
2799
  } catch (error) {
2716
- throw new import_provider12.APICallError({
2800
+ throw new import_provider13.APICallError({
2717
2801
  message: "Failed to read response as array buffer",
2718
2802
  url,
2719
2803
  requestBodyValues,
@@ -2729,7 +2813,7 @@ var createStatusCodeErrorResponseHandler = () => async ({ response, url, request
2729
2813
  const responseBody = await response.text();
2730
2814
  return {
2731
2815
  responseHeaders,
2732
- value: new import_provider12.APICallError({
2816
+ value: new import_provider13.APICallError({
2733
2817
  message: response.statusText,
2734
2818
  url,
2735
2819
  requestBodyValues,
@@ -2812,14 +2896,18 @@ var import_stream2 = require("eventsource-parser/stream");
2812
2896
  getRuntimeEnvironmentUserAgent,
2813
2897
  injectJsonInstructionIntoMessages,
2814
2898
  isAbortError,
2899
+ isCustomReasoning,
2815
2900
  isNonNullable,
2816
2901
  isParsableJson,
2902
+ isProviderReference,
2817
2903
  isUrlSupported,
2818
2904
  jsonSchema,
2819
2905
  lazySchema,
2820
2906
  loadApiKey,
2821
2907
  loadOptionalSetting,
2822
2908
  loadSetting,
2909
+ mapReasoningToProviderBudget,
2910
+ mapReasoningToProviderEffort,
2823
2911
  mediaTypeToExtension,
2824
2912
  normalizeHeaders,
2825
2913
  parseJSON,
@@ -2831,6 +2919,7 @@ var import_stream2 = require("eventsource-parser/stream");
2831
2919
  readResponseWithSizeLimit,
2832
2920
  removeUndefinedEntries,
2833
2921
  resolve,
2922
+ resolveProviderReference,
2834
2923
  safeParseJSON,
2835
2924
  safeValidateTypes,
2836
2925
  stripFileExtension,