ai-retry 0.11.0 → 0.12.0

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
@@ -94,6 +94,41 @@ const result = await embed({
94
94
  console.log(result.embedding);
95
95
  ```
96
96
 
97
+ #### Vercel AI Gateway
98
+
99
+ You can use `ai-retry` with Vercel AI Gateway by providing the model as a string. Internally, the model will be resolved with the default `gateway` [provider instance](https://ai-sdk.dev/providers/ai-sdk-providers/ai-gateway#provider-instance) from AI SDK.
100
+
101
+ ```typescript
102
+ import { gateway } from 'ai';
103
+ import { createRetryable } from 'ai-retry';
104
+
105
+ const retryableModel = createRetryable({
106
+ model: 'openai/gpt-5',
107
+ retries: [
108
+ 'anthropic/claude-sonnet-4'
109
+ ]
110
+ });
111
+
112
+ // Is the same as:
113
+ const retryableModel = createRetryable({
114
+ model: gateway('openai/gpt-5'),
115
+ retries: [
116
+ gateway('anthropic/claude-sonnet-4')
117
+ ]
118
+ });
119
+ ```
120
+
121
+ By default, the `gateway` provider resolves model strings as language models. If you want to use an embedding model, you need to use the `textEmbeddingModel` method.
122
+
123
+ ```typescript
124
+ import { gateway } from 'ai';
125
+ import { createRetryable } from 'ai-retry';
126
+
127
+ const retryableModel = createRetryable({
128
+ model: gateway.textEmbeddingModel('openai/text-embedding-3-large'),
129
+ });
130
+ ```
131
+
97
132
  ### Retryables
98
133
 
99
134
  The objects passed to the `retries` are called retryables and control the retry behavior. We can distinguish between two types of retryables:
package/dist/index.d.mts CHANGED
@@ -1,7 +1,10 @@
1
- import { _ as RetryResultAttempt, a as LanguageModel, b as RetryableOptions, c as LanguageModelPrompt, d as LanguageModelStreamPart, f as Retries, g as RetryErrorAttempt, h as RetryContext, i as EmbeddingModelRetryCallOptions, l as LanguageModelRetryCallOptions, m as RetryAttempt, n as EmbeddingModelCallOptions, o as LanguageModelCallOptions, p as Retry, r as EmbeddingModelEmbed, s as LanguageModelGenerate, t as EmbeddingModel, u as LanguageModelStream, v as Retryable, y as RetryableModelOptions } from "./types-D4wXoA4D.mjs";
1
+ import { C as RetryableModelOptions, S as Retryable, _ as Retry, a as GatewayLanguageModelId, b as RetryErrorAttempt, c as LanguageModelGenerate, d as LanguageModelStreamPart, f as ProviderOptions, g as Retries, h as ResolvedModel, i as EmbeddingModelRetryCallOptions, l as LanguageModelRetryCallOptions, m as ResolvableModel, n as EmbeddingModelCallOptions, o as LanguageModel, p as ResolvableLanguageModel, r as EmbeddingModelEmbed, s as LanguageModelCallOptions, t as EmbeddingModel, u as LanguageModelStream, v as RetryAttempt, w as RetryableOptions, x as RetryResultAttempt, y as RetryContext } from "./types-Csx79V-W.mjs";
2
2
  import * as _ai_sdk_provider0 from "@ai-sdk/provider";
3
3
 
4
4
  //#region src/create-retryable-model.d.ts
5
+ declare function createRetryable<MODEL extends LanguageModel>(options: Omit<RetryableModelOptions<LanguageModel>, 'model'> & {
6
+ model: GatewayLanguageModelId;
7
+ }): LanguageModel;
5
8
  declare function createRetryable<MODEL extends LanguageModel>(options: RetryableModelOptions<MODEL>): LanguageModel;
6
9
  declare function createRetryable<MODEL extends EmbeddingModel>(options: RetryableModelOptions<MODEL>): EmbeddingModel;
7
10
  //#endregion
@@ -14,9 +17,9 @@ declare const getModelKey: (model: LanguageModel | EmbeddingModel) => string;
14
17
  //#region src/utils.d.ts
15
18
  declare const isObject: (value: unknown) => value is Record<string, unknown>;
16
19
  declare const isString: (value: unknown) => value is string;
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 isModel: (model: unknown) => model is LanguageModel | EmbeddingModel;
21
+ declare const isLanguageModel: (model: unknown) => model is LanguageModel;
22
+ declare const isEmbeddingModel: (model: unknown) => model is EmbeddingModel;
20
23
  declare const isStreamResult: (result: LanguageModelGenerate | LanguageModelStream) => result is LanguageModelStream;
21
24
  declare const isGenerateResult: (result: LanguageModelGenerate | LanguageModelStream) => result is LanguageModelGenerate;
22
25
  /**
@@ -65,9 +68,5 @@ declare const isStreamContentPart: (part: LanguageModelStreamPart) => part is _a
65
68
  type: "raw";
66
69
  rawValue: unknown;
67
70
  };
68
- /**
69
- * Type guard to check if a value is a Retry object (has a model property with a MODEL)
70
- */
71
- declare const isRetry: <MODEL extends LanguageModel | EmbeddingModel>(value: unknown) => value is Retry<MODEL>;
72
71
  //#endregion
73
- export { EmbeddingModel, EmbeddingModelCallOptions, EmbeddingModelEmbed, EmbeddingModelRetryCallOptions, LanguageModel, LanguageModelCallOptions, LanguageModelGenerate, LanguageModelPrompt, LanguageModelRetryCallOptions, LanguageModelStream, LanguageModelStreamPart, Retries, Retry, RetryAttempt, RetryContext, RetryErrorAttempt, RetryResultAttempt, Retryable, RetryableModelOptions, RetryableOptions, createRetryable, getModelKey, isEmbeddingModelV2, isErrorAttempt, isGenerateResult, isLanguageModelV2, isModelV2, isObject, isResultAttempt, isRetry, isStreamContentPart, isStreamResult, isString };
72
+ export { EmbeddingModel, EmbeddingModelCallOptions, EmbeddingModelEmbed, EmbeddingModelRetryCallOptions, GatewayLanguageModelId, LanguageModel, LanguageModelCallOptions, LanguageModelGenerate, LanguageModelRetryCallOptions, LanguageModelStream, LanguageModelStreamPart, ProviderOptions, ResolvableLanguageModel, ResolvableModel, ResolvedModel, Retries, Retry, RetryAttempt, RetryContext, RetryErrorAttempt, RetryResultAttempt, Retryable, RetryableModelOptions, RetryableOptions, createRetryable, getModelKey, isEmbeddingModel, isErrorAttempt, isGenerateResult, isLanguageModel, isModel, isObject, isResultAttempt, isStreamContentPart, isStreamResult, isString };
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
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";
1
+ import { a as isModel, c as isStreamContentPart, i as isLanguageModel, l as isStreamResult, n as isErrorAttempt, o as isObject, r as isGenerateResult, s as isResultAttempt, t as isEmbeddingModel, u as isString } from "./utils-C_AwyHeC.mjs";
2
+ import { RetryError, gateway } from "ai";
2
3
  import { delay } from "@ai-sdk/provider-utils";
3
4
  import { getErrorMessage } from "@ai-sdk/provider";
4
- import { RetryError } from "ai";
5
5
 
6
6
  //#region src/calculate-exponential-backoff.ts
7
7
  /**
@@ -27,6 +27,15 @@ function countModelAttempts(model, attempts) {
27
27
  return attempts.filter((a) => getModelKey(a.model) === modelKey).length;
28
28
  }
29
29
 
30
+ //#endregion
31
+ //#region src/resolve-model.ts
32
+ /**
33
+ * Resolve a model string via the AI SDK Gateway to a modelinstance
34
+ */
35
+ function resolveModel(model) {
36
+ return isModel(model) ? model : gateway(model);
37
+ }
38
+
30
39
  //#endregion
31
40
  //#region src/find-retry-model.ts
32
41
  /**
@@ -45,13 +54,19 @@ async function findRetryModel(retries, context) {
45
54
  for (const retry of applicableRetries) {
46
55
  let retryModel;
47
56
  if (typeof retry === "function") retryModel = await retry(context);
48
- else if (isRetry(retry)) retryModel = retry;
57
+ else if (isObject(retry) && "model" in retry) retryModel = retry;
49
58
  else retryModel = { model: retry };
50
59
  if (retryModel) {
60
+ /**
61
+ * The model can be string or an instance.
62
+ * If it is a string, we need to resolve it to an instance.
63
+ */
64
+ const modelValue = retryModel.model;
65
+ const resolvedModel = resolveModel(modelValue);
51
66
  /**
52
67
  * The model key uniquely identifies a model instance (provider + modelId)
53
68
  */
54
- const retryModelKey = getModelKey(retryModel.model);
69
+ const retryModelKey = getModelKey(resolvedModel);
55
70
  /**
56
71
  * Find all attempts with the same model
57
72
  */
@@ -60,7 +75,10 @@ async function findRetryModel(retries, context) {
60
75
  /**
61
76
  * Check if the model can still be retried based on maxAttempts
62
77
  */
63
- if (retryAttempts.length < maxAttempts) return retryModel;
78
+ if (retryAttempts.length < maxAttempts) return {
79
+ ...retryModel,
80
+ model: resolvedModel
81
+ };
64
82
  }
65
83
  }
66
84
  }
@@ -548,9 +566,16 @@ var RetryableLanguageModel = class {
548
566
  //#endregion
549
567
  //#region src/create-retryable-model.ts
550
568
  function createRetryable(options) {
551
- if ("doEmbed" in options.model) return new RetryableEmbeddingModel(options);
552
- return new RetryableLanguageModel(options);
569
+ const model = isModel(options.model) ? options.model : gateway(options.model);
570
+ if (isEmbeddingModel(model)) return new RetryableEmbeddingModel({
571
+ ...options,
572
+ model
573
+ });
574
+ return new RetryableLanguageModel({
575
+ ...options,
576
+ model
577
+ });
553
578
  }
554
579
 
555
580
  //#endregion
556
- export { createRetryable, getModelKey, isEmbeddingModelV2, isErrorAttempt, isGenerateResult, isLanguageModelV2, isModelV2, isObject, isResultAttempt, isRetry, isStreamContentPart, isStreamResult, isString };
581
+ export { createRetryable, getModelKey, isEmbeddingModel, isErrorAttempt, isGenerateResult, isLanguageModel, isModel, isObject, isResultAttempt, isStreamContentPart, isStreamResult, isString };
@@ -1,17 +1,17 @@
1
- import { a as LanguageModel, b as RetryableOptions, t as EmbeddingModel, v as Retryable } from "../types-D4wXoA4D.mjs";
1
+ import { S as Retryable, p as ResolvableLanguageModel, t as EmbeddingModel, w as RetryableOptions } from "../types-Csx79V-W.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 LanguageModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
8
+ declare function contentFilterTriggered<MODEL extends ResolvableLanguageModel>(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 LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
14
+ declare function requestNotRetryable<MODEL extends ResolvableLanguageModel | 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 LanguageModel | EmbeddingMode
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 LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
22
+ declare function requestTimeout<MODEL extends ResolvableLanguageModel | 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 LanguageModel | EmbeddingModel>(mo
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 LanguageModel | EmbeddingModel>(options: RetryableOptions<MODEL>): Retryable<MODEL>;
30
+ declare function retryAfterDelay<MODEL extends ResolvableLanguageModel | 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 LanguageModel | EmbeddingModel>(o
37
37
  * - Response with `type: "overloaded_error"`
38
38
  * - Response with a `message` containing "overloaded"
39
39
  */
40
- declare function serviceOverloaded<MODEL extends LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
40
+ declare function serviceOverloaded<MODEL extends ResolvableLanguageModel | 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 LanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
47
+ declare function serviceUnavailable<MODEL extends ResolvableLanguageModel | EmbeddingModel>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
48
48
  //#endregion
49
49
  export { contentFilterTriggered, requestNotRetryable, requestTimeout, retryAfterDelay, serviceOverloaded, serviceUnavailable };
@@ -1,6 +1,6 @@
1
- import { d as isString, n as isErrorAttempt, o as isObject, s as isResultAttempt } from "../utils-C26pNHta.mjs";
2
- import { isAbortError } from "@ai-sdk/provider-utils";
1
+ import { n as isErrorAttempt, o as isObject, s as isResultAttempt, u as isString } from "../utils-C_AwyHeC.mjs";
3
2
  import { APICallError } from "ai";
3
+ import { isAbortError } from "@ai-sdk/provider-utils";
4
4
 
5
5
  //#region src/retryables/content-filter-triggered.ts
6
6
  /**
@@ -1,15 +1,17 @@
1
- import { EmbeddingModelV2, LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2Prompt, LanguageModelV2StreamPart, SharedV2ProviderOptions } from "@ai-sdk/provider";
1
+ import { gateway } from "ai";
2
+ import { EmbeddingModelV2, LanguageModelV2, LanguageModelV2CallOptions, LanguageModelV2StreamPart, SharedV2ProviderOptions } from "@ai-sdk/provider";
2
3
 
3
4
  //#region src/types.d.ts
5
+ type Literals<T> = T extends string ? string extends T ? never : T : never;
4
6
  type LanguageModel = LanguageModelV2;
5
7
  type EmbeddingModel<VALUE = any> = EmbeddingModelV2<VALUE>;
6
8
  type LanguageModelCallOptions = LanguageModelV2CallOptions;
7
9
  type LanguageModelStreamPart = LanguageModelV2StreamPart;
8
- type LanguageModelPrompt = LanguageModelV2Prompt;
9
- type LanguageModelGenerate = Awaited<ReturnType<LanguageModel['doGenerate']>>;
10
- type LanguageModelStream = Awaited<ReturnType<LanguageModel['doStream']>>;
11
- type EmbeddingModelCallOptions<VALUE = any> = Parameters<EmbeddingModel<VALUE>['doEmbed']>[0];
12
- type EmbeddingModelEmbed<VALUE = any> = Awaited<ReturnType<EmbeddingModel<VALUE>['doEmbed']>>;
10
+ type ProviderOptions = SharedV2ProviderOptions;
11
+ type GatewayLanguageModelId = Parameters<(typeof gateway)['languageModel']>[0];
12
+ type ResolvableLanguageModel = LanguageModel | Literals<GatewayLanguageModelId>;
13
+ type ResolvableModel<MODEL extends LanguageModel | EmbeddingModel> = MODEL extends LanguageModel ? ResolvableLanguageModel : EmbeddingModel;
14
+ type ResolvedModel<MODEL extends ResolvableLanguageModel | EmbeddingModel> = MODEL extends ResolvableLanguageModel ? LanguageModel : EmbeddingModel;
13
15
  /**
14
16
  * Call options that can be overridden during retry for language models.
15
17
  */
@@ -51,15 +53,15 @@ type RetryAttempt<MODEL extends LanguageModel | EmbeddingModel> = RetryErrorAtte
51
53
  /**
52
54
  * The context provided to Retryables with the current attempt and all previous attempts.
53
55
  */
54
- type RetryContext<MODEL extends LanguageModel | EmbeddingModel> = {
56
+ type RetryContext<MODEL extends ResolvableLanguageModel | EmbeddingModel> = {
55
57
  /**
56
58
  * Current attempt that caused the retry
57
59
  */
58
- current: RetryAttempt<MODEL>;
60
+ current: RetryAttempt<ResolvedModel<MODEL>>;
59
61
  /**
60
62
  * All attempts made so far, including the current one
61
63
  */
62
- attempts: Array<RetryAttempt<MODEL>>;
64
+ attempts: Array<RetryAttempt<ResolvedModel<MODEL>>>;
63
65
  };
64
66
  /**
65
67
  * Options for creating a retryable model.
@@ -73,8 +75,16 @@ interface RetryableModelOptions<MODEL extends LanguageModel | EmbeddingModel> {
73
75
  }
74
76
  /**
75
77
  * A model to retry with and the maximum number of attempts for that model.
78
+ *
79
+ * The model can be:
80
+ * - The exact MODEL type (instance)
81
+ * - A gateway string literal (for LanguageModel only)
82
+ * - A ResolvableModel<MODEL> (for compatibility with plain model arrays)
83
+ *
84
+ * This flexible approach allows retryable functions to return the exact model type
85
+ * they received without type assertions, while still supporting string-based gateway models.
76
86
  */
77
- type Retry<MODEL extends LanguageModel | EmbeddingModel> = {
87
+ type Retry<MODEL extends ResolvableLanguageModel | EmbeddingModel> = {
78
88
  model: MODEL;
79
89
  /**
80
90
  * Maximum number of attempts for this model.
@@ -108,8 +118,12 @@ type Retry<MODEL extends LanguageModel | EmbeddingModel> = {
108
118
  /**
109
119
  * A function that determines whether to retry with a different model based on the current attempt and all previous attempts.
110
120
  */
111
- type Retryable<MODEL extends LanguageModel | EmbeddingModel> = (context: RetryContext<MODEL>) => Retry<MODEL> | Promise<Retry<MODEL> | undefined> | undefined;
112
- type Retries<MODEL extends LanguageModel | EmbeddingModel> = Array<Retryable<MODEL> | Retry<MODEL> | MODEL>;
113
- type RetryableOptions<MODEL extends LanguageModel | EmbeddingModel> = Partial<Omit<Retry<MODEL>, 'model'>>;
121
+ type Retryable<MODEL extends ResolvableLanguageModel | EmbeddingModel> = (context: RetryContext<MODEL>) => Retry<MODEL> | Promise<Retry<MODEL> | undefined> | undefined;
122
+ type Retries<MODEL extends LanguageModel | EmbeddingModel> = Array<Retryable<ResolvableModel<MODEL>> | Retry<ResolvableModel<MODEL>> | ResolvableModel<MODEL>>;
123
+ type RetryableOptions<MODEL extends ResolvableLanguageModel | EmbeddingModel> = Partial<Omit<Retry<MODEL>, 'model'>>;
124
+ type LanguageModelGenerate = Awaited<ReturnType<LanguageModel['doGenerate']>>;
125
+ type LanguageModelStream = Awaited<ReturnType<LanguageModel['doStream']>>;
126
+ type EmbeddingModelCallOptions<VALUE> = Parameters<EmbeddingModel<VALUE>['doEmbed']>[0];
127
+ type EmbeddingModelEmbed<VALUE = any> = Awaited<ReturnType<EmbeddingModel<VALUE>['doEmbed']>>;
114
128
  //#endregion
115
- export { RetryResultAttempt as _, LanguageModel as a, RetryableOptions as b, LanguageModelPrompt as c, LanguageModelStreamPart as d, Retries as f, RetryErrorAttempt as g, RetryContext as h, EmbeddingModelRetryCallOptions as i, LanguageModelRetryCallOptions as l, RetryAttempt as m, EmbeddingModelCallOptions as n, LanguageModelCallOptions as o, Retry as p, EmbeddingModelEmbed as r, LanguageModelGenerate as s, EmbeddingModel as t, LanguageModelStream as u, Retryable as v, RetryableModelOptions as y };
129
+ export { RetryableModelOptions as C, Retryable as S, Retry as _, GatewayLanguageModelId as a, RetryErrorAttempt as b, LanguageModelGenerate as c, LanguageModelStreamPart as d, ProviderOptions as f, Retries as g, ResolvedModel as h, EmbeddingModelRetryCallOptions as i, LanguageModelRetryCallOptions as l, ResolvableModel as m, EmbeddingModelCallOptions as n, LanguageModel as o, ResolvableLanguageModel as p, EmbeddingModelEmbed as r, LanguageModelCallOptions as s, EmbeddingModel as t, LanguageModelStream as u, RetryAttempt as v, RetryableOptions as w, RetryResultAttempt as x, RetryContext as y };
@@ -1,9 +1,9 @@
1
1
  //#region src/utils.ts
2
2
  const isObject = (value) => typeof value === "object" && value !== null;
3
3
  const isString = (value) => typeof value === "string";
4
- const isModelV2 = (model) => isLanguageModelV2(model) || isEmbeddingModelV2(model);
5
- const isLanguageModelV2 = (model) => isObject(model) && "provider" in model && "modelId" in model && "specificationVersion" in model && model.specificationVersion === "v2";
6
- const isEmbeddingModelV2 = (model) => isObject(model) && "provider" in model && "modelId" in model && "specificationVersion" in model && model.specificationVersion === "v2";
4
+ const isModel = (model) => isLanguageModel(model) || isEmbeddingModel(model);
5
+ const isLanguageModel = (model) => isObject(model) && "provider" in model && "modelId" in model && "specificationVersion" in model && "doGenerate" in model && model.specificationVersion === "v2";
6
+ const isEmbeddingModel = (model) => isObject(model) && "provider" in model && "modelId" in model && "specificationVersion" in model && "doEmbed" in model && model.specificationVersion === "v2";
7
7
  const isStreamResult = (result) => "stream" in result;
8
8
  const isGenerateResult = (result) => "content" in result;
9
9
  /**
@@ -26,10 +26,6 @@ function isResultAttempt(attempt) {
26
26
  const isStreamContentPart = (part) => {
27
27
  return part.type === "text-delta" || part.type === "reasoning-delta" || part.type === "source" || part.type === "tool-call" || part.type === "tool-result" || part.type === "tool-input-start" || part.type === "tool-input-delta" || part.type === "raw";
28
28
  };
29
- /**
30
- * Type guard to check if a value is a Retry object (has a model property with a MODEL)
31
- */
32
- const isRetry = (value) => isObject(value) && "model" in value && isModelV2(value.model);
33
29
 
34
30
  //#endregion
35
- export { isModelV2 as a, isRetry as c, isString as d, isLanguageModelV2 as i, isStreamContentPart as l, isErrorAttempt as n, isObject as o, isGenerateResult as r, isResultAttempt as s, isEmbeddingModelV2 as t, isStreamResult as u };
31
+ export { isModel as a, isStreamContentPart as c, isLanguageModel as i, isStreamResult as l, isErrorAttempt as n, isObject as o, isGenerateResult as r, isResultAttempt as s, isEmbeddingModel as t, isString as u };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-retry",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "AI SDK Retry",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -35,13 +35,14 @@
35
35
  "devDependencies": {
36
36
  "@ai-sdk/anthropic": "^2.0.18",
37
37
  "@ai-sdk/azure": "^2.0.30",
38
+ "@ai-sdk/gateway": "^2.0.15",
38
39
  "@ai-sdk/groq": "^2.0.24",
39
40
  "@ai-sdk/openai": "^2.0.53",
40
41
  "@arethetypeswrong/cli": "^0.18.2",
41
42
  "@biomejs/biome": "^2.2.4",
42
43
  "@total-typescript/tsconfig": "^1.0.4",
43
44
  "@types/node": "^24.3.3",
44
- "ai": "^5.0.44",
45
+ "ai": "^5.0.102",
45
46
  "husky": "^9.1.7",
46
47
  "msw": "^2.11.2",
47
48
  "pkg-pr-new": "^0.0.60",