ai 6.0.283 → 6.0.284
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/CHANGELOG.md +9 -0
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -1
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/docs/07-reference/05-ai-sdk-errors/index.mdx +127 -33
- package/package.json +2 -2
- package/src/embed/embed.ts +8 -0
- package/src/rerank/rerank.ts +25 -1
package/dist/internal/index.js
CHANGED
|
@@ -164,7 +164,7 @@ function detectMediaType({
|
|
|
164
164
|
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
|
165
165
|
|
|
166
166
|
// src/version.ts
|
|
167
|
-
var VERSION = true ? "6.0.
|
|
167
|
+
var VERSION = true ? "6.0.284" : "0.0.0-test";
|
|
168
168
|
|
|
169
169
|
// src/util/download/download.ts
|
|
170
170
|
var download = async ({
|
package/dist/internal/index.mjs
CHANGED
|
@@ -1,40 +1,134 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: AI SDK Errors
|
|
3
|
-
description:
|
|
3
|
+
description: Reference for AI SDK error classes and typed error handling.
|
|
4
4
|
collapsed: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# AI SDK Errors
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
9
|
+
The AI SDK exposes typed errors so applications can handle expected failure
|
|
10
|
+
modes without matching error message strings.
|
|
11
|
+
|
|
12
|
+
## Importing Errors
|
|
13
|
+
|
|
14
|
+
The application package is named `ai`, not `@ai-sdk/ai`. It re-exports common
|
|
15
|
+
provider-level errors from `@ai-sdk/provider` together with the higher-level
|
|
16
|
+
errors raised by AI SDK Core:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { APICallError, NoObjectGeneratedError } from 'ai';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Provider implementations that depend directly on `@ai-sdk/provider` can import
|
|
23
|
+
its provider-level errors from that package instead:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { APICallError, InvalidResponseDataError } from '@ai-sdk/provider';
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Migrating to Typed Error Handling
|
|
30
|
+
|
|
31
|
+
Replace message matching or an unconditionally generic `catch` block with the
|
|
32
|
+
most specific static `isInstance` guard available. Check `AISDKError` last when
|
|
33
|
+
you need a fallback for any AI SDK error:
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { AISDKError, APICallError, generateText } from 'ai';
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
await generateText({
|
|
40
|
+
model,
|
|
41
|
+
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
|
|
42
|
+
});
|
|
43
|
+
} catch (error) {
|
|
44
|
+
if (APICallError.isInstance(error)) {
|
|
45
|
+
console.error('Provider request failed:', error.statusCode);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (AISDKError.isInstance(error)) {
|
|
50
|
+
console.error('AI SDK error:', error.name);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Prefer `ErrorClass.isInstance(error)` over `error instanceof ErrorClass` when
|
|
59
|
+
the class provides it. The static guard also works when multiple AI SDK package
|
|
60
|
+
versions are loaded.
|
|
61
|
+
|
|
62
|
+
## Common Failure Modes
|
|
63
|
+
|
|
64
|
+
| Failure mode | Error to check |
|
|
65
|
+
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
66
|
+
| A provider request fails because of a network error or non-success response | [`APICallError`](/docs/reference/ai-sdk-errors/ai-api-call-error) |
|
|
67
|
+
| Automatic retries fail after multiple attempts | [`RetryError`](/docs/reference/ai-sdk-errors/ai-retry-error) |
|
|
68
|
+
| A structured output cannot be parsed or validated | [`NoObjectGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-object-generated-error); inspect its `cause` for [`JSONParseError`](/docs/reference/ai-sdk-errors/ai-json-parse-error) or [`TypeValidationError`](/docs/reference/ai-sdk-errors/ai-type-validation-error) |
|
|
69
|
+
| A generation call returns no usable output | [`NoOutputGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-output-generated-error) or the modality-specific `No*GeneratedError` |
|
|
70
|
+
| A model calls a missing tool or supplies invalid tool input | [`NoSuchToolError`](/docs/reference/ai-sdk-errors/ai-no-such-tool-error) or [`InvalidToolInputError`](/docs/reference/ai-sdk-errors/ai-invalid-tool-input-error) |
|
|
71
|
+
| Tool-call repair fails | [`ToolCallRepairError`](/docs/reference/ai-sdk-errors/ai-tool-call-repair-error) |
|
|
72
|
+
| A response violates an enforced `toolChoice` | [`ToolChoiceViolationError`](/docs/reference/ai-sdk-errors/ai-tool-choice-violation-error) |
|
|
73
|
+
| Message history contains unresolved tool calls or invalid approvals | [`MissingToolResultsError`](/docs/troubleshooting/missing-tool-results-error), [`InvalidToolApprovalError`](/docs/reference/ai-sdk-errors/ai-invalid-tool-approval-error), or [`InvalidToolApprovalSignatureError`](/docs/reference/ai-sdk-errors/ai-invalid-tool-approval-signature-error) |
|
|
74
|
+
| A provider or model cannot be resolved | [`NoSuchProviderError`](/docs/reference/ai-sdk-errors/ai-no-such-provider-error) or [`NoSuchModelError`](/docs/reference/ai-sdk-errors/ai-no-such-model-error) |
|
|
75
|
+
| A provider response is empty, malformed, or invalid | [`EmptyResponseBodyError`](/docs/reference/ai-sdk-errors/ai-empty-response-body-error), [`JSONParseError`](/docs/reference/ai-sdk-errors/ai-json-parse-error), or [`InvalidResponseDataError`](/docs/reference/ai-sdk-errors/ai-invalid-response-data-error) |
|
|
76
|
+
| The requested model or provider does not support a capability or specification version | [`UnsupportedFunctionalityError`](/docs/reference/ai-sdk-errors/ai-unsupported-functionality-error) or [`UnsupportedModelVersionError`](/docs/troubleshooting/unsupported-model-version) |
|
|
77
|
+
| UI messages cannot be converted or a UI message stream is invalid | [`MessageConversionError`](/docs/reference/ai-sdk-errors/ai-message-conversion-error) or [`UIMessageStreamError`](/docs/reference/ai-sdk-errors/ai-ui-message-stream-error) |
|
|
78
|
+
|
|
79
|
+
## Error Reference
|
|
80
|
+
|
|
81
|
+
### Base Error
|
|
82
|
+
|
|
83
|
+
- `AISDKError`: Base class and broad type guard for AI SDK errors.
|
|
84
|
+
|
|
85
|
+
### Provider Requests and Responses
|
|
86
|
+
|
|
87
|
+
- [`APICallError`](/docs/reference/ai-sdk-errors/ai-api-call-error)
|
|
88
|
+
- [`DownloadError`](/docs/reference/ai-sdk-errors/ai-download-error)
|
|
89
|
+
- [`EmptyResponseBodyError`](/docs/reference/ai-sdk-errors/ai-empty-response-body-error)
|
|
90
|
+
- [`InvalidPromptError`](/docs/reference/ai-sdk-errors/ai-invalid-prompt-error)
|
|
91
|
+
- [`InvalidResponseDataError`](/docs/reference/ai-sdk-errors/ai-invalid-response-data-error)
|
|
92
|
+
- [`JSONParseError`](/docs/reference/ai-sdk-errors/ai-json-parse-error)
|
|
93
|
+
- [`LoadAPIKeyError`](/docs/reference/ai-sdk-errors/ai-load-api-key-error)
|
|
94
|
+
- [`LoadSettingError`](/docs/reference/ai-sdk-errors/ai-load-setting-error)
|
|
95
|
+
- [`NoContentGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-content-generated-error)
|
|
96
|
+
- [`NoSuchModelError`](/docs/reference/ai-sdk-errors/ai-no-such-model-error)
|
|
97
|
+
- [`RetryError`](/docs/reference/ai-sdk-errors/ai-retry-error)
|
|
98
|
+
- [`TooManyEmbeddingValuesForCallError`](/docs/reference/ai-sdk-errors/ai-too-many-embedding-values-for-call-error)
|
|
99
|
+
- [`TypeValidationError`](/docs/reference/ai-sdk-errors/ai-type-validation-error)
|
|
100
|
+
- [`UnsupportedFunctionalityError`](/docs/reference/ai-sdk-errors/ai-unsupported-functionality-error)
|
|
101
|
+
|
|
102
|
+
### Inputs and Message Streams
|
|
103
|
+
|
|
104
|
+
- [`InvalidArgumentError`](/docs/reference/ai-sdk-errors/ai-invalid-argument-error)
|
|
105
|
+
- [`InvalidDataContentError`](/docs/reference/ai-sdk-errors/ai-invalid-data-content-error)
|
|
106
|
+
- [`InvalidMessageRoleError`](/docs/reference/ai-sdk-errors/ai-invalid-message-role-error)
|
|
107
|
+
- `InvalidStreamPartError`
|
|
108
|
+
- [`MessageConversionError`](/docs/reference/ai-sdk-errors/ai-message-conversion-error)
|
|
109
|
+
- [`UIMessageStreamError`](/docs/reference/ai-sdk-errors/ai-ui-message-stream-error)
|
|
110
|
+
|
|
111
|
+
### Generated Output
|
|
112
|
+
|
|
113
|
+
- [`NoImageGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-image-generated-error)
|
|
114
|
+
- [`NoObjectGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-object-generated-error)
|
|
115
|
+
- [`NoOutputGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-output-generated-error)
|
|
116
|
+
- [`NoSpeechGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-speech-generated-error)
|
|
117
|
+
- [`NoTranscriptGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-transcript-generated-error)
|
|
118
|
+
- [`NoVideoGeneratedError`](/docs/reference/ai-sdk-errors/ai-no-video-generated-error)
|
|
119
|
+
|
|
120
|
+
### Providers and Model Compatibility
|
|
121
|
+
|
|
122
|
+
- [`NoSuchProviderError`](/docs/reference/ai-sdk-errors/ai-no-such-provider-error)
|
|
123
|
+
- [`UnsupportedModelVersionError`](/docs/troubleshooting/unsupported-model-version)
|
|
124
|
+
|
|
125
|
+
### Tools and Approvals
|
|
126
|
+
|
|
127
|
+
- [`InvalidToolApprovalError`](/docs/reference/ai-sdk-errors/ai-invalid-tool-approval-error)
|
|
128
|
+
- [`InvalidToolApprovalSignatureError`](/docs/reference/ai-sdk-errors/ai-invalid-tool-approval-signature-error)
|
|
129
|
+
- [`InvalidToolInputError`](/docs/reference/ai-sdk-errors/ai-invalid-tool-input-error)
|
|
130
|
+
- [`MissingToolResultsError`](/docs/troubleshooting/missing-tool-results-error)
|
|
131
|
+
- [`NoSuchToolError`](/docs/reference/ai-sdk-errors/ai-no-such-tool-error)
|
|
132
|
+
- [`ToolCallNotFoundForApprovalError`](/docs/reference/ai-sdk-errors/ai-tool-call-not-found-for-approval-error)
|
|
133
|
+
- [`ToolCallRepairError`](/docs/reference/ai-sdk-errors/ai-tool-call-repair-error)
|
|
134
|
+
- [`ToolChoiceViolationError`](/docs/reference/ai-sdk-errors/ai-tool-choice-violation-error)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.284",
|
|
4
4
|
"description": "AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@opentelemetry/api": "^1.9.0",
|
|
48
|
-
"@ai-sdk/gateway": "3.0.
|
|
48
|
+
"@ai-sdk/gateway": "3.0.195",
|
|
49
49
|
"@ai-sdk/provider": "3.0.16",
|
|
50
50
|
"@ai-sdk/provider-utils": "4.0.51"
|
|
51
51
|
},
|
package/src/embed/embed.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
withUserAgentSuffix,
|
|
3
3
|
type ProviderOptions,
|
|
4
4
|
} from '@ai-sdk/provider-utils';
|
|
5
|
+
import { InvalidResponseDataError } from '../error';
|
|
5
6
|
import { logWarnings } from '../logger/log-warnings';
|
|
6
7
|
import { resolveEmbeddingModel } from '../model/resolve-model';
|
|
7
8
|
import { assembleOperationName } from '../telemetry/assemble-operation-name';
|
|
@@ -159,6 +160,13 @@ export async function embed({
|
|
|
159
160
|
}),
|
|
160
161
|
);
|
|
161
162
|
|
|
163
|
+
if (embedding == null) {
|
|
164
|
+
throw new InvalidResponseDataError({
|
|
165
|
+
data: modelResponse.embeddings,
|
|
166
|
+
message: 'No embedding generated.',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
162
170
|
return {
|
|
163
171
|
embedding,
|
|
164
172
|
usage,
|
package/src/rerank/rerank.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
InvalidResponseDataError,
|
|
3
|
+
type JSONObject,
|
|
4
|
+
type RerankingModelV3,
|
|
5
|
+
type RerankingModelV3CallOptions,
|
|
6
|
+
} from '@ai-sdk/provider';
|
|
2
7
|
import type { ProviderOptions } from '@ai-sdk/provider-utils';
|
|
3
8
|
import { prepareRetries } from '../../src/util/prepare-retries';
|
|
4
9
|
import { assembleOperationName } from '../telemetry/assemble-operation-name';
|
|
@@ -192,6 +197,8 @@ export async function rerank<VALUE extends JSONObject | string>({
|
|
|
192
197
|
}),
|
|
193
198
|
);
|
|
194
199
|
|
|
200
|
+
validateRankingIndices({ ranking, documents });
|
|
201
|
+
|
|
195
202
|
logWarnings({
|
|
196
203
|
warnings: warnings ?? [],
|
|
197
204
|
provider: model.provider,
|
|
@@ -218,6 +225,23 @@ export async function rerank<VALUE extends JSONObject | string>({
|
|
|
218
225
|
});
|
|
219
226
|
}
|
|
220
227
|
|
|
228
|
+
function validateRankingIndices<VALUE>({
|
|
229
|
+
ranking,
|
|
230
|
+
documents,
|
|
231
|
+
}: {
|
|
232
|
+
ranking: Awaited<ReturnType<RerankingModelV3['doRerank']>>['ranking'];
|
|
233
|
+
documents: Array<VALUE>;
|
|
234
|
+
}) {
|
|
235
|
+
for (const { index } of ranking) {
|
|
236
|
+
if (!Number.isInteger(index) || index < 0 || index >= documents.length) {
|
|
237
|
+
throw new InvalidResponseDataError({
|
|
238
|
+
data: ranking,
|
|
239
|
+
message: `Invalid ranking index ${index}. Expected an integer between 0 and ${documents.length - 1}.`,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
221
245
|
class DefaultRerankResult<VALUE> implements RerankResult<VALUE> {
|
|
222
246
|
readonly originalDocuments: RerankResult<VALUE>['originalDocuments'];
|
|
223
247
|
readonly ranking: RerankResult<VALUE>['ranking'];
|