ai-retry 0.10.1 → 0.10.3

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/README.md CHANGED
@@ -21,6 +21,9 @@ It supports two types of retries:
21
21
 
22
22
  This library only supports AI SDK v5.
23
23
 
24
+ > [!NOTE]
25
+ > AI SDK v6 support is available in the [v6 branch](https://github.com/zirkelc/ai-retry/tree/v6).
26
+
24
27
  ```bash
25
28
  npm install ai-retry
26
29
  ```
@@ -1,25 +1,24 @@
1
- import { a as LanguageModelV2Generate, c as Retry, d as RetryErrorAttempt, f as RetryResultAttempt, h as RetryableOptions, i as LanguageModelV2, l as RetryAttempt, m as RetryableModelOptions, n as EmbeddingModelV2CallOptions, o as LanguageModelV2Stream, p as Retryable, r as EmbeddingModelV2Embed, s as Retries, t as EmbeddingModelV2, u as RetryContext } from "./types-CphTxZ_b.js";
1
+ import { _ as RetryableOptions, a as LanguageModelCallOptions, c as LanguageModelStreamPart, d as RetryAttempt, f as RetryContext, g as RetryableModelOptions, h as Retryable, i as LanguageModel, l as Retries, m as RetryResultAttempt, n as EmbeddingModelCallOptions, o as LanguageModelGenerate, p as RetryErrorAttempt, r as EmbeddingModelEmbed, s as LanguageModelStream, t as EmbeddingModel, u as Retry } from "./types-TotEvw-5.mjs";
2
2
  import * as _ai_sdk_provider0 from "@ai-sdk/provider";
3
- import { LanguageModelV2 as LanguageModelV2$1, LanguageModelV2StreamPart } from "@ai-sdk/provider";
4
3
 
5
4
  //#region src/create-retryable-model.d.ts
6
- declare function createRetryable<MODEL$1 extends LanguageModelV2>(options: RetryableModelOptions<MODEL$1>): LanguageModelV2;
7
- declare function createRetryable<MODEL$1 extends EmbeddingModelV2>(options: RetryableModelOptions<MODEL$1>): EmbeddingModelV2;
5
+ declare function createRetryable<MODEL extends LanguageModel>(options: RetryableModelOptions<MODEL>): LanguageModel;
6
+ declare function createRetryable<MODEL extends EmbeddingModel>(options: RetryableModelOptions<MODEL>): EmbeddingModel;
8
7
  //#endregion
9
8
  //#region src/get-model-key.d.ts
10
9
  /**
11
- * Generate a unique key for a LanguageModelV2 instance.
10
+ * Generate a unique key for a LanguageModel instance.
12
11
  */
13
- declare const getModelKey: (model: LanguageModelV2 | EmbeddingModelV2) => string;
12
+ declare const getModelKey: (model: LanguageModel | EmbeddingModel) => string;
14
13
  //#endregion
15
14
  //#region src/utils.d.ts
16
15
  declare const isObject: (value: unknown) => value is Record<string, unknown>;
17
16
  declare const isString: (value: unknown) => value is string;
18
- declare const isModelV2: (model: unknown) => model is LanguageModelV2$1 | EmbeddingModelV2;
19
- declare const isLanguageModelV2: (model: unknown) => model is LanguageModelV2$1;
20
- declare const isEmbeddingModelV2: (model: unknown) => model is EmbeddingModelV2;
21
- declare const isStreamResult: (result: LanguageModelV2Generate | LanguageModelV2Stream) => result is LanguageModelV2Stream;
22
- declare const isGenerateResult: (result: LanguageModelV2Generate | LanguageModelV2Stream) => result is LanguageModelV2Generate;
17
+ declare const isModelV2: (model: unknown) => model is LanguageModel | EmbeddingModel;
18
+ declare const isLanguageModelV2: (model: unknown) => model is LanguageModel;
19
+ declare const isEmbeddingModelV2: (model: unknown) => model is EmbeddingModel;
20
+ declare const isStreamResult: (result: LanguageModelGenerate | LanguageModelStream) => result is LanguageModelStream;
21
+ declare const isGenerateResult: (result: LanguageModelGenerate | LanguageModelStream) => result is LanguageModelGenerate;
23
22
  /**
24
23
  * Type guard to check if a retry attempt is an error attempt
25
24
  */
@@ -33,7 +32,7 @@ declare function isResultAttempt(attempt: RetryAttempt<any>): attempt is RetryRe
33
32
  * These types are also emitted by `onChunk` callbacks.
34
33
  * @see https://github.com/vercel/ai/blob/1fe4bd4144bff927f5319d9d206e782a73979ccb/packages/ai/src/generate-text/stream-text.ts#L686-L697
35
34
  */
36
- declare const isStreamContentPart: (part: LanguageModelV2StreamPart) => part is _ai_sdk_provider0.LanguageModelV2Source | _ai_sdk_provider0.LanguageModelV2ToolCall | {
35
+ declare const isStreamContentPart: (part: LanguageModelStreamPart) => part is _ai_sdk_provider0.LanguageModelV2Source | _ai_sdk_provider0.LanguageModelV2ToolCall | {
37
36
  type: "tool-result";
38
37
  toolCallId: string;
39
38
  toolName: string;
@@ -69,6 +68,6 @@ declare const isStreamContentPart: (part: LanguageModelV2StreamPart) => part is
69
68
  /**
70
69
  * Type guard to check if a value is a Retry object (has a model property with a MODEL)
71
70
  */
72
- declare const isRetry: <MODEL extends LanguageModelV2$1 | EmbeddingModelV2>(value: unknown) => value is Retry<MODEL>;
71
+ declare const isRetry: <MODEL extends LanguageModel | EmbeddingModel>(value: unknown) => value is Retry<MODEL>;
73
72
  //#endregion
74
- export { EmbeddingModelV2, EmbeddingModelV2CallOptions, EmbeddingModelV2Embed, LanguageModelV2, LanguageModelV2Generate, LanguageModelV2Stream, Retries, Retry, RetryAttempt, RetryContext, RetryErrorAttempt, RetryResultAttempt, Retryable, RetryableModelOptions, RetryableOptions, createRetryable, getModelKey, isEmbeddingModelV2, isErrorAttempt, isGenerateResult, isLanguageModelV2, isModelV2, isObject, isResultAttempt, isRetry, isStreamContentPart, isStreamResult, isString };
73
+ export { EmbeddingModel, EmbeddingModelCallOptions, EmbeddingModelEmbed, LanguageModel, LanguageModelCallOptions, LanguageModelGenerate, LanguageModelStream, LanguageModelStreamPart, Retries, Retry, RetryAttempt, RetryContext, RetryErrorAttempt, RetryResultAttempt, Retryable, RetryableModelOptions, RetryableOptions, createRetryable, getModelKey, isEmbeddingModelV2, isErrorAttempt, isGenerateResult, isLanguageModelV2, isModelV2, isObject, isResultAttempt, isRetry, isStreamContentPart, isStreamResult, isString };
@@ -1,4 +1,4 @@
1
- import { a as isModelV2, c as isRetry, d as isString, i as isLanguageModelV2, l as isStreamContentPart, n as isErrorAttempt, o as isObject, r as isGenerateResult, s as isResultAttempt, t as isEmbeddingModelV2, u as isStreamResult } from "./utils-DsvLGk6a.js";
1
+ import { a as isModelV2, c as isRetry, d as isString, i as isLanguageModelV2, l as isStreamContentPart, n as isErrorAttempt, o as isObject, r as isGenerateResult, s as isResultAttempt, t as isEmbeddingModelV2, u as isStreamResult } from "./utils-C26pNHta.mjs";
2
2
  import { delay } from "@ai-sdk/provider-utils";
3
3
  import { getErrorMessage } from "@ai-sdk/provider";
4
4
  import { RetryError } from "ai";
@@ -14,7 +14,7 @@ function calculateExponentialBackoff(baseDelay, backoffFactor = 1, attempts) {
14
14
  //#endregion
15
15
  //#region src/get-model-key.ts
16
16
  /**
17
- * Generate a unique key for a LanguageModelV2 instance.
17
+ * Generate a unique key for a LanguageModel instance.
18
18
  */
19
19
  const getModelKey = (model) => {
20
20
  return `${model.provider}/${model.modelId}`;
@@ -1,17 +1,17 @@
1
- import { h as RetryableOptions, i as LanguageModelV2, p as Retryable, t as EmbeddingModelV2 } from "../types-CphTxZ_b.js";
1
+ import { _ as RetryableOptions, h as Retryable, i as LanguageModel, t as EmbeddingModel } from "../types-TotEvw-5.mjs";
2
2
 
3
3
  //#region src/retryables/content-filter-triggered.d.ts
4
4
 
5
5
  /**
6
6
  * Fallback to a different model if the content filter was triggered.
7
7
  */
8
- declare function contentFilterTriggered<MODEL extends LanguageModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
8
+ declare function contentFilterTriggered<MODEL extends LanguageModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
9
9
  //#endregion
10
10
  //#region src/retryables/request-not-retryable.d.ts
11
11
  /**
12
12
  * Fallback to a different model if the error is non-retryable.
13
13
  */
14
- declare function requestNotRetryable<MODEL extends LanguageModelV2 | EmbeddingModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
14
+ declare function requestNotRetryable<MODEL extends LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
15
15
  //#endregion
16
16
  //#region src/retryables/request-timeout.d.ts
17
17
  /**
@@ -19,7 +19,7 @@ declare function requestNotRetryable<MODEL extends LanguageModelV2 | EmbeddingMo
19
19
  * Use in combination with the `abortSignal` option.
20
20
  * If no timeout is specified, a default of 60 seconds is used.
21
21
  */
22
- declare function requestTimeout<MODEL extends LanguageModelV2 | EmbeddingModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
22
+ declare function requestTimeout<MODEL extends LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
23
23
  //#endregion
24
24
  //#region src/retryables/retry-after-delay.d.ts
25
25
  /**
@@ -27,7 +27,7 @@ declare function requestTimeout<MODEL extends LanguageModelV2 | EmbeddingModelV2
27
27
  * Uses the `Retry-After` or `Retry-After-Ms` headers if present.
28
28
  * Otherwise uses the specified `delay` and `backoffFactor` if provided.
29
29
  */
30
- declare function retryAfterDelay<MODEL extends LanguageModelV2 | EmbeddingModelV2>(options: RetryableOptions<MODEL>): Retryable<MODEL>;
30
+ declare function retryAfterDelay<MODEL extends LanguageModel | EmbeddingModel>(options: RetryableOptions<MODEL>): Retryable<MODEL>;
31
31
  //#endregion
32
32
  //#region src/retryables/service-overloaded.d.ts
33
33
  /**
@@ -37,13 +37,13 @@ declare function retryAfterDelay<MODEL extends LanguageModelV2 | EmbeddingModelV
37
37
  * - Response with `type: "overloaded_error"`
38
38
  * - Response with a `message` containing "overloaded"
39
39
  */
40
- declare function serviceOverloaded<MODEL extends LanguageModelV2 | EmbeddingModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
40
+ declare function serviceOverloaded<MODEL extends LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
41
41
  //#endregion
42
42
  //#region src/retryables/service-unavailable.d.ts
43
43
  /**
44
44
  * Fallback to a different model if the provider returns a service unavailable error.
45
45
  * This retryable handles HTTP status code 503 (Service Unavailable).
46
46
  */
47
- declare function serviceUnavailable<MODEL extends LanguageModelV2 | EmbeddingModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
47
+ declare function serviceUnavailable<MODEL extends LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
48
48
  //#endregion
49
49
  export { contentFilterTriggered, requestNotRetryable, requestTimeout, retryAfterDelay, serviceOverloaded, serviceUnavailable };
@@ -1,4 +1,4 @@
1
- import { d as isString, n as isErrorAttempt, o as isObject, s as isResultAttempt } from "../utils-DsvLGk6a.js";
1
+ import { d as isString, n as isErrorAttempt, o as isObject, s as isResultAttempt } from "../utils-C26pNHta.mjs";
2
2
  import { isAbortError } from "@ai-sdk/provider-utils";
3
3
  import { APICallError } from "ai";
4
4
 
@@ -0,0 +1,76 @@
1
+ import { ProviderOptions } from "@ai-sdk/provider-utils";
2
+ import { EmbeddingModelV2, LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2StreamPart } from "@ai-sdk/provider";
3
+
4
+ //#region src/types.d.ts
5
+ type LanguageModel = LanguageModelV2;
6
+ type EmbeddingModel<VALUE = unknown> = EmbeddingModelV2<VALUE>;
7
+ type LanguageModelCallOptions = LanguageModelV2CallOptions;
8
+ type LanguageModelStreamPart = LanguageModelV2StreamPart;
9
+ /**
10
+ * Options for creating a retryable model.
11
+ */
12
+ interface RetryableModelOptions<MODEL extends LanguageModel | EmbeddingModel> {
13
+ model: MODEL;
14
+ retries: Retries<MODEL>;
15
+ disabled?: boolean | (() => boolean);
16
+ onError?: (context: RetryContext<MODEL>) => void;
17
+ onRetry?: (context: RetryContext<MODEL>) => void;
18
+ }
19
+ /**
20
+ * The context provided to Retryables with the current attempt and all previous attempts.
21
+ */
22
+ type RetryContext<MODEL extends LanguageModel | EmbeddingModel> = {
23
+ /**
24
+ * Current attempt that caused the retry
25
+ */
26
+ current: RetryAttempt<MODEL>;
27
+ /**
28
+ * All attempts made so far, including the current one
29
+ */
30
+ attempts: Array<RetryAttempt<MODEL>>;
31
+ };
32
+ /**
33
+ * A retry attempt with an error
34
+ */
35
+ type RetryErrorAttempt<MODEL extends LanguageModel | EmbeddingModel> = {
36
+ type: 'error';
37
+ error: unknown;
38
+ result?: undefined;
39
+ model: MODEL;
40
+ };
41
+ /**
42
+ * A retry attempt with a successful result
43
+ */
44
+ type RetryResultAttempt = {
45
+ type: 'result';
46
+ result: LanguageModelGenerate;
47
+ error?: undefined;
48
+ model: LanguageModel;
49
+ };
50
+ /**
51
+ * A retry attempt with either an error or a result and the model used
52
+ */
53
+ type RetryAttempt<MODEL extends LanguageModel | EmbeddingModel> = RetryErrorAttempt<MODEL> | RetryResultAttempt;
54
+ /**
55
+ * A model to retry with and the maximum number of attempts for that model.
56
+ */
57
+ type Retry<MODEL extends LanguageModel | EmbeddingModel> = {
58
+ model: MODEL;
59
+ maxAttempts?: number;
60
+ delay?: number;
61
+ backoffFactor?: number;
62
+ providerOptions?: ProviderOptions;
63
+ timeout?: number;
64
+ };
65
+ /**
66
+ * A function that determines whether to retry with a different model based on the current attempt and all previous attempts.
67
+ */
68
+ type Retryable<MODEL extends LanguageModel | EmbeddingModel> = (context: RetryContext<MODEL>) => Retry<MODEL> | Promise<Retry<MODEL> | undefined> | undefined;
69
+ type Retries<MODEL extends LanguageModel | EmbeddingModel> = Array<Retryable<MODEL> | Retry<MODEL> | MODEL>;
70
+ type RetryableOptions<MODEL extends LanguageModel | EmbeddingModel> = Partial<Omit<Retry<MODEL>, 'model'>>;
71
+ type LanguageModelGenerate = Awaited<ReturnType<LanguageModel['doGenerate']>>;
72
+ type LanguageModelStream = Awaited<ReturnType<LanguageModel['doStream']>>;
73
+ type EmbeddingModelCallOptions<VALUE> = Parameters<EmbeddingModel<VALUE>['doEmbed']>[0];
74
+ type EmbeddingModelEmbed<VALUE = any> = Awaited<ReturnType<EmbeddingModel<VALUE>['doEmbed']>>;
75
+ //#endregion
76
+ export { RetryableOptions as _, LanguageModelCallOptions as a, LanguageModelStreamPart as c, RetryAttempt as d, RetryContext as f, RetryableModelOptions as g, Retryable as h, LanguageModel as i, Retries as l, RetryResultAttempt as m, EmbeddingModelCallOptions as n, LanguageModelGenerate as o, RetryErrorAttempt as p, EmbeddingModelEmbed as r, LanguageModelStream as s, EmbeddingModel as t, Retry as u };
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "ai-retry",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "description": "AI SDK Retry",
5
- "main": "./dist/index.js",
6
- "module": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
5
+ "main": "./dist/index.mjs",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.mts",
8
8
  "type": "module",
9
9
  "files": [
10
10
  "dist"
11
11
  ],
12
12
  "exports": {
13
- ".": "./dist/index.js",
14
- "./retryables": "./dist/retryables/index.js",
13
+ ".": "./dist/index.mjs",
14
+ "./retryables": "./dist/retryables/index.mjs",
15
15
  "./package.json": "./package.json"
16
16
  },
17
17
  "publishConfig": {
@@ -45,22 +45,21 @@
45
45
  "husky": "^9.1.7",
46
46
  "msw": "^2.11.2",
47
47
  "pkg-pr-new": "^0.0.60",
48
- "publint": "^0.3.13",
49
- "tsdown": "^0.15.9",
50
- "tsx": "^4.20.5",
48
+ "publint": "^0.3.15",
49
+ "tsdown": "^0.16.7",
50
+ "tsx": "^4.20.6",
51
51
  "typescript": "^5.9.2",
52
- "unbuild": "^3.6.1",
53
- "vitest": "^3.2.4",
54
- "zod": "^4.1.8"
52
+ "vitest": "^4.0.14",
53
+ "zod": "^4.1.13"
55
54
  },
56
55
  "dependencies": {
57
56
  "@ai-sdk/provider": "^2.0.0",
58
57
  "@ai-sdk/provider-utils": "^3.0.9"
59
58
  },
60
59
  "scripts": {
61
- "publish:alpha": "pnpm version prerelease --preid alpha && pnpm publish --tag alpha",
62
60
  "build": "tsdown",
63
61
  "test": "vitest",
62
+ "typecheck": "tsc --noEmit",
64
63
  "lint": "biome check . --write"
65
64
  }
66
65
  }
@@ -1,73 +0,0 @@
1
- import { ProviderOptions } from "@ai-sdk/provider-utils";
2
- import { EmbeddingModelV2, LanguageModelV2 as LanguageModelV2$1 } from "@ai-sdk/provider";
3
-
4
- //#region src/types.d.ts
5
- type EmbeddingModelV2$1<VALUE = any> = EmbeddingModelV2<VALUE>;
6
- /**
7
- * Options for creating a retryable model.
8
- */
9
- interface RetryableModelOptions<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> {
10
- model: MODEL;
11
- retries: Retries<MODEL>;
12
- disabled?: boolean | (() => boolean);
13
- onError?: (context: RetryContext<MODEL>) => void;
14
- onRetry?: (context: RetryContext<MODEL>) => void;
15
- }
16
- /**
17
- * The context provided to Retryables with the current attempt and all previous attempts.
18
- */
19
- type RetryContext<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = {
20
- /**
21
- * Current attempt that caused the retry
22
- */
23
- current: RetryAttempt<MODEL>;
24
- /**
25
- * All attempts made so far, including the current one
26
- */
27
- attempts: Array<RetryAttempt<MODEL>>;
28
- };
29
- /**
30
- * A retry attempt with an error
31
- */
32
- type RetryErrorAttempt<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = {
33
- type: 'error';
34
- error: unknown;
35
- result?: undefined;
36
- model: MODEL;
37
- };
38
- /**
39
- * A retry attempt with a successful result
40
- */
41
- type RetryResultAttempt = {
42
- type: 'result';
43
- result: LanguageModelV2Generate;
44
- error?: undefined;
45
- model: LanguageModelV2$1;
46
- };
47
- /**
48
- * A retry attempt with either an error or a result and the model used
49
- */
50
- type RetryAttempt<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = RetryErrorAttempt<MODEL> | RetryResultAttempt;
51
- /**
52
- * A model to retry with and the maximum number of attempts for that model.
53
- */
54
- type Retry<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = {
55
- model: MODEL;
56
- maxAttempts?: number;
57
- delay?: number;
58
- backoffFactor?: number;
59
- providerOptions?: ProviderOptions;
60
- timeout?: number;
61
- };
62
- /**
63
- * A function that determines whether to retry with a different model based on the current attempt and all previous attempts.
64
- */
65
- type Retryable<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = (context: RetryContext<MODEL>) => Retry<MODEL> | Promise<Retry<MODEL>> | undefined;
66
- type Retries<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = Array<Retryable<MODEL> | Retry<MODEL> | MODEL>;
67
- type RetryableOptions<MODEL extends LanguageModelV2$1 | EmbeddingModelV2$1> = Partial<Omit<Retry<MODEL>, 'model'>>;
68
- type LanguageModelV2Generate = Awaited<ReturnType<LanguageModelV2$1['doGenerate']>>;
69
- type LanguageModelV2Stream = Awaited<ReturnType<LanguageModelV2$1['doStream']>>;
70
- type EmbeddingModelV2CallOptions<VALUE> = Parameters<EmbeddingModelV2$1<VALUE>['doEmbed']>[0];
71
- type EmbeddingModelV2Embed<VALUE> = Awaited<ReturnType<EmbeddingModelV2$1<VALUE>['doEmbed']>>;
72
- //#endregion
73
- export { LanguageModelV2Generate as a, Retry as c, RetryErrorAttempt as d, RetryResultAttempt as f, RetryableOptions as h, LanguageModelV2$1 as i, RetryAttempt as l, RetryableModelOptions as m, EmbeddingModelV2CallOptions as n, LanguageModelV2Stream as o, Retryable as p, EmbeddingModelV2Embed as r, Retries as s, EmbeddingModelV2$1 as t, RetryContext as u };
File without changes