ai 4.3.5 → 4.3.7
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 +18 -0
- package/dist/index.d.mts +147 -13
- package/dist/index.d.ts +147 -13
- package/dist/index.js +133 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +122 -18
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
@@ -73,6 +73,7 @@ __export(streams_exports, {
|
|
73
73
|
experimental_createProviderRegistry: () => experimental_createProviderRegistry,
|
74
74
|
experimental_customProvider: () => experimental_customProvider,
|
75
75
|
experimental_generateImage: () => generateImage,
|
76
|
+
experimental_generateSpeech: () => generateSpeech,
|
76
77
|
experimental_transcribe: () => transcribe,
|
77
78
|
experimental_wrapLanguageModel: () => experimental_wrapLanguageModel,
|
78
79
|
extractReasoningMiddleware: () => extractReasoningMiddleware,
|
@@ -4076,23 +4077,36 @@ function toResponseMessages({
|
|
4076
4077
|
generateMessageId
|
4077
4078
|
}) {
|
4078
4079
|
const responseMessages = [];
|
4079
|
-
|
4080
|
-
|
4081
|
-
content
|
4080
|
+
const content = [];
|
4081
|
+
if (reasoning.length > 0) {
|
4082
|
+
content.push(
|
4082
4083
|
...reasoning.map(
|
4083
4084
|
(part) => part.type === "text" ? { ...part, type: "reasoning" } : { ...part, type: "redacted-reasoning" }
|
4084
|
-
)
|
4085
|
-
|
4085
|
+
)
|
4086
|
+
);
|
4087
|
+
}
|
4088
|
+
if (files.length > 0) {
|
4089
|
+
content.push(
|
4086
4090
|
...files.map((file) => ({
|
4087
4091
|
type: "file",
|
4088
4092
|
data: file.base64,
|
4089
4093
|
mimeType: file.mimeType
|
4090
|
-
}))
|
4091
|
-
|
4092
|
-
|
4093
|
-
|
4094
|
-
|
4095
|
-
}
|
4094
|
+
}))
|
4095
|
+
);
|
4096
|
+
}
|
4097
|
+
if (text2.length > 0) {
|
4098
|
+
content.push({ type: "text", text: text2 });
|
4099
|
+
}
|
4100
|
+
if (toolCalls.length > 0) {
|
4101
|
+
content.push(...toolCalls);
|
4102
|
+
}
|
4103
|
+
if (content.length > 0) {
|
4104
|
+
responseMessages.push({
|
4105
|
+
role: "assistant",
|
4106
|
+
content,
|
4107
|
+
id: messageId
|
4108
|
+
});
|
4109
|
+
}
|
4096
4110
|
if (toolResults.length > 0) {
|
4097
4111
|
responseMessages.push({
|
4098
4112
|
role: "tool",
|
@@ -6335,9 +6349,99 @@ var DefaultStreamTextResult = class {
|
|
6335
6349
|
}
|
6336
6350
|
};
|
6337
6351
|
|
6338
|
-
// errors/no-
|
6352
|
+
// errors/no-speech-generated-error.ts
|
6339
6353
|
var import_provider23 = require("@ai-sdk/provider");
|
6340
|
-
var
|
6354
|
+
var NoSpeechGeneratedError = class extends import_provider23.AISDKError {
|
6355
|
+
constructor(options) {
|
6356
|
+
super({
|
6357
|
+
name: "AI_NoSpeechGeneratedError",
|
6358
|
+
message: "No speech audio generated."
|
6359
|
+
});
|
6360
|
+
this.responses = options.responses;
|
6361
|
+
}
|
6362
|
+
};
|
6363
|
+
|
6364
|
+
// core/generate-speech/generated-audio-file.ts
|
6365
|
+
var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {
|
6366
|
+
constructor({
|
6367
|
+
data,
|
6368
|
+
mimeType
|
6369
|
+
}) {
|
6370
|
+
super({ data, mimeType });
|
6371
|
+
let format = "mp3";
|
6372
|
+
if (mimeType) {
|
6373
|
+
const mimeTypeParts = mimeType.split("/");
|
6374
|
+
if (mimeTypeParts.length === 2) {
|
6375
|
+
if (mimeType !== "audio/mpeg") {
|
6376
|
+
format = mimeTypeParts[1];
|
6377
|
+
}
|
6378
|
+
}
|
6379
|
+
}
|
6380
|
+
if (!format) {
|
6381
|
+
throw new Error(
|
6382
|
+
"Audio format must be provided or determinable from mimeType"
|
6383
|
+
);
|
6384
|
+
}
|
6385
|
+
this.format = format;
|
6386
|
+
}
|
6387
|
+
};
|
6388
|
+
|
6389
|
+
// core/generate-speech/generate-speech.ts
|
6390
|
+
async function generateSpeech({
|
6391
|
+
model,
|
6392
|
+
text: text2,
|
6393
|
+
voice,
|
6394
|
+
outputFormat,
|
6395
|
+
instructions,
|
6396
|
+
speed,
|
6397
|
+
providerOptions = {},
|
6398
|
+
maxRetries: maxRetriesArg,
|
6399
|
+
abortSignal,
|
6400
|
+
headers
|
6401
|
+
}) {
|
6402
|
+
var _a17;
|
6403
|
+
const { retry } = prepareRetries({ maxRetries: maxRetriesArg });
|
6404
|
+
const result = await retry(
|
6405
|
+
() => model.doGenerate({
|
6406
|
+
text: text2,
|
6407
|
+
voice,
|
6408
|
+
outputFormat,
|
6409
|
+
instructions,
|
6410
|
+
speed,
|
6411
|
+
abortSignal,
|
6412
|
+
headers,
|
6413
|
+
providerOptions
|
6414
|
+
})
|
6415
|
+
);
|
6416
|
+
if (!result.audio || result.audio.length === 0) {
|
6417
|
+
throw new NoSpeechGeneratedError({ responses: [result.response] });
|
6418
|
+
}
|
6419
|
+
return new DefaultSpeechResult({
|
6420
|
+
audio: new DefaultGeneratedAudioFile({
|
6421
|
+
data: result.audio,
|
6422
|
+
mimeType: (_a17 = detectMimeType({
|
6423
|
+
data: result.audio,
|
6424
|
+
signatures: audioMimeTypeSignatures
|
6425
|
+
})) != null ? _a17 : "audio/mp3"
|
6426
|
+
}),
|
6427
|
+
warnings: result.warnings,
|
6428
|
+
responses: [result.response],
|
6429
|
+
providerMetadata: result.providerMetadata
|
6430
|
+
});
|
6431
|
+
}
|
6432
|
+
var DefaultSpeechResult = class {
|
6433
|
+
constructor(options) {
|
6434
|
+
var _a17;
|
6435
|
+
this.audio = options.audio;
|
6436
|
+
this.warnings = options.warnings;
|
6437
|
+
this.responses = options.responses;
|
6438
|
+
this.providerMetadata = (_a17 = options.providerMetadata) != null ? _a17 : {};
|
6439
|
+
}
|
6440
|
+
};
|
6441
|
+
|
6442
|
+
// errors/no-transcript-generated-error.ts
|
6443
|
+
var import_provider24 = require("@ai-sdk/provider");
|
6444
|
+
var NoTranscriptGeneratedError = class extends import_provider24.AISDKError {
|
6341
6445
|
constructor(options) {
|
6342
6446
|
super({
|
6343
6447
|
name: "AI_NoTranscriptGeneratedError",
|
@@ -6714,7 +6818,7 @@ function appendClientMessage({
|
|
6714
6818
|
|
6715
6819
|
// core/prompt/append-response-messages.ts
|
6716
6820
|
var import_ui_utils9 = require("@ai-sdk/ui-utils");
|
6717
|
-
var
|
6821
|
+
var import_provider25 = require("@ai-sdk/provider");
|
6718
6822
|
function appendResponseMessages({
|
6719
6823
|
messages,
|
6720
6824
|
responseMessages,
|
@@ -6797,7 +6901,7 @@ function appendResponseMessages({
|
|
6797
6901
|
break;
|
6798
6902
|
case "file":
|
6799
6903
|
if (part.data instanceof URL) {
|
6800
|
-
throw new
|
6904
|
+
throw new import_provider25.AISDKError({
|
6801
6905
|
name: "InvalidAssistantFileData",
|
6802
6906
|
message: "File data cannot be a URL"
|
6803
6907
|
});
|
@@ -6891,7 +6995,7 @@ function appendResponseMessages({
|
|
6891
6995
|
}
|
6892
6996
|
|
6893
6997
|
// core/registry/custom-provider.ts
|
6894
|
-
var
|
6998
|
+
var import_provider26 = require("@ai-sdk/provider");
|
6895
6999
|
function customProvider({
|
6896
7000
|
languageModels,
|
6897
7001
|
textEmbeddingModels,
|
@@ -6906,7 +7010,7 @@ function customProvider({
|
|
6906
7010
|
if (fallbackProvider) {
|
6907
7011
|
return fallbackProvider.languageModel(modelId);
|
6908
7012
|
}
|
6909
|
-
throw new
|
7013
|
+
throw new import_provider26.NoSuchModelError({ modelId, modelType: "languageModel" });
|
6910
7014
|
},
|
6911
7015
|
textEmbeddingModel(modelId) {
|
6912
7016
|
if (textEmbeddingModels != null && modelId in textEmbeddingModels) {
|
@@ -6915,7 +7019,7 @@ function customProvider({
|
|
6915
7019
|
if (fallbackProvider) {
|
6916
7020
|
return fallbackProvider.textEmbeddingModel(modelId);
|
6917
7021
|
}
|
6918
|
-
throw new
|
7022
|
+
throw new import_provider26.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
|
6919
7023
|
},
|
6920
7024
|
imageModel(modelId) {
|
6921
7025
|
if (imageModels != null && modelId in imageModels) {
|
@@ -6924,19 +7028,19 @@ function customProvider({
|
|
6924
7028
|
if (fallbackProvider == null ? void 0 : fallbackProvider.imageModel) {
|
6925
7029
|
return fallbackProvider.imageModel(modelId);
|
6926
7030
|
}
|
6927
|
-
throw new
|
7031
|
+
throw new import_provider26.NoSuchModelError({ modelId, modelType: "imageModel" });
|
6928
7032
|
}
|
6929
7033
|
};
|
6930
7034
|
}
|
6931
7035
|
var experimental_customProvider = customProvider;
|
6932
7036
|
|
6933
7037
|
// core/registry/no-such-provider-error.ts
|
6934
|
-
var
|
7038
|
+
var import_provider27 = require("@ai-sdk/provider");
|
6935
7039
|
var name16 = "AI_NoSuchProviderError";
|
6936
7040
|
var marker16 = `vercel.ai.error.${name16}`;
|
6937
7041
|
var symbol16 = Symbol.for(marker16);
|
6938
7042
|
var _a16;
|
6939
|
-
var NoSuchProviderError = class extends
|
7043
|
+
var NoSuchProviderError = class extends import_provider27.NoSuchModelError {
|
6940
7044
|
constructor({
|
6941
7045
|
modelId,
|
6942
7046
|
modelType,
|
@@ -6950,13 +7054,13 @@ var NoSuchProviderError = class extends import_provider26.NoSuchModelError {
|
|
6950
7054
|
this.availableProviders = availableProviders;
|
6951
7055
|
}
|
6952
7056
|
static isInstance(error) {
|
6953
|
-
return
|
7057
|
+
return import_provider27.AISDKError.hasMarker(error, marker16);
|
6954
7058
|
}
|
6955
7059
|
};
|
6956
7060
|
_a16 = symbol16;
|
6957
7061
|
|
6958
7062
|
// core/registry/provider-registry.ts
|
6959
|
-
var
|
7063
|
+
var import_provider28 = require("@ai-sdk/provider");
|
6960
7064
|
function createProviderRegistry(providers, {
|
6961
7065
|
separator = ":"
|
6962
7066
|
} = {}) {
|
@@ -6995,20 +7099,20 @@ var DefaultProviderRegistry = class {
|
|
6995
7099
|
splitId(id, modelType) {
|
6996
7100
|
const index = id.indexOf(this.separator);
|
6997
7101
|
if (index === -1) {
|
6998
|
-
throw new
|
7102
|
+
throw new import_provider28.NoSuchModelError({
|
6999
7103
|
modelId: id,
|
7000
7104
|
modelType,
|
7001
7105
|
message: `Invalid ${modelType} id for registry: ${id} (must be in the format "providerId${this.separator}modelId")`
|
7002
7106
|
});
|
7003
7107
|
}
|
7004
|
-
return [id.slice(0, index), id.slice(index +
|
7108
|
+
return [id.slice(0, index), id.slice(index + this.separator.length)];
|
7005
7109
|
}
|
7006
7110
|
languageModel(id) {
|
7007
7111
|
var _a17, _b;
|
7008
7112
|
const [providerId, modelId] = this.splitId(id, "languageModel");
|
7009
7113
|
const model = (_b = (_a17 = this.getProvider(providerId)).languageModel) == null ? void 0 : _b.call(_a17, modelId);
|
7010
7114
|
if (model == null) {
|
7011
|
-
throw new
|
7115
|
+
throw new import_provider28.NoSuchModelError({ modelId: id, modelType: "languageModel" });
|
7012
7116
|
}
|
7013
7117
|
return model;
|
7014
7118
|
}
|
@@ -7018,7 +7122,7 @@ var DefaultProviderRegistry = class {
|
|
7018
7122
|
const provider = this.getProvider(providerId);
|
7019
7123
|
const model = (_a17 = provider.textEmbeddingModel) == null ? void 0 : _a17.call(provider, modelId);
|
7020
7124
|
if (model == null) {
|
7021
|
-
throw new
|
7125
|
+
throw new import_provider28.NoSuchModelError({
|
7022
7126
|
modelId: id,
|
7023
7127
|
modelType: "textEmbeddingModel"
|
7024
7128
|
});
|
@@ -7031,7 +7135,7 @@ var DefaultProviderRegistry = class {
|
|
7031
7135
|
const provider = this.getProvider(providerId);
|
7032
7136
|
const model = (_a17 = provider.imageModel) == null ? void 0 : _a17.call(provider, modelId);
|
7033
7137
|
if (model == null) {
|
7034
|
-
throw new
|
7138
|
+
throw new import_provider28.NoSuchModelError({ modelId: id, modelType: "imageModel" });
|
7035
7139
|
}
|
7036
7140
|
return model;
|
7037
7141
|
}
|
@@ -8038,6 +8142,7 @@ var StreamData = class {
|
|
8038
8142
|
experimental_createProviderRegistry,
|
8039
8143
|
experimental_customProvider,
|
8040
8144
|
experimental_generateImage,
|
8145
|
+
experimental_generateSpeech,
|
8041
8146
|
experimental_transcribe,
|
8042
8147
|
experimental_wrapLanguageModel,
|
8043
8148
|
extractReasoningMiddleware,
|