@ai-sdk/provider-utils 4.0.48 → 4.0.50

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.mjs CHANGED
@@ -631,6 +631,11 @@ async function downloadBlob(url, options) {
631
631
  }
632
632
  }
633
633
 
634
+ // src/embedding-model-capabilities.ts
635
+ var EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL = /* @__PURE__ */ Symbol.for(
636
+ "vercel.ai.embeddingModel.maxInputBytesPerCall"
637
+ );
638
+
634
639
  // src/generate-id.ts
635
640
  import { InvalidArgumentError } from "@ai-sdk/provider";
636
641
  var createIdGenerator = ({
@@ -688,24 +693,31 @@ function isAbortError(error) {
688
693
 
689
694
  // src/handle-fetch-error.ts
690
695
  var FETCH_FAILED_ERROR_MESSAGES = ["fetch failed", "failed to fetch"];
691
- var BUN_ERROR_CODES = [
696
+ var RETRYABLE_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
692
697
  "ConnectionRefused",
693
698
  "ConnectionClosed",
694
699
  "FailedToOpenSocket",
695
700
  "ECONNRESET",
696
701
  "ECONNREFUSED",
697
702
  "ETIMEDOUT",
698
- "EPIPE"
699
- ];
700
- function isBunNetworkError(error) {
701
- if (!(error instanceof Error)) {
702
- return false;
703
- }
704
- const code = error.code;
705
- if (typeof code === "string" && BUN_ERROR_CODES.includes(code)) {
706
- return true;
707
- }
708
- return false;
703
+ "EPIPE",
704
+ "UND_ERR_SOCKET",
705
+ "UND_ERR_HEADERS_TIMEOUT",
706
+ "UND_ERR_BODY_TIMEOUT",
707
+ "UND_ERR_CONNECT_TIMEOUT"
708
+ ]);
709
+ function findNetworkError(error) {
710
+ const visited = /* @__PURE__ */ new Set();
711
+ let current = error;
712
+ while (current instanceof Error && !visited.has(current)) {
713
+ visited.add(current);
714
+ const errorWithCode = current;
715
+ if (typeof errorWithCode.code === "string" && RETRYABLE_NETWORK_ERROR_CODES.has(errorWithCode.code)) {
716
+ return errorWithCode;
717
+ }
718
+ current = current.cause;
719
+ }
720
+ return void 0;
709
721
  }
710
722
  function handleFetchError({
711
723
  error,
@@ -728,9 +740,23 @@ function handleFetchError({
728
740
  });
729
741
  }
730
742
  }
731
- if (isBunNetworkError(error)) {
743
+ const networkError = findNetworkError(error);
744
+ if (networkError != null) {
745
+ if (APICallError.isInstance(error)) {
746
+ return new APICallError({
747
+ message: error.message,
748
+ cause: error.cause,
749
+ url: error.url,
750
+ requestBodyValues: error.requestBodyValues,
751
+ statusCode: error.statusCode,
752
+ responseHeaders: error.responseHeaders,
753
+ responseBody: error.responseBody,
754
+ data: error.data,
755
+ isRetryable: true
756
+ });
757
+ }
732
758
  return new APICallError({
733
- message: `Cannot connect to API: ${error.message}`,
759
+ message: `Cannot connect to API: ${error instanceof Error ? error.message : networkError.message}`,
734
760
  cause: error,
735
761
  url,
736
762
  requestBodyValues,
@@ -793,7 +819,7 @@ function withUserAgentSuffix(headers, ...userAgentSuffixParts) {
793
819
  }
794
820
 
795
821
  // src/version.ts
796
- var VERSION = true ? "4.0.48" : "0.0.0-test";
822
+ var VERSION = true ? "4.0.50" : "0.0.0-test";
797
823
 
798
824
  // src/get-from-api.ts
799
825
  var getOriginalFetch = () => globalThis.fetch;
@@ -2837,6 +2863,62 @@ async function retryWithExponentialBackoffInternal(f, {
2837
2863
  // src/response-handler.ts
2838
2864
  import { APICallError as APICallError4, EmptyResponseBodyError } from "@ai-sdk/provider";
2839
2865
  var textDecoder = new TextDecoder();
2866
+ function wrapResponseBodyStream({
2867
+ stream,
2868
+ url,
2869
+ requestBodyValues,
2870
+ statusCode,
2871
+ responseHeaders
2872
+ }) {
2873
+ const reader = stream.getReader();
2874
+ let readerReleased = false;
2875
+ const releaseReader = () => {
2876
+ if (!readerReleased) {
2877
+ reader.releaseLock();
2878
+ readerReleased = true;
2879
+ }
2880
+ };
2881
+ return new ReadableStream({
2882
+ async pull(controller) {
2883
+ try {
2884
+ const { done, value } = await reader.read();
2885
+ if (done) {
2886
+ releaseReader();
2887
+ controller.close();
2888
+ } else {
2889
+ controller.enqueue(value);
2890
+ }
2891
+ } catch (error) {
2892
+ releaseReader();
2893
+ if (isAbortError(error)) {
2894
+ controller.error(error);
2895
+ return;
2896
+ }
2897
+ controller.error(
2898
+ handleFetchError({
2899
+ error: new APICallError4({
2900
+ message: "Failed to process successful response",
2901
+ cause: error,
2902
+ statusCode,
2903
+ url,
2904
+ responseHeaders,
2905
+ requestBodyValues
2906
+ }),
2907
+ url,
2908
+ requestBodyValues
2909
+ })
2910
+ );
2911
+ }
2912
+ },
2913
+ async cancel(reason) {
2914
+ try {
2915
+ await reader.cancel(reason);
2916
+ } finally {
2917
+ releaseReader();
2918
+ }
2919
+ }
2920
+ });
2921
+ }
2840
2922
  async function readResponseBodyAsText({
2841
2923
  response,
2842
2924
  url
@@ -2902,7 +2984,7 @@ var createJsonErrorResponseHandler = ({
2902
2984
  };
2903
2985
  }
2904
2986
  };
2905
- var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) => {
2987
+ var createEventSourceResponseHandler = (chunkSchema) => async ({ response, url, requestBodyValues }) => {
2906
2988
  const responseHeaders = extractResponseHeaders(response);
2907
2989
  if (response.body == null) {
2908
2990
  throw new EmptyResponseBodyError({});
@@ -2910,7 +2992,13 @@ var createEventSourceResponseHandler = (chunkSchema) => async ({ response }) =>
2910
2992
  return {
2911
2993
  responseHeaders,
2912
2994
  value: parseJsonEventStream({
2913
- stream: response.body,
2995
+ stream: wrapResponseBodyStream({
2996
+ stream: response.body,
2997
+ url,
2998
+ requestBodyValues,
2999
+ statusCode: response.status,
3000
+ responseHeaders
3001
+ }),
2914
3002
  schema: chunkSchema
2915
3003
  })
2916
3004
  };
@@ -3028,6 +3116,7 @@ export {
3028
3116
  DEFAULT_MAX_DOWNLOAD_SIZE,
3029
3117
  DelayedPromise,
3030
3118
  DownloadError,
3119
+ EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL as EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL,
3031
3120
  EventSourceParserStream2 as EventSourceParserStream,
3032
3121
  VERSION,
3033
3122
  asSchema,