ai-retry 0.8.0 → 0.9.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 +19 -0
- package/dist/retryables/index.d.ts +8 -1
- package/dist/retryables/index.js +21 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -251,12 +251,16 @@ Errors are tracked per unique model (provider + modelId). That means on the firs
|
|
|
251
251
|
|
|
252
252
|
There are several built-in dynamic retryables available for common use cases:
|
|
253
253
|
|
|
254
|
+
> [!TIP]
|
|
255
|
+
> You are missing a retryable for your use case? [Open an issue](https://github.com/zirkelc/ai-retry/issues/new) and let's discuss it!
|
|
256
|
+
|
|
254
257
|
- [`contentFilterTriggered`](./src/retryables/content-filter-triggered.ts): Content filter was triggered based on the prompt or completion.
|
|
255
258
|
- [`requestTimeout`](./src/retryables/request-timeout.ts): Request timeout occurred.
|
|
256
259
|
- [`requestNotRetryable`](./src/retryables/request-not-retryable.ts): Request failed with a non-retryable error.
|
|
257
260
|
- [`retryAfterDelay`](./src/retryables/retry-after-delay.ts): Retry with delay and exponential backoff and respect `retry-after` headers.
|
|
258
261
|
- [`serviceOverloaded`](./src/retryables/service-overloaded.ts): Response with status code 529 (service overloaded).
|
|
259
262
|
- Use this retryable to handle Anthropic's overloaded errors.
|
|
263
|
+
- [`serviceUnavailable`](./src/retryables/service-unavailable.ts): Response with status code 503 (service unavailable).
|
|
260
264
|
|
|
261
265
|
#### Content Filter
|
|
262
266
|
|
|
@@ -324,6 +328,21 @@ const retryableModel = createRetryable({
|
|
|
324
328
|
});
|
|
325
329
|
```
|
|
326
330
|
|
|
331
|
+
#### Service Unavailable
|
|
332
|
+
|
|
333
|
+
Handle service unavailable errors (status code 503) by switching to a different provider.
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
import { serviceUnavailable } from 'ai-retry/retryables';
|
|
337
|
+
|
|
338
|
+
const retryableModel = createRetryable({
|
|
339
|
+
model: azure('gpt-4'),
|
|
340
|
+
retries: [
|
|
341
|
+
serviceUnavailable(openai('gpt-4')), // Switch to OpenAI if Azure is unavailable
|
|
342
|
+
],
|
|
343
|
+
});
|
|
344
|
+
```
|
|
345
|
+
|
|
327
346
|
#### Request Not Retryable
|
|
328
347
|
|
|
329
348
|
Handle cases where the base model fails with a non-retryable error.
|
|
@@ -39,4 +39,11 @@ declare function retryAfterDelay<MODEL extends LanguageModelV2 | EmbeddingModelV
|
|
|
39
39
|
*/
|
|
40
40
|
declare function serviceOverloaded<MODEL extends LanguageModelV2 | EmbeddingModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
|
|
41
41
|
//#endregion
|
|
42
|
-
|
|
42
|
+
//#region src/retryables/service-unavailable.d.ts
|
|
43
|
+
/**
|
|
44
|
+
* Fallback to a different model if the provider returns a service unavailable error.
|
|
45
|
+
* This retryable handles HTTP status code 503 (Service Unavailable).
|
|
46
|
+
*/
|
|
47
|
+
declare function serviceUnavailable<MODEL extends LanguageModelV2 | EmbeddingModelV2>(model: MODEL, options?: RetryableOptions<MODEL>): Retryable<MODEL>;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { contentFilterTriggered, requestNotRetryable, requestTimeout, retryAfterDelay, serviceOverloaded, serviceUnavailable };
|
package/dist/retryables/index.js
CHANGED
|
@@ -152,4 +152,24 @@ function serviceOverloaded(model, options) {
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
//#endregion
|
|
155
|
-
|
|
155
|
+
//#region src/retryables/service-unavailable.ts
|
|
156
|
+
/**
|
|
157
|
+
* Fallback to a different model if the provider returns a service unavailable error.
|
|
158
|
+
* This retryable handles HTTP status code 503 (Service Unavailable).
|
|
159
|
+
*/
|
|
160
|
+
function serviceUnavailable(model, options) {
|
|
161
|
+
return (context) => {
|
|
162
|
+
const { current } = context;
|
|
163
|
+
if (isErrorAttempt(current)) {
|
|
164
|
+
const { error } = current;
|
|
165
|
+
if (APICallError.isInstance(error) && error.statusCode === 503) return {
|
|
166
|
+
model,
|
|
167
|
+
maxAttempts: 1,
|
|
168
|
+
...options
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
//#endregion
|
|
175
|
+
export { contentFilterTriggered, requestNotRetryable, requestTimeout, retryAfterDelay, serviceOverloaded, serviceUnavailable };
|