ai 5.0.4 → 5.0.6
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 +13 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +687 -683
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +713 -709
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
@@ -38,10 +38,23 @@ var NoOutputSpecifiedError = class extends AISDKError {
|
|
38
38
|
};
|
39
39
|
_a = symbol;
|
40
40
|
|
41
|
-
// src/
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
// src/model/resolve-model.ts
|
42
|
+
import { gateway } from "@ai-sdk/gateway";
|
43
|
+
|
44
|
+
// src/error/index.ts
|
45
|
+
import {
|
46
|
+
AISDKError as AISDKError16,
|
47
|
+
APICallError,
|
48
|
+
EmptyResponseBodyError,
|
49
|
+
InvalidPromptError,
|
50
|
+
InvalidResponseDataError,
|
51
|
+
JSONParseError,
|
52
|
+
LoadAPIKeyError,
|
53
|
+
NoContentGeneratedError,
|
54
|
+
NoSuchModelError,
|
55
|
+
TypeValidationError,
|
56
|
+
UnsupportedFunctionalityError
|
57
|
+
} from "@ai-sdk/provider";
|
45
58
|
|
46
59
|
// src/error/invalid-argument-error.ts
|
47
60
|
import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
|
@@ -69,27 +82,20 @@ var InvalidArgumentError = class extends AISDKError2 {
|
|
69
82
|
};
|
70
83
|
_a2 = symbol2;
|
71
84
|
|
72
|
-
// src/
|
73
|
-
import { APICallError } from "@ai-sdk/provider";
|
74
|
-
import { delay, getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
|
75
|
-
|
76
|
-
// src/util/retry-error.ts
|
85
|
+
// src/error/invalid-stream-part-error.ts
|
77
86
|
import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
|
78
|
-
var name3 = "
|
87
|
+
var name3 = "AI_InvalidStreamPartError";
|
79
88
|
var marker3 = `vercel.ai.error.${name3}`;
|
80
89
|
var symbol3 = Symbol.for(marker3);
|
81
90
|
var _a3;
|
82
|
-
var
|
91
|
+
var InvalidStreamPartError = class extends AISDKError3 {
|
83
92
|
constructor({
|
84
|
-
|
85
|
-
|
86
|
-
errors
|
93
|
+
chunk,
|
94
|
+
message
|
87
95
|
}) {
|
88
96
|
super({ name: name3, message });
|
89
97
|
this[_a3] = true;
|
90
|
-
this.
|
91
|
-
this.errors = errors;
|
92
|
-
this.lastError = errors[errors.length - 1];
|
98
|
+
this.chunk = chunk;
|
93
99
|
}
|
94
100
|
static isInstance(error) {
|
95
101
|
return AISDKError3.hasMarker(error, marker3);
|
@@ -97,168 +103,343 @@ var RetryError = class extends AISDKError3 {
|
|
97
103
|
};
|
98
104
|
_a3 = symbol3;
|
99
105
|
|
100
|
-
// src/
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
106
|
+
// src/error/invalid-tool-input-error.ts
|
107
|
+
import { AISDKError as AISDKError4, getErrorMessage } from "@ai-sdk/provider";
|
108
|
+
var name4 = "AI_InvalidToolInputError";
|
109
|
+
var marker4 = `vercel.ai.error.${name4}`;
|
110
|
+
var symbol4 = Symbol.for(marker4);
|
111
|
+
var _a4;
|
112
|
+
var InvalidToolInputError = class extends AISDKError4 {
|
113
|
+
constructor({
|
114
|
+
toolInput,
|
115
|
+
toolName,
|
116
|
+
cause,
|
117
|
+
message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`
|
118
|
+
}) {
|
119
|
+
super({ name: name4, message, cause });
|
120
|
+
this[_a4] = true;
|
121
|
+
this.toolInput = toolInput;
|
122
|
+
this.toolName = toolName;
|
115
123
|
}
|
116
|
-
|
117
|
-
|
118
|
-
const timeoutSeconds = parseFloat(retryAfter);
|
119
|
-
if (!Number.isNaN(timeoutSeconds)) {
|
120
|
-
ms = timeoutSeconds * 1e3;
|
121
|
-
} else {
|
122
|
-
ms = Date.parse(retryAfter) - Date.now();
|
123
|
-
}
|
124
|
+
static isInstance(error) {
|
125
|
+
return AISDKError4.hasMarker(error, marker4);
|
124
126
|
}
|
125
|
-
|
126
|
-
|
127
|
+
};
|
128
|
+
_a4 = symbol4;
|
129
|
+
|
130
|
+
// src/error/mcp-client-error.ts
|
131
|
+
import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
|
132
|
+
var name5 = "AI_MCPClientError";
|
133
|
+
var marker5 = `vercel.ai.error.${name5}`;
|
134
|
+
var symbol5 = Symbol.for(marker5);
|
135
|
+
var _a5;
|
136
|
+
var MCPClientError = class extends AISDKError5 {
|
137
|
+
constructor({
|
138
|
+
name: name16 = "MCPClientError",
|
139
|
+
message,
|
140
|
+
cause
|
141
|
+
}) {
|
142
|
+
super({ name: name16, message, cause });
|
143
|
+
this[_a5] = true;
|
127
144
|
}
|
128
|
-
|
129
|
-
|
130
|
-
var retryWithExponentialBackoffRespectingRetryHeaders = ({
|
131
|
-
maxRetries = 2,
|
132
|
-
initialDelayInMs = 2e3,
|
133
|
-
backoffFactor = 2,
|
134
|
-
abortSignal
|
135
|
-
} = {}) => async (f) => _retryWithExponentialBackoff(f, {
|
136
|
-
maxRetries,
|
137
|
-
delayInMs: initialDelayInMs,
|
138
|
-
backoffFactor,
|
139
|
-
abortSignal
|
140
|
-
});
|
141
|
-
async function _retryWithExponentialBackoff(f, {
|
142
|
-
maxRetries,
|
143
|
-
delayInMs,
|
144
|
-
backoffFactor,
|
145
|
-
abortSignal
|
146
|
-
}, errors = []) {
|
147
|
-
try {
|
148
|
-
return await f();
|
149
|
-
} catch (error) {
|
150
|
-
if (isAbortError(error)) {
|
151
|
-
throw error;
|
152
|
-
}
|
153
|
-
if (maxRetries === 0) {
|
154
|
-
throw error;
|
155
|
-
}
|
156
|
-
const errorMessage = getErrorMessage(error);
|
157
|
-
const newErrors = [...errors, error];
|
158
|
-
const tryNumber = newErrors.length;
|
159
|
-
if (tryNumber > maxRetries) {
|
160
|
-
throw new RetryError({
|
161
|
-
message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
|
162
|
-
reason: "maxRetriesExceeded",
|
163
|
-
errors: newErrors
|
164
|
-
});
|
165
|
-
}
|
166
|
-
if (error instanceof Error && APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
167
|
-
await delay(
|
168
|
-
getRetryDelayInMs({
|
169
|
-
error,
|
170
|
-
exponentialBackoffDelay: delayInMs
|
171
|
-
}),
|
172
|
-
{ abortSignal }
|
173
|
-
);
|
174
|
-
return _retryWithExponentialBackoff(
|
175
|
-
f,
|
176
|
-
{
|
177
|
-
maxRetries,
|
178
|
-
delayInMs: backoffFactor * delayInMs,
|
179
|
-
backoffFactor,
|
180
|
-
abortSignal
|
181
|
-
},
|
182
|
-
newErrors
|
183
|
-
);
|
184
|
-
}
|
185
|
-
if (tryNumber === 1) {
|
186
|
-
throw error;
|
187
|
-
}
|
188
|
-
throw new RetryError({
|
189
|
-
message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
|
190
|
-
reason: "errorNotRetryable",
|
191
|
-
errors: newErrors
|
192
|
-
});
|
145
|
+
static isInstance(error) {
|
146
|
+
return AISDKError5.hasMarker(error, marker5);
|
193
147
|
}
|
194
|
-
}
|
148
|
+
};
|
149
|
+
_a5 = symbol5;
|
195
150
|
|
196
|
-
// src/
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
}
|
209
|
-
|
210
|
-
|
211
|
-
parameter: "maxRetries",
|
212
|
-
value: maxRetries,
|
213
|
-
message: "maxRetries must be >= 0"
|
214
|
-
});
|
215
|
-
}
|
151
|
+
// src/error/no-image-generated-error.ts
|
152
|
+
import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
|
153
|
+
var name6 = "AI_NoImageGeneratedError";
|
154
|
+
var marker6 = `vercel.ai.error.${name6}`;
|
155
|
+
var symbol6 = Symbol.for(marker6);
|
156
|
+
var _a6;
|
157
|
+
var NoImageGeneratedError = class extends AISDKError6 {
|
158
|
+
constructor({
|
159
|
+
message = "No image generated.",
|
160
|
+
cause,
|
161
|
+
responses
|
162
|
+
}) {
|
163
|
+
super({ name: name6, message, cause });
|
164
|
+
this[_a6] = true;
|
165
|
+
this.responses = responses;
|
216
166
|
}
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
abortSignal
|
223
|
-
})
|
224
|
-
};
|
225
|
-
}
|
167
|
+
static isInstance(error) {
|
168
|
+
return AISDKError6.hasMarker(error, marker6);
|
169
|
+
}
|
170
|
+
};
|
171
|
+
_a6 = symbol6;
|
226
172
|
|
227
|
-
// src/
|
228
|
-
import {
|
229
|
-
|
230
|
-
|
173
|
+
// src/error/no-object-generated-error.ts
|
174
|
+
import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
|
175
|
+
var name7 = "AI_NoObjectGeneratedError";
|
176
|
+
var marker7 = `vercel.ai.error.${name7}`;
|
177
|
+
var symbol7 = Symbol.for(marker7);
|
178
|
+
var _a7;
|
179
|
+
var NoObjectGeneratedError = class extends AISDKError7 {
|
180
|
+
constructor({
|
181
|
+
message = "No object generated.",
|
182
|
+
cause,
|
183
|
+
text: text2,
|
184
|
+
response,
|
185
|
+
usage,
|
186
|
+
finishReason
|
187
|
+
}) {
|
188
|
+
super({ name: name7, message, cause });
|
189
|
+
this[_a7] = true;
|
190
|
+
this.text = text2;
|
191
|
+
this.response = response;
|
192
|
+
this.usage = usage;
|
193
|
+
this.finishReason = finishReason;
|
194
|
+
}
|
195
|
+
static isInstance(error) {
|
196
|
+
return AISDKError7.hasMarker(error, marker7);
|
197
|
+
}
|
198
|
+
};
|
199
|
+
_a7 = symbol7;
|
231
200
|
|
232
|
-
// src/
|
233
|
-
import {
|
234
|
-
var
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
201
|
+
// src/error/no-such-tool-error.ts
|
202
|
+
import { AISDKError as AISDKError8 } from "@ai-sdk/provider";
|
203
|
+
var name8 = "AI_NoSuchToolError";
|
204
|
+
var marker8 = `vercel.ai.error.${name8}`;
|
205
|
+
var symbol8 = Symbol.for(marker8);
|
206
|
+
var _a8;
|
207
|
+
var NoSuchToolError = class extends AISDKError8 {
|
208
|
+
constructor({
|
209
|
+
toolName,
|
210
|
+
availableTools = void 0,
|
211
|
+
message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
|
212
|
+
}) {
|
213
|
+
super({ name: name8, message });
|
214
|
+
this[_a8] = true;
|
215
|
+
this.toolName = toolName;
|
216
|
+
this.availableTools = availableTools;
|
217
|
+
}
|
218
|
+
static isInstance(error) {
|
219
|
+
return AISDKError8.hasMarker(error, marker8);
|
220
|
+
}
|
221
|
+
};
|
222
|
+
_a8 = symbol8;
|
223
|
+
|
224
|
+
// src/error/tool-call-repair-error.ts
|
225
|
+
import { AISDKError as AISDKError9, getErrorMessage as getErrorMessage2 } from "@ai-sdk/provider";
|
226
|
+
var name9 = "AI_ToolCallRepairError";
|
227
|
+
var marker9 = `vercel.ai.error.${name9}`;
|
228
|
+
var symbol9 = Symbol.for(marker9);
|
229
|
+
var _a9;
|
230
|
+
var ToolCallRepairError = class extends AISDKError9 {
|
231
|
+
constructor({
|
232
|
+
cause,
|
233
|
+
originalError,
|
234
|
+
message = `Error repairing tool call: ${getErrorMessage2(cause)}`
|
235
|
+
}) {
|
236
|
+
super({ name: name9, message, cause });
|
237
|
+
this[_a9] = true;
|
238
|
+
this.originalError = originalError;
|
239
|
+
}
|
240
|
+
static isInstance(error) {
|
241
|
+
return AISDKError9.hasMarker(error, marker9);
|
242
|
+
}
|
243
|
+
};
|
244
|
+
_a9 = symbol9;
|
245
|
+
|
246
|
+
// src/error/unsupported-model-version-error.ts
|
247
|
+
import { AISDKError as AISDKError10 } from "@ai-sdk/provider";
|
248
|
+
var UnsupportedModelVersionError = class extends AISDKError10 {
|
249
|
+
constructor(options) {
|
250
|
+
super({
|
251
|
+
name: "AI_UnsupportedModelVersionError",
|
252
|
+
message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".`
|
253
|
+
});
|
254
|
+
this.version = options.version;
|
255
|
+
this.provider = options.provider;
|
256
|
+
this.modelId = options.modelId;
|
257
|
+
}
|
258
|
+
};
|
259
|
+
|
260
|
+
// src/prompt/invalid-data-content-error.ts
|
261
|
+
import { AISDKError as AISDKError11 } from "@ai-sdk/provider";
|
262
|
+
var name10 = "AI_InvalidDataContentError";
|
263
|
+
var marker10 = `vercel.ai.error.${name10}`;
|
264
|
+
var symbol10 = Symbol.for(marker10);
|
265
|
+
var _a10;
|
266
|
+
var InvalidDataContentError = class extends AISDKError11 {
|
267
|
+
constructor({
|
268
|
+
content,
|
269
|
+
cause,
|
270
|
+
message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
|
271
|
+
}) {
|
272
|
+
super({ name: name10, message, cause });
|
273
|
+
this[_a10] = true;
|
274
|
+
this.content = content;
|
275
|
+
}
|
276
|
+
static isInstance(error) {
|
277
|
+
return AISDKError11.hasMarker(error, marker10);
|
278
|
+
}
|
279
|
+
};
|
280
|
+
_a10 = symbol10;
|
281
|
+
|
282
|
+
// src/prompt/invalid-message-role-error.ts
|
283
|
+
import { AISDKError as AISDKError12 } from "@ai-sdk/provider";
|
284
|
+
var name11 = "AI_InvalidMessageRoleError";
|
285
|
+
var marker11 = `vercel.ai.error.${name11}`;
|
286
|
+
var symbol11 = Symbol.for(marker11);
|
287
|
+
var _a11;
|
288
|
+
var InvalidMessageRoleError = class extends AISDKError12 {
|
289
|
+
constructor({
|
290
|
+
role,
|
291
|
+
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
292
|
+
}) {
|
293
|
+
super({ name: name11, message });
|
294
|
+
this[_a11] = true;
|
295
|
+
this.role = role;
|
296
|
+
}
|
297
|
+
static isInstance(error) {
|
298
|
+
return AISDKError12.hasMarker(error, marker11);
|
299
|
+
}
|
300
|
+
};
|
301
|
+
_a11 = symbol11;
|
302
|
+
|
303
|
+
// src/prompt/message-conversion-error.ts
|
304
|
+
import { AISDKError as AISDKError13 } from "@ai-sdk/provider";
|
305
|
+
var name12 = "AI_MessageConversionError";
|
306
|
+
var marker12 = `vercel.ai.error.${name12}`;
|
307
|
+
var symbol12 = Symbol.for(marker12);
|
308
|
+
var _a12;
|
309
|
+
var MessageConversionError = class extends AISDKError13 {
|
310
|
+
constructor({
|
311
|
+
originalMessage,
|
312
|
+
message
|
313
|
+
}) {
|
314
|
+
super({ name: name12, message });
|
315
|
+
this[_a12] = true;
|
316
|
+
this.originalMessage = originalMessage;
|
317
|
+
}
|
318
|
+
static isInstance(error) {
|
319
|
+
return AISDKError13.hasMarker(error, marker12);
|
320
|
+
}
|
321
|
+
};
|
322
|
+
_a12 = symbol12;
|
323
|
+
|
324
|
+
// src/util/download-error.ts
|
325
|
+
import { AISDKError as AISDKError14 } from "@ai-sdk/provider";
|
326
|
+
var name13 = "AI_DownloadError";
|
327
|
+
var marker13 = `vercel.ai.error.${name13}`;
|
328
|
+
var symbol13 = Symbol.for(marker13);
|
329
|
+
var _a13;
|
330
|
+
var DownloadError = class extends AISDKError14 {
|
331
|
+
constructor({
|
332
|
+
url,
|
333
|
+
statusCode,
|
334
|
+
statusText,
|
335
|
+
cause,
|
336
|
+
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
337
|
+
}) {
|
338
|
+
super({ name: name13, message, cause });
|
339
|
+
this[_a13] = true;
|
340
|
+
this.url = url;
|
341
|
+
this.statusCode = statusCode;
|
342
|
+
this.statusText = statusText;
|
343
|
+
}
|
344
|
+
static isInstance(error) {
|
345
|
+
return AISDKError14.hasMarker(error, marker13);
|
346
|
+
}
|
347
|
+
};
|
348
|
+
_a13 = symbol13;
|
349
|
+
|
350
|
+
// src/util/retry-error.ts
|
351
|
+
import { AISDKError as AISDKError15 } from "@ai-sdk/provider";
|
352
|
+
var name14 = "AI_RetryError";
|
353
|
+
var marker14 = `vercel.ai.error.${name14}`;
|
354
|
+
var symbol14 = Symbol.for(marker14);
|
355
|
+
var _a14;
|
356
|
+
var RetryError = class extends AISDKError15 {
|
357
|
+
constructor({
|
358
|
+
message,
|
359
|
+
reason,
|
360
|
+
errors
|
361
|
+
}) {
|
362
|
+
super({ name: name14, message });
|
363
|
+
this[_a14] = true;
|
364
|
+
this.reason = reason;
|
365
|
+
this.errors = errors;
|
366
|
+
this.lastError = errors[errors.length - 1];
|
367
|
+
}
|
368
|
+
static isInstance(error) {
|
369
|
+
return AISDKError15.hasMarker(error, marker14);
|
370
|
+
}
|
371
|
+
};
|
372
|
+
_a14 = symbol14;
|
373
|
+
|
374
|
+
// src/model/resolve-model.ts
|
375
|
+
function resolveLanguageModel(model) {
|
376
|
+
if (typeof model !== "string") {
|
377
|
+
if (model.specificationVersion !== "v2") {
|
378
|
+
throw new UnsupportedModelVersionError({
|
379
|
+
version: model.specificationVersion,
|
380
|
+
provider: model.provider,
|
381
|
+
modelId: model.modelId
|
382
|
+
});
|
383
|
+
}
|
384
|
+
return model;
|
385
|
+
}
|
386
|
+
return getGlobalProvider().languageModel(model);
|
387
|
+
}
|
388
|
+
function resolveEmbeddingModel(model) {
|
389
|
+
if (typeof model !== "string") {
|
390
|
+
if (model.specificationVersion !== "v2") {
|
391
|
+
throw new UnsupportedModelVersionError({
|
392
|
+
version: model.specificationVersion,
|
393
|
+
provider: model.provider,
|
394
|
+
modelId: model.modelId
|
395
|
+
});
|
396
|
+
}
|
397
|
+
return model;
|
398
|
+
}
|
399
|
+
return getGlobalProvider().textEmbeddingModel(
|
400
|
+
model
|
401
|
+
);
|
402
|
+
}
|
403
|
+
function getGlobalProvider() {
|
404
|
+
var _a16;
|
405
|
+
return (_a16 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a16 : gateway;
|
406
|
+
}
|
407
|
+
|
408
|
+
// src/prompt/convert-to-language-model-prompt.ts
|
409
|
+
import {
|
410
|
+
isUrlSupported
|
411
|
+
} from "@ai-sdk/provider-utils";
|
412
|
+
|
413
|
+
// src/util/detect-media-type.ts
|
414
|
+
import { convertBase64ToUint8Array } from "@ai-sdk/provider-utils";
|
415
|
+
var imageMediaTypeSignatures = [
|
416
|
+
{
|
417
|
+
mediaType: "image/gif",
|
418
|
+
bytesPrefix: [71, 73, 70],
|
419
|
+
base64Prefix: "R0lG"
|
420
|
+
},
|
421
|
+
{
|
422
|
+
mediaType: "image/png",
|
423
|
+
bytesPrefix: [137, 80, 78, 71],
|
424
|
+
base64Prefix: "iVBORw"
|
425
|
+
},
|
426
|
+
{
|
427
|
+
mediaType: "image/jpeg",
|
428
|
+
bytesPrefix: [255, 216],
|
429
|
+
base64Prefix: "/9j/"
|
430
|
+
},
|
431
|
+
{
|
432
|
+
mediaType: "image/webp",
|
433
|
+
bytesPrefix: [82, 73, 70, 70],
|
434
|
+
base64Prefix: "UklGRg"
|
435
|
+
},
|
436
|
+
{
|
437
|
+
mediaType: "image/bmp",
|
438
|
+
bytesPrefix: [66, 77],
|
439
|
+
base64Prefix: "Qk"
|
440
|
+
},
|
441
|
+
{
|
442
|
+
mediaType: "image/tiff",
|
262
443
|
bytesPrefix: [73, 73, 42, 0],
|
263
444
|
base64Prefix: "SUkqAA"
|
264
445
|
},
|
@@ -367,32 +548,6 @@ function detectMediaType({
|
|
367
548
|
return void 0;
|
368
549
|
}
|
369
550
|
|
370
|
-
// src/util/download-error.ts
|
371
|
-
import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
|
372
|
-
var name4 = "AI_DownloadError";
|
373
|
-
var marker4 = `vercel.ai.error.${name4}`;
|
374
|
-
var symbol4 = Symbol.for(marker4);
|
375
|
-
var _a4;
|
376
|
-
var DownloadError = class extends AISDKError4 {
|
377
|
-
constructor({
|
378
|
-
url,
|
379
|
-
statusCode,
|
380
|
-
statusText,
|
381
|
-
cause,
|
382
|
-
message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
|
383
|
-
}) {
|
384
|
-
super({ name: name4, message, cause });
|
385
|
-
this[_a4] = true;
|
386
|
-
this.url = url;
|
387
|
-
this.statusCode = statusCode;
|
388
|
-
this.statusText = statusText;
|
389
|
-
}
|
390
|
-
static isInstance(error) {
|
391
|
-
return AISDKError4.hasMarker(error, marker4);
|
392
|
-
}
|
393
|
-
};
|
394
|
-
_a4 = symbol4;
|
395
|
-
|
396
551
|
// src/util/download.ts
|
397
552
|
async function download({ url }) {
|
398
553
|
var _a16;
|
@@ -419,35 +574,13 @@ async function download({ url }) {
|
|
419
574
|
}
|
420
575
|
|
421
576
|
// src/prompt/data-content.ts
|
422
|
-
import { AISDKError as
|
577
|
+
import { AISDKError as AISDKError17 } from "@ai-sdk/provider";
|
423
578
|
import {
|
424
579
|
convertBase64ToUint8Array as convertBase64ToUint8Array2,
|
425
580
|
convertUint8ArrayToBase64
|
426
581
|
} from "@ai-sdk/provider-utils";
|
427
582
|
import { z } from "zod/v4";
|
428
583
|
|
429
|
-
// src/prompt/invalid-data-content-error.ts
|
430
|
-
import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
|
431
|
-
var name5 = "AI_InvalidDataContentError";
|
432
|
-
var marker5 = `vercel.ai.error.${name5}`;
|
433
|
-
var symbol5 = Symbol.for(marker5);
|
434
|
-
var _a5;
|
435
|
-
var InvalidDataContentError = class extends AISDKError5 {
|
436
|
-
constructor({
|
437
|
-
content,
|
438
|
-
cause,
|
439
|
-
message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
|
440
|
-
}) {
|
441
|
-
super({ name: name5, message, cause });
|
442
|
-
this[_a5] = true;
|
443
|
-
this.content = content;
|
444
|
-
}
|
445
|
-
static isInstance(error) {
|
446
|
-
return AISDKError5.hasMarker(error, marker5);
|
447
|
-
}
|
448
|
-
};
|
449
|
-
_a5 = symbol5;
|
450
|
-
|
451
584
|
// src/prompt/split-data-url.ts
|
452
585
|
function splitDataUrl(dataUrl) {
|
453
586
|
try {
|
@@ -496,7 +629,7 @@ function convertToLanguageModelV2DataContent(content) {
|
|
496
629
|
content.toString()
|
497
630
|
);
|
498
631
|
if (dataUrlMediaType == null || base64Content == null) {
|
499
|
-
throw new
|
632
|
+
throw new AISDKError17({
|
500
633
|
name: "InvalidDataContentError",
|
501
634
|
message: `Invalid data URL format in content ${content.toString()}`
|
502
635
|
});
|
@@ -535,27 +668,6 @@ function convertDataContentToUint8Array(content) {
|
|
535
668
|
throw new InvalidDataContentError({ content });
|
536
669
|
}
|
537
670
|
|
538
|
-
// src/prompt/invalid-message-role-error.ts
|
539
|
-
import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
|
540
|
-
var name6 = "AI_InvalidMessageRoleError";
|
541
|
-
var marker6 = `vercel.ai.error.${name6}`;
|
542
|
-
var symbol6 = Symbol.for(marker6);
|
543
|
-
var _a6;
|
544
|
-
var InvalidMessageRoleError = class extends AISDKError7 {
|
545
|
-
constructor({
|
546
|
-
role,
|
547
|
-
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
|
548
|
-
}) {
|
549
|
-
super({ name: name6, message });
|
550
|
-
this[_a6] = true;
|
551
|
-
this.role = role;
|
552
|
-
}
|
553
|
-
static isInstance(error) {
|
554
|
-
return AISDKError7.hasMarker(error, marker6);
|
555
|
-
}
|
556
|
-
};
|
557
|
-
_a6 = symbol6;
|
558
|
-
|
559
671
|
// src/prompt/convert-to-language-model-prompt.ts
|
560
672
|
async function convertToLanguageModelPrompt({
|
561
673
|
prompt,
|
@@ -837,323 +949,93 @@ function prepareCallSettings({
|
|
837
949
|
if (typeof presencePenalty !== "number") {
|
838
950
|
throw new InvalidArgumentError({
|
839
951
|
parameter: "presencePenalty",
|
840
|
-
value: presencePenalty,
|
841
|
-
message: "presencePenalty must be a number"
|
842
|
-
});
|
843
|
-
}
|
844
|
-
}
|
845
|
-
if (frequencyPenalty != null) {
|
846
|
-
if (typeof frequencyPenalty !== "number") {
|
847
|
-
throw new InvalidArgumentError({
|
848
|
-
parameter: "frequencyPenalty",
|
849
|
-
value: frequencyPenalty,
|
850
|
-
message: "frequencyPenalty must be a number"
|
851
|
-
});
|
852
|
-
}
|
853
|
-
}
|
854
|
-
if (seed != null) {
|
855
|
-
if (!Number.isInteger(seed)) {
|
856
|
-
throw new InvalidArgumentError({
|
857
|
-
parameter: "seed",
|
858
|
-
value: seed,
|
859
|
-
message: "seed must be an integer"
|
860
|
-
});
|
861
|
-
}
|
862
|
-
}
|
863
|
-
return {
|
864
|
-
maxOutputTokens,
|
865
|
-
temperature,
|
866
|
-
topP,
|
867
|
-
topK,
|
868
|
-
presencePenalty,
|
869
|
-
frequencyPenalty,
|
870
|
-
stopSequences,
|
871
|
-
seed
|
872
|
-
};
|
873
|
-
}
|
874
|
-
|
875
|
-
// src/prompt/prepare-tools-and-tool-choice.ts
|
876
|
-
import { asSchema } from "@ai-sdk/provider-utils";
|
877
|
-
|
878
|
-
// src/util/is-non-empty-object.ts
|
879
|
-
function isNonEmptyObject(object2) {
|
880
|
-
return object2 != null && Object.keys(object2).length > 0;
|
881
|
-
}
|
882
|
-
|
883
|
-
// src/prompt/prepare-tools-and-tool-choice.ts
|
884
|
-
function prepareToolsAndToolChoice({
|
885
|
-
tools,
|
886
|
-
toolChoice,
|
887
|
-
activeTools
|
888
|
-
}) {
|
889
|
-
if (!isNonEmptyObject(tools)) {
|
890
|
-
return {
|
891
|
-
tools: void 0,
|
892
|
-
toolChoice: void 0
|
893
|
-
};
|
894
|
-
}
|
895
|
-
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
896
|
-
([name16]) => activeTools.includes(name16)
|
897
|
-
) : Object.entries(tools);
|
898
|
-
return {
|
899
|
-
tools: filteredTools.map(([name16, tool3]) => {
|
900
|
-
const toolType = tool3.type;
|
901
|
-
switch (toolType) {
|
902
|
-
case void 0:
|
903
|
-
case "dynamic":
|
904
|
-
case "function":
|
905
|
-
return {
|
906
|
-
type: "function",
|
907
|
-
name: name16,
|
908
|
-
description: tool3.description,
|
909
|
-
inputSchema: asSchema(tool3.inputSchema).jsonSchema,
|
910
|
-
providerOptions: tool3.providerOptions
|
911
|
-
};
|
912
|
-
case "provider-defined":
|
913
|
-
return {
|
914
|
-
type: "provider-defined",
|
915
|
-
name: name16,
|
916
|
-
id: tool3.id,
|
917
|
-
args: tool3.args
|
918
|
-
};
|
919
|
-
default: {
|
920
|
-
const exhaustiveCheck = toolType;
|
921
|
-
throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
|
922
|
-
}
|
923
|
-
}
|
924
|
-
}),
|
925
|
-
toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
|
926
|
-
};
|
927
|
-
}
|
928
|
-
|
929
|
-
// src/prompt/resolve-language-model.ts
|
930
|
-
import { gateway } from "@ai-sdk/gateway";
|
931
|
-
|
932
|
-
// src/error/index.ts
|
933
|
-
import {
|
934
|
-
AISDKError as AISDKError17,
|
935
|
-
APICallError as APICallError2,
|
936
|
-
EmptyResponseBodyError,
|
937
|
-
InvalidPromptError,
|
938
|
-
InvalidResponseDataError,
|
939
|
-
JSONParseError,
|
940
|
-
LoadAPIKeyError,
|
941
|
-
NoContentGeneratedError,
|
942
|
-
NoSuchModelError,
|
943
|
-
TypeValidationError,
|
944
|
-
UnsupportedFunctionalityError
|
945
|
-
} from "@ai-sdk/provider";
|
946
|
-
|
947
|
-
// src/error/invalid-stream-part-error.ts
|
948
|
-
import { AISDKError as AISDKError8 } from "@ai-sdk/provider";
|
949
|
-
var name7 = "AI_InvalidStreamPartError";
|
950
|
-
var marker7 = `vercel.ai.error.${name7}`;
|
951
|
-
var symbol7 = Symbol.for(marker7);
|
952
|
-
var _a7;
|
953
|
-
var InvalidStreamPartError = class extends AISDKError8 {
|
954
|
-
constructor({
|
955
|
-
chunk,
|
956
|
-
message
|
957
|
-
}) {
|
958
|
-
super({ name: name7, message });
|
959
|
-
this[_a7] = true;
|
960
|
-
this.chunk = chunk;
|
961
|
-
}
|
962
|
-
static isInstance(error) {
|
963
|
-
return AISDKError8.hasMarker(error, marker7);
|
964
|
-
}
|
965
|
-
};
|
966
|
-
_a7 = symbol7;
|
967
|
-
|
968
|
-
// src/error/invalid-tool-input-error.ts
|
969
|
-
import { AISDKError as AISDKError9, getErrorMessage as getErrorMessage2 } from "@ai-sdk/provider";
|
970
|
-
var name8 = "AI_InvalidToolInputError";
|
971
|
-
var marker8 = `vercel.ai.error.${name8}`;
|
972
|
-
var symbol8 = Symbol.for(marker8);
|
973
|
-
var _a8;
|
974
|
-
var InvalidToolInputError = class extends AISDKError9 {
|
975
|
-
constructor({
|
976
|
-
toolInput,
|
977
|
-
toolName,
|
978
|
-
cause,
|
979
|
-
message = `Invalid input for tool ${toolName}: ${getErrorMessage2(cause)}`
|
980
|
-
}) {
|
981
|
-
super({ name: name8, message, cause });
|
982
|
-
this[_a8] = true;
|
983
|
-
this.toolInput = toolInput;
|
984
|
-
this.toolName = toolName;
|
985
|
-
}
|
986
|
-
static isInstance(error) {
|
987
|
-
return AISDKError9.hasMarker(error, marker8);
|
988
|
-
}
|
989
|
-
};
|
990
|
-
_a8 = symbol8;
|
991
|
-
|
992
|
-
// src/error/mcp-client-error.ts
|
993
|
-
import { AISDKError as AISDKError10 } from "@ai-sdk/provider";
|
994
|
-
var name9 = "AI_MCPClientError";
|
995
|
-
var marker9 = `vercel.ai.error.${name9}`;
|
996
|
-
var symbol9 = Symbol.for(marker9);
|
997
|
-
var _a9;
|
998
|
-
var MCPClientError = class extends AISDKError10 {
|
999
|
-
constructor({
|
1000
|
-
name: name16 = "MCPClientError",
|
1001
|
-
message,
|
1002
|
-
cause
|
1003
|
-
}) {
|
1004
|
-
super({ name: name16, message, cause });
|
1005
|
-
this[_a9] = true;
|
1006
|
-
}
|
1007
|
-
static isInstance(error) {
|
1008
|
-
return AISDKError10.hasMarker(error, marker9);
|
1009
|
-
}
|
1010
|
-
};
|
1011
|
-
_a9 = symbol9;
|
1012
|
-
|
1013
|
-
// src/error/no-image-generated-error.ts
|
1014
|
-
import { AISDKError as AISDKError11 } from "@ai-sdk/provider";
|
1015
|
-
var name10 = "AI_NoImageGeneratedError";
|
1016
|
-
var marker10 = `vercel.ai.error.${name10}`;
|
1017
|
-
var symbol10 = Symbol.for(marker10);
|
1018
|
-
var _a10;
|
1019
|
-
var NoImageGeneratedError = class extends AISDKError11 {
|
1020
|
-
constructor({
|
1021
|
-
message = "No image generated.",
|
1022
|
-
cause,
|
1023
|
-
responses
|
1024
|
-
}) {
|
1025
|
-
super({ name: name10, message, cause });
|
1026
|
-
this[_a10] = true;
|
1027
|
-
this.responses = responses;
|
1028
|
-
}
|
1029
|
-
static isInstance(error) {
|
1030
|
-
return AISDKError11.hasMarker(error, marker10);
|
1031
|
-
}
|
1032
|
-
};
|
1033
|
-
_a10 = symbol10;
|
1034
|
-
|
1035
|
-
// src/error/no-object-generated-error.ts
|
1036
|
-
import { AISDKError as AISDKError12 } from "@ai-sdk/provider";
|
1037
|
-
var name11 = "AI_NoObjectGeneratedError";
|
1038
|
-
var marker11 = `vercel.ai.error.${name11}`;
|
1039
|
-
var symbol11 = Symbol.for(marker11);
|
1040
|
-
var _a11;
|
1041
|
-
var NoObjectGeneratedError = class extends AISDKError12 {
|
1042
|
-
constructor({
|
1043
|
-
message = "No object generated.",
|
1044
|
-
cause,
|
1045
|
-
text: text2,
|
1046
|
-
response,
|
1047
|
-
usage,
|
1048
|
-
finishReason
|
1049
|
-
}) {
|
1050
|
-
super({ name: name11, message, cause });
|
1051
|
-
this[_a11] = true;
|
1052
|
-
this.text = text2;
|
1053
|
-
this.response = response;
|
1054
|
-
this.usage = usage;
|
1055
|
-
this.finishReason = finishReason;
|
1056
|
-
}
|
1057
|
-
static isInstance(error) {
|
1058
|
-
return AISDKError12.hasMarker(error, marker11);
|
1059
|
-
}
|
1060
|
-
};
|
1061
|
-
_a11 = symbol11;
|
1062
|
-
|
1063
|
-
// src/error/no-such-tool-error.ts
|
1064
|
-
import { AISDKError as AISDKError13 } from "@ai-sdk/provider";
|
1065
|
-
var name12 = "AI_NoSuchToolError";
|
1066
|
-
var marker12 = `vercel.ai.error.${name12}`;
|
1067
|
-
var symbol12 = Symbol.for(marker12);
|
1068
|
-
var _a12;
|
1069
|
-
var NoSuchToolError = class extends AISDKError13 {
|
1070
|
-
constructor({
|
1071
|
-
toolName,
|
1072
|
-
availableTools = void 0,
|
1073
|
-
message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
|
1074
|
-
}) {
|
1075
|
-
super({ name: name12, message });
|
1076
|
-
this[_a12] = true;
|
1077
|
-
this.toolName = toolName;
|
1078
|
-
this.availableTools = availableTools;
|
1079
|
-
}
|
1080
|
-
static isInstance(error) {
|
1081
|
-
return AISDKError13.hasMarker(error, marker12);
|
1082
|
-
}
|
1083
|
-
};
|
1084
|
-
_a12 = symbol12;
|
1085
|
-
|
1086
|
-
// src/error/tool-call-repair-error.ts
|
1087
|
-
import { AISDKError as AISDKError14, getErrorMessage as getErrorMessage3 } from "@ai-sdk/provider";
|
1088
|
-
var name13 = "AI_ToolCallRepairError";
|
1089
|
-
var marker13 = `vercel.ai.error.${name13}`;
|
1090
|
-
var symbol13 = Symbol.for(marker13);
|
1091
|
-
var _a13;
|
1092
|
-
var ToolCallRepairError = class extends AISDKError14 {
|
1093
|
-
constructor({
|
1094
|
-
cause,
|
1095
|
-
originalError,
|
1096
|
-
message = `Error repairing tool call: ${getErrorMessage3(cause)}`
|
1097
|
-
}) {
|
1098
|
-
super({ name: name13, message, cause });
|
1099
|
-
this[_a13] = true;
|
1100
|
-
this.originalError = originalError;
|
1101
|
-
}
|
1102
|
-
static isInstance(error) {
|
1103
|
-
return AISDKError14.hasMarker(error, marker13);
|
1104
|
-
}
|
1105
|
-
};
|
1106
|
-
_a13 = symbol13;
|
1107
|
-
|
1108
|
-
// src/error/unsupported-model-version-error.ts
|
1109
|
-
import { AISDKError as AISDKError15 } from "@ai-sdk/provider";
|
1110
|
-
var UnsupportedModelVersionError = class extends AISDKError15 {
|
1111
|
-
constructor(options) {
|
1112
|
-
super({
|
1113
|
-
name: "AI_UnsupportedModelVersionError",
|
1114
|
-
message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".`
|
1115
|
-
});
|
1116
|
-
this.version = options.version;
|
1117
|
-
this.provider = options.provider;
|
1118
|
-
this.modelId = options.modelId;
|
1119
|
-
}
|
1120
|
-
};
|
1121
|
-
|
1122
|
-
// src/prompt/message-conversion-error.ts
|
1123
|
-
import { AISDKError as AISDKError16 } from "@ai-sdk/provider";
|
1124
|
-
var name14 = "AI_MessageConversionError";
|
1125
|
-
var marker14 = `vercel.ai.error.${name14}`;
|
1126
|
-
var symbol14 = Symbol.for(marker14);
|
1127
|
-
var _a14;
|
1128
|
-
var MessageConversionError = class extends AISDKError16 {
|
1129
|
-
constructor({
|
1130
|
-
originalMessage,
|
1131
|
-
message
|
1132
|
-
}) {
|
1133
|
-
super({ name: name14, message });
|
1134
|
-
this[_a14] = true;
|
1135
|
-
this.originalMessage = originalMessage;
|
952
|
+
value: presencePenalty,
|
953
|
+
message: "presencePenalty must be a number"
|
954
|
+
});
|
955
|
+
}
|
1136
956
|
}
|
1137
|
-
|
1138
|
-
|
957
|
+
if (frequencyPenalty != null) {
|
958
|
+
if (typeof frequencyPenalty !== "number") {
|
959
|
+
throw new InvalidArgumentError({
|
960
|
+
parameter: "frequencyPenalty",
|
961
|
+
value: frequencyPenalty,
|
962
|
+
message: "frequencyPenalty must be a number"
|
963
|
+
});
|
964
|
+
}
|
1139
965
|
}
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
if (model.specificationVersion !== "v2") {
|
1147
|
-
throw new UnsupportedModelVersionError({
|
1148
|
-
version: model.specificationVersion,
|
1149
|
-
provider: model.provider,
|
1150
|
-
modelId: model.modelId
|
966
|
+
if (seed != null) {
|
967
|
+
if (!Number.isInteger(seed)) {
|
968
|
+
throw new InvalidArgumentError({
|
969
|
+
parameter: "seed",
|
970
|
+
value: seed,
|
971
|
+
message: "seed must be an integer"
|
1151
972
|
});
|
1152
973
|
}
|
1153
|
-
return model;
|
1154
974
|
}
|
1155
|
-
|
1156
|
-
|
975
|
+
return {
|
976
|
+
maxOutputTokens,
|
977
|
+
temperature,
|
978
|
+
topP,
|
979
|
+
topK,
|
980
|
+
presencePenalty,
|
981
|
+
frequencyPenalty,
|
982
|
+
stopSequences,
|
983
|
+
seed
|
984
|
+
};
|
985
|
+
}
|
986
|
+
|
987
|
+
// src/prompt/prepare-tools-and-tool-choice.ts
|
988
|
+
import { asSchema } from "@ai-sdk/provider-utils";
|
989
|
+
|
990
|
+
// src/util/is-non-empty-object.ts
|
991
|
+
function isNonEmptyObject(object2) {
|
992
|
+
return object2 != null && Object.keys(object2).length > 0;
|
993
|
+
}
|
994
|
+
|
995
|
+
// src/prompt/prepare-tools-and-tool-choice.ts
|
996
|
+
function prepareToolsAndToolChoice({
|
997
|
+
tools,
|
998
|
+
toolChoice,
|
999
|
+
activeTools
|
1000
|
+
}) {
|
1001
|
+
if (!isNonEmptyObject(tools)) {
|
1002
|
+
return {
|
1003
|
+
tools: void 0,
|
1004
|
+
toolChoice: void 0
|
1005
|
+
};
|
1006
|
+
}
|
1007
|
+
const filteredTools = activeTools != null ? Object.entries(tools).filter(
|
1008
|
+
([name16]) => activeTools.includes(name16)
|
1009
|
+
) : Object.entries(tools);
|
1010
|
+
return {
|
1011
|
+
tools: filteredTools.map(([name16, tool3]) => {
|
1012
|
+
const toolType = tool3.type;
|
1013
|
+
switch (toolType) {
|
1014
|
+
case void 0:
|
1015
|
+
case "dynamic":
|
1016
|
+
case "function":
|
1017
|
+
return {
|
1018
|
+
type: "function",
|
1019
|
+
name: name16,
|
1020
|
+
description: tool3.description,
|
1021
|
+
inputSchema: asSchema(tool3.inputSchema).jsonSchema,
|
1022
|
+
providerOptions: tool3.providerOptions
|
1023
|
+
};
|
1024
|
+
case "provider-defined":
|
1025
|
+
return {
|
1026
|
+
type: "provider-defined",
|
1027
|
+
name: name16,
|
1028
|
+
id: tool3.id,
|
1029
|
+
args: tool3.args
|
1030
|
+
};
|
1031
|
+
default: {
|
1032
|
+
const exhaustiveCheck = toolType;
|
1033
|
+
throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
|
1034
|
+
}
|
1035
|
+
}
|
1036
|
+
}),
|
1037
|
+
toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
|
1038
|
+
};
|
1157
1039
|
}
|
1158
1040
|
|
1159
1041
|
// src/prompt/standardize-prompt.ts
|
@@ -1531,88 +1413,222 @@ function recordSpan({
|
|
1531
1413
|
}
|
1532
1414
|
throw error;
|
1533
1415
|
}
|
1534
|
-
});
|
1535
|
-
}
|
1536
|
-
function recordErrorOnSpan(span, error) {
|
1537
|
-
if (error instanceof Error) {
|
1538
|
-
span.recordException({
|
1539
|
-
name: error.name,
|
1540
|
-
message: error.message,
|
1541
|
-
stack: error.stack
|
1542
|
-
});
|
1543
|
-
span.setStatus({
|
1544
|
-
code: SpanStatusCode.ERROR,
|
1545
|
-
message: error.message
|
1416
|
+
});
|
1417
|
+
}
|
1418
|
+
function recordErrorOnSpan(span, error) {
|
1419
|
+
if (error instanceof Error) {
|
1420
|
+
span.recordException({
|
1421
|
+
name: error.name,
|
1422
|
+
message: error.message,
|
1423
|
+
stack: error.stack
|
1424
|
+
});
|
1425
|
+
span.setStatus({
|
1426
|
+
code: SpanStatusCode.ERROR,
|
1427
|
+
message: error.message
|
1428
|
+
});
|
1429
|
+
} else {
|
1430
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
1431
|
+
}
|
1432
|
+
}
|
1433
|
+
|
1434
|
+
// src/telemetry/select-telemetry-attributes.ts
|
1435
|
+
function selectTelemetryAttributes({
|
1436
|
+
telemetry,
|
1437
|
+
attributes
|
1438
|
+
}) {
|
1439
|
+
if ((telemetry == null ? void 0 : telemetry.isEnabled) !== true) {
|
1440
|
+
return {};
|
1441
|
+
}
|
1442
|
+
return Object.entries(attributes).reduce((attributes2, [key, value]) => {
|
1443
|
+
if (value == null) {
|
1444
|
+
return attributes2;
|
1445
|
+
}
|
1446
|
+
if (typeof value === "object" && "input" in value && typeof value.input === "function") {
|
1447
|
+
if ((telemetry == null ? void 0 : telemetry.recordInputs) === false) {
|
1448
|
+
return attributes2;
|
1449
|
+
}
|
1450
|
+
const result = value.input();
|
1451
|
+
return result == null ? attributes2 : { ...attributes2, [key]: result };
|
1452
|
+
}
|
1453
|
+
if (typeof value === "object" && "output" in value && typeof value.output === "function") {
|
1454
|
+
if ((telemetry == null ? void 0 : telemetry.recordOutputs) === false) {
|
1455
|
+
return attributes2;
|
1456
|
+
}
|
1457
|
+
const result = value.output();
|
1458
|
+
return result == null ? attributes2 : { ...attributes2, [key]: result };
|
1459
|
+
}
|
1460
|
+
return { ...attributes2, [key]: value };
|
1461
|
+
}, {});
|
1462
|
+
}
|
1463
|
+
|
1464
|
+
// src/telemetry/stringify-for-telemetry.ts
|
1465
|
+
function stringifyForTelemetry(prompt) {
|
1466
|
+
return JSON.stringify(
|
1467
|
+
prompt.map((message) => ({
|
1468
|
+
...message,
|
1469
|
+
content: typeof message.content === "string" ? message.content : message.content.map(
|
1470
|
+
(part) => part.type === "file" ? {
|
1471
|
+
...part,
|
1472
|
+
data: part.data instanceof Uint8Array ? convertDataContentToBase64String(part.data) : part.data
|
1473
|
+
} : part
|
1474
|
+
)
|
1475
|
+
}))
|
1476
|
+
);
|
1477
|
+
}
|
1478
|
+
|
1479
|
+
// src/types/usage.ts
|
1480
|
+
function addLanguageModelUsage(usage1, usage2) {
|
1481
|
+
return {
|
1482
|
+
inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
|
1483
|
+
outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),
|
1484
|
+
totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),
|
1485
|
+
reasoningTokens: addTokenCounts(
|
1486
|
+
usage1.reasoningTokens,
|
1487
|
+
usage2.reasoningTokens
|
1488
|
+
),
|
1489
|
+
cachedInputTokens: addTokenCounts(
|
1490
|
+
usage1.cachedInputTokens,
|
1491
|
+
usage2.cachedInputTokens
|
1492
|
+
)
|
1493
|
+
};
|
1494
|
+
}
|
1495
|
+
function addTokenCounts(tokenCount1, tokenCount2) {
|
1496
|
+
return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
|
1497
|
+
}
|
1498
|
+
|
1499
|
+
// src/util/as-array.ts
|
1500
|
+
function asArray(value) {
|
1501
|
+
return value === void 0 ? [] : Array.isArray(value) ? value : [value];
|
1502
|
+
}
|
1503
|
+
|
1504
|
+
// src/util/retry-with-exponential-backoff.ts
|
1505
|
+
import { APICallError as APICallError2 } from "@ai-sdk/provider";
|
1506
|
+
import { delay, getErrorMessage as getErrorMessage3, isAbortError } from "@ai-sdk/provider-utils";
|
1507
|
+
function getRetryDelayInMs({
|
1508
|
+
error,
|
1509
|
+
exponentialBackoffDelay
|
1510
|
+
}) {
|
1511
|
+
const headers = error.responseHeaders;
|
1512
|
+
if (!headers)
|
1513
|
+
return exponentialBackoffDelay;
|
1514
|
+
let ms;
|
1515
|
+
const retryAfterMs = headers["retry-after-ms"];
|
1516
|
+
if (retryAfterMs) {
|
1517
|
+
const timeoutMs = parseFloat(retryAfterMs);
|
1518
|
+
if (!Number.isNaN(timeoutMs)) {
|
1519
|
+
ms = timeoutMs;
|
1520
|
+
}
|
1521
|
+
}
|
1522
|
+
const retryAfter = headers["retry-after"];
|
1523
|
+
if (retryAfter && ms === void 0) {
|
1524
|
+
const timeoutSeconds = parseFloat(retryAfter);
|
1525
|
+
if (!Number.isNaN(timeoutSeconds)) {
|
1526
|
+
ms = timeoutSeconds * 1e3;
|
1527
|
+
} else {
|
1528
|
+
ms = Date.parse(retryAfter) - Date.now();
|
1529
|
+
}
|
1530
|
+
}
|
1531
|
+
if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {
|
1532
|
+
return ms;
|
1533
|
+
}
|
1534
|
+
return exponentialBackoffDelay;
|
1535
|
+
}
|
1536
|
+
var retryWithExponentialBackoffRespectingRetryHeaders = ({
|
1537
|
+
maxRetries = 2,
|
1538
|
+
initialDelayInMs = 2e3,
|
1539
|
+
backoffFactor = 2,
|
1540
|
+
abortSignal
|
1541
|
+
} = {}) => async (f) => _retryWithExponentialBackoff(f, {
|
1542
|
+
maxRetries,
|
1543
|
+
delayInMs: initialDelayInMs,
|
1544
|
+
backoffFactor,
|
1545
|
+
abortSignal
|
1546
|
+
});
|
1547
|
+
async function _retryWithExponentialBackoff(f, {
|
1548
|
+
maxRetries,
|
1549
|
+
delayInMs,
|
1550
|
+
backoffFactor,
|
1551
|
+
abortSignal
|
1552
|
+
}, errors = []) {
|
1553
|
+
try {
|
1554
|
+
return await f();
|
1555
|
+
} catch (error) {
|
1556
|
+
if (isAbortError(error)) {
|
1557
|
+
throw error;
|
1558
|
+
}
|
1559
|
+
if (maxRetries === 0) {
|
1560
|
+
throw error;
|
1561
|
+
}
|
1562
|
+
const errorMessage = getErrorMessage3(error);
|
1563
|
+
const newErrors = [...errors, error];
|
1564
|
+
const tryNumber = newErrors.length;
|
1565
|
+
if (tryNumber > maxRetries) {
|
1566
|
+
throw new RetryError({
|
1567
|
+
message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
|
1568
|
+
reason: "maxRetriesExceeded",
|
1569
|
+
errors: newErrors
|
1570
|
+
});
|
1571
|
+
}
|
1572
|
+
if (error instanceof Error && APICallError2.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
|
1573
|
+
await delay(
|
1574
|
+
getRetryDelayInMs({
|
1575
|
+
error,
|
1576
|
+
exponentialBackoffDelay: delayInMs
|
1577
|
+
}),
|
1578
|
+
{ abortSignal }
|
1579
|
+
);
|
1580
|
+
return _retryWithExponentialBackoff(
|
1581
|
+
f,
|
1582
|
+
{
|
1583
|
+
maxRetries,
|
1584
|
+
delayInMs: backoffFactor * delayInMs,
|
1585
|
+
backoffFactor,
|
1586
|
+
abortSignal
|
1587
|
+
},
|
1588
|
+
newErrors
|
1589
|
+
);
|
1590
|
+
}
|
1591
|
+
if (tryNumber === 1) {
|
1592
|
+
throw error;
|
1593
|
+
}
|
1594
|
+
throw new RetryError({
|
1595
|
+
message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
|
1596
|
+
reason: "errorNotRetryable",
|
1597
|
+
errors: newErrors
|
1546
1598
|
});
|
1547
|
-
} else {
|
1548
|
-
span.setStatus({ code: SpanStatusCode.ERROR });
|
1549
1599
|
}
|
1550
1600
|
}
|
1551
1601
|
|
1552
|
-
// src/
|
1553
|
-
function
|
1554
|
-
|
1555
|
-
|
1602
|
+
// src/util/prepare-retries.ts
|
1603
|
+
function prepareRetries({
|
1604
|
+
maxRetries,
|
1605
|
+
abortSignal
|
1556
1606
|
}) {
|
1557
|
-
if (
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
if (typeof value === "object" && "input" in value && typeof value.input === "function") {
|
1565
|
-
if ((telemetry == null ? void 0 : telemetry.recordInputs) === false) {
|
1566
|
-
return attributes2;
|
1567
|
-
}
|
1568
|
-
const result = value.input();
|
1569
|
-
return result == null ? attributes2 : { ...attributes2, [key]: result };
|
1607
|
+
if (maxRetries != null) {
|
1608
|
+
if (!Number.isInteger(maxRetries)) {
|
1609
|
+
throw new InvalidArgumentError({
|
1610
|
+
parameter: "maxRetries",
|
1611
|
+
value: maxRetries,
|
1612
|
+
message: "maxRetries must be an integer"
|
1613
|
+
});
|
1570
1614
|
}
|
1571
|
-
if (
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1615
|
+
if (maxRetries < 0) {
|
1616
|
+
throw new InvalidArgumentError({
|
1617
|
+
parameter: "maxRetries",
|
1618
|
+
value: maxRetries,
|
1619
|
+
message: "maxRetries must be >= 0"
|
1620
|
+
});
|
1577
1621
|
}
|
1578
|
-
|
1579
|
-
|
1580
|
-
}
|
1581
|
-
|
1582
|
-
// src/telemetry/stringify-for-telemetry.ts
|
1583
|
-
function stringifyForTelemetry(prompt) {
|
1584
|
-
return JSON.stringify(
|
1585
|
-
prompt.map((message) => ({
|
1586
|
-
...message,
|
1587
|
-
content: typeof message.content === "string" ? message.content : message.content.map(
|
1588
|
-
(part) => part.type === "file" ? {
|
1589
|
-
...part,
|
1590
|
-
data: part.data instanceof Uint8Array ? convertDataContentToBase64String(part.data) : part.data
|
1591
|
-
} : part
|
1592
|
-
)
|
1593
|
-
}))
|
1594
|
-
);
|
1595
|
-
}
|
1596
|
-
|
1597
|
-
// src/types/usage.ts
|
1598
|
-
function addLanguageModelUsage(usage1, usage2) {
|
1622
|
+
}
|
1623
|
+
const maxRetriesResult = maxRetries != null ? maxRetries : 2;
|
1599
1624
|
return {
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
usage2.reasoningTokens
|
1606
|
-
),
|
1607
|
-
cachedInputTokens: addTokenCounts(
|
1608
|
-
usage1.cachedInputTokens,
|
1609
|
-
usage2.cachedInputTokens
|
1610
|
-
)
|
1625
|
+
maxRetries: maxRetriesResult,
|
1626
|
+
retry: retryWithExponentialBackoffRespectingRetryHeaders({
|
1627
|
+
maxRetries: maxRetriesResult,
|
1628
|
+
abortSignal
|
1629
|
+
})
|
1611
1630
|
};
|
1612
1631
|
}
|
1613
|
-
function addTokenCounts(tokenCount1, tokenCount2) {
|
1614
|
-
return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
|
1615
|
-
}
|
1616
1632
|
|
1617
1633
|
// src/generate-text/extract-content-text.ts
|
1618
1634
|
function extractContentText(content) {
|
@@ -3823,12 +3839,6 @@ var DelayedPromise = class {
|
|
3823
3839
|
}
|
3824
3840
|
};
|
3825
3841
|
|
3826
|
-
// src/util/now.ts
|
3827
|
-
function now() {
|
3828
|
-
var _a16, _b;
|
3829
|
-
return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();
|
3830
|
-
}
|
3831
|
-
|
3832
3842
|
// src/util/filter-stream-errors.ts
|
3833
3843
|
function filterStreamErrors(readable, onError) {
|
3834
3844
|
return new ReadableStream({
|
@@ -3853,6 +3863,12 @@ function filterStreamErrors(readable, onError) {
|
|
3853
3863
|
});
|
3854
3864
|
}
|
3855
3865
|
|
3866
|
+
// src/util/now.ts
|
3867
|
+
function now() {
|
3868
|
+
var _a16, _b;
|
3869
|
+
return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();
|
3870
|
+
}
|
3871
|
+
|
3856
3872
|
// src/generate-text/run-tools-transformation.ts
|
3857
3873
|
import { generateId } from "@ai-sdk/provider-utils";
|
3858
3874
|
function runToolsTransformation({
|
@@ -5345,7 +5361,7 @@ var Agent = class {
|
|
5345
5361
|
|
5346
5362
|
// src/embed/embed.ts
|
5347
5363
|
async function embed({
|
5348
|
-
model,
|
5364
|
+
model: modelArg,
|
5349
5365
|
value,
|
5350
5366
|
providerOptions,
|
5351
5367
|
maxRetries: maxRetriesArg,
|
@@ -5353,13 +5369,7 @@ async function embed({
|
|
5353
5369
|
headers,
|
5354
5370
|
experimental_telemetry: telemetry
|
5355
5371
|
}) {
|
5356
|
-
|
5357
|
-
throw new UnsupportedModelVersionError({
|
5358
|
-
version: model.specificationVersion,
|
5359
|
-
provider: model.provider,
|
5360
|
-
modelId: model.modelId
|
5361
|
-
});
|
5362
|
-
}
|
5372
|
+
const model = resolveEmbeddingModel(modelArg);
|
5363
5373
|
const { maxRetries, retry } = prepareRetries({
|
5364
5374
|
maxRetries: maxRetriesArg,
|
5365
5375
|
abortSignal
|
@@ -5477,7 +5487,7 @@ function splitArray(array, chunkSize) {
|
|
5477
5487
|
|
5478
5488
|
// src/embed/embed-many.ts
|
5479
5489
|
async function embedMany({
|
5480
|
-
model,
|
5490
|
+
model: modelArg,
|
5481
5491
|
values,
|
5482
5492
|
maxParallelCalls = Infinity,
|
5483
5493
|
maxRetries: maxRetriesArg,
|
@@ -5486,13 +5496,7 @@ async function embedMany({
|
|
5486
5496
|
providerOptions,
|
5487
5497
|
experimental_telemetry: telemetry
|
5488
5498
|
}) {
|
5489
|
-
|
5490
|
-
throw new UnsupportedModelVersionError({
|
5491
|
-
version: model.specificationVersion,
|
5492
|
-
provider: model.provider,
|
5493
|
-
modelId: model.modelId
|
5494
|
-
});
|
5495
|
-
}
|
5499
|
+
const model = resolveEmbeddingModel(modelArg);
|
5496
5500
|
const { maxRetries, retry } = prepareRetries({
|
5497
5501
|
maxRetries: maxRetriesArg,
|
5498
5502
|
abortSignal
|
@@ -6094,6 +6098,63 @@ function getOutputStrategy({
|
|
6094
6098
|
}
|
6095
6099
|
}
|
6096
6100
|
|
6101
|
+
// src/generate-object/parse-and-validate-object-result.ts
|
6102
|
+
import { JSONParseError as JSONParseError2, TypeValidationError as TypeValidationError3 } from "@ai-sdk/provider";
|
6103
|
+
import { safeParseJSON as safeParseJSON3 } from "@ai-sdk/provider-utils";
|
6104
|
+
async function parseAndValidateObjectResult(result, outputStrategy, context) {
|
6105
|
+
const parseResult = await safeParseJSON3({ text: result });
|
6106
|
+
if (!parseResult.success) {
|
6107
|
+
throw new NoObjectGeneratedError({
|
6108
|
+
message: "No object generated: could not parse the response.",
|
6109
|
+
cause: parseResult.error,
|
6110
|
+
text: result,
|
6111
|
+
response: context.response,
|
6112
|
+
usage: context.usage,
|
6113
|
+
finishReason: context.finishReason
|
6114
|
+
});
|
6115
|
+
}
|
6116
|
+
const validationResult = await outputStrategy.validateFinalResult(
|
6117
|
+
parseResult.value,
|
6118
|
+
{
|
6119
|
+
text: result,
|
6120
|
+
response: context.response,
|
6121
|
+
usage: context.usage
|
6122
|
+
}
|
6123
|
+
);
|
6124
|
+
if (!validationResult.success) {
|
6125
|
+
throw new NoObjectGeneratedError({
|
6126
|
+
message: "No object generated: response did not match schema.",
|
6127
|
+
cause: validationResult.error,
|
6128
|
+
text: result,
|
6129
|
+
response: context.response,
|
6130
|
+
usage: context.usage,
|
6131
|
+
finishReason: context.finishReason
|
6132
|
+
});
|
6133
|
+
}
|
6134
|
+
return validationResult.value;
|
6135
|
+
}
|
6136
|
+
async function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {
|
6137
|
+
try {
|
6138
|
+
return await parseAndValidateObjectResult(result, outputStrategy, context);
|
6139
|
+
} catch (error) {
|
6140
|
+
if (repairText != null && NoObjectGeneratedError.isInstance(error) && (JSONParseError2.isInstance(error.cause) || TypeValidationError3.isInstance(error.cause))) {
|
6141
|
+
const repairedText = await repairText({
|
6142
|
+
text: result,
|
6143
|
+
error: error.cause
|
6144
|
+
});
|
6145
|
+
if (repairedText === null) {
|
6146
|
+
throw error;
|
6147
|
+
}
|
6148
|
+
return await parseAndValidateObjectResult(
|
6149
|
+
repairedText,
|
6150
|
+
outputStrategy,
|
6151
|
+
context
|
6152
|
+
);
|
6153
|
+
}
|
6154
|
+
throw error;
|
6155
|
+
}
|
6156
|
+
}
|
6157
|
+
|
6097
6158
|
// src/generate-object/validate-object-generation-input.ts
|
6098
6159
|
function validateObjectGenerationInput({
|
6099
6160
|
output,
|
@@ -6212,63 +6273,6 @@ function validateObjectGenerationInput({
|
|
6212
6273
|
}
|
6213
6274
|
}
|
6214
6275
|
|
6215
|
-
// src/generate-object/parse-and-validate-object-result.ts
|
6216
|
-
import { JSONParseError as JSONParseError2, TypeValidationError as TypeValidationError3 } from "@ai-sdk/provider";
|
6217
|
-
import { safeParseJSON as safeParseJSON3 } from "@ai-sdk/provider-utils";
|
6218
|
-
async function parseAndValidateObjectResult(result, outputStrategy, context) {
|
6219
|
-
const parseResult = await safeParseJSON3({ text: result });
|
6220
|
-
if (!parseResult.success) {
|
6221
|
-
throw new NoObjectGeneratedError({
|
6222
|
-
message: "No object generated: could not parse the response.",
|
6223
|
-
cause: parseResult.error,
|
6224
|
-
text: result,
|
6225
|
-
response: context.response,
|
6226
|
-
usage: context.usage,
|
6227
|
-
finishReason: context.finishReason
|
6228
|
-
});
|
6229
|
-
}
|
6230
|
-
const validationResult = await outputStrategy.validateFinalResult(
|
6231
|
-
parseResult.value,
|
6232
|
-
{
|
6233
|
-
text: result,
|
6234
|
-
response: context.response,
|
6235
|
-
usage: context.usage
|
6236
|
-
}
|
6237
|
-
);
|
6238
|
-
if (!validationResult.success) {
|
6239
|
-
throw new NoObjectGeneratedError({
|
6240
|
-
message: "No object generated: response did not match schema.",
|
6241
|
-
cause: validationResult.error,
|
6242
|
-
text: result,
|
6243
|
-
response: context.response,
|
6244
|
-
usage: context.usage,
|
6245
|
-
finishReason: context.finishReason
|
6246
|
-
});
|
6247
|
-
}
|
6248
|
-
return validationResult.value;
|
6249
|
-
}
|
6250
|
-
async function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {
|
6251
|
-
try {
|
6252
|
-
return await parseAndValidateObjectResult(result, outputStrategy, context);
|
6253
|
-
} catch (error) {
|
6254
|
-
if (repairText != null && NoObjectGeneratedError.isInstance(error) && (JSONParseError2.isInstance(error.cause) || TypeValidationError3.isInstance(error.cause))) {
|
6255
|
-
const repairedText = await repairText({
|
6256
|
-
text: result,
|
6257
|
-
error: error.cause
|
6258
|
-
});
|
6259
|
-
if (repairedText === null) {
|
6260
|
-
throw error;
|
6261
|
-
}
|
6262
|
-
return await parseAndValidateObjectResult(
|
6263
|
-
repairedText,
|
6264
|
-
outputStrategy,
|
6265
|
-
context
|
6266
|
-
);
|
6267
|
-
}
|
6268
|
-
throw error;
|
6269
|
-
}
|
6270
|
-
}
|
6271
|
-
|
6272
6276
|
// src/generate-object/generate-object.ts
|
6273
6277
|
var originalGenerateId3 = createIdGenerator3({ prefix: "aiobj", size: 24 });
|
6274
6278
|
async function generateObject(options) {
|
@@ -7275,7 +7279,7 @@ __export(output_exports, {
|
|
7275
7279
|
});
|
7276
7280
|
import {
|
7277
7281
|
asSchema as asSchema4,
|
7278
|
-
safeParseJSON as
|
7282
|
+
safeParseJSON as safeParseJSON4,
|
7279
7283
|
safeValidateTypes as safeValidateTypes4
|
7280
7284
|
} from "@ai-sdk/provider-utils";
|
7281
7285
|
var text = () => ({
|
@@ -7317,7 +7321,7 @@ var object = ({
|
|
7317
7321
|
}
|
7318
7322
|
},
|
7319
7323
|
async parseOutput({ text: text2 }, context) {
|
7320
|
-
const parseResult = await
|
7324
|
+
const parseResult = await safeParseJSON4({ text: text2 });
|
7321
7325
|
if (!parseResult.success) {
|
7322
7326
|
throw new NoObjectGeneratedError({
|
7323
7327
|
message: "No object generated: could not parse the response.",
|
@@ -9579,8 +9583,8 @@ function readUIMessageStream({
|
|
9579
9583
|
return createAsyncIterableStream(outputStream);
|
9580
9584
|
}
|
9581
9585
|
export {
|
9582
|
-
|
9583
|
-
|
9586
|
+
AISDKError16 as AISDKError,
|
9587
|
+
APICallError,
|
9584
9588
|
AbstractChat,
|
9585
9589
|
DefaultChatTransport,
|
9586
9590
|
DownloadError,
|