ai 4.3.4 → 4.3.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 +18 -0
- package/dist/index.d.mts +147 -13
- package/dist/index.d.ts +147 -13
- package/dist/index.js +117 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +106 -10
- 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,
|
@@ -6335,9 +6336,99 @@ var DefaultStreamTextResult = class {
|
|
6335
6336
|
}
|
6336
6337
|
};
|
6337
6338
|
|
6338
|
-
// errors/no-
|
6339
|
+
// errors/no-speech-generated-error.ts
|
6339
6340
|
var import_provider23 = require("@ai-sdk/provider");
|
6340
|
-
var
|
6341
|
+
var NoSpeechGeneratedError = class extends import_provider23.AISDKError {
|
6342
|
+
constructor(options) {
|
6343
|
+
super({
|
6344
|
+
name: "AI_NoSpeechGeneratedError",
|
6345
|
+
message: "No speech audio generated."
|
6346
|
+
});
|
6347
|
+
this.responses = options.responses;
|
6348
|
+
}
|
6349
|
+
};
|
6350
|
+
|
6351
|
+
// core/generate-speech/generated-audio-file.ts
|
6352
|
+
var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {
|
6353
|
+
constructor({
|
6354
|
+
data,
|
6355
|
+
mimeType
|
6356
|
+
}) {
|
6357
|
+
super({ data, mimeType });
|
6358
|
+
let format = "mp3";
|
6359
|
+
if (mimeType) {
|
6360
|
+
const mimeTypeParts = mimeType.split("/");
|
6361
|
+
if (mimeTypeParts.length === 2) {
|
6362
|
+
if (mimeType !== "audio/mpeg") {
|
6363
|
+
format = mimeTypeParts[1];
|
6364
|
+
}
|
6365
|
+
}
|
6366
|
+
}
|
6367
|
+
if (!format) {
|
6368
|
+
throw new Error(
|
6369
|
+
"Audio format must be provided or determinable from mimeType"
|
6370
|
+
);
|
6371
|
+
}
|
6372
|
+
this.format = format;
|
6373
|
+
}
|
6374
|
+
};
|
6375
|
+
|
6376
|
+
// core/generate-speech/generate-speech.ts
|
6377
|
+
async function generateSpeech({
|
6378
|
+
model,
|
6379
|
+
text: text2,
|
6380
|
+
voice,
|
6381
|
+
outputFormat,
|
6382
|
+
instructions,
|
6383
|
+
speed,
|
6384
|
+
providerOptions = {},
|
6385
|
+
maxRetries: maxRetriesArg,
|
6386
|
+
abortSignal,
|
6387
|
+
headers
|
6388
|
+
}) {
|
6389
|
+
var _a17;
|
6390
|
+
const { retry } = prepareRetries({ maxRetries: maxRetriesArg });
|
6391
|
+
const result = await retry(
|
6392
|
+
() => model.doGenerate({
|
6393
|
+
text: text2,
|
6394
|
+
voice,
|
6395
|
+
outputFormat,
|
6396
|
+
instructions,
|
6397
|
+
speed,
|
6398
|
+
abortSignal,
|
6399
|
+
headers,
|
6400
|
+
providerOptions
|
6401
|
+
})
|
6402
|
+
);
|
6403
|
+
if (!result.audio || result.audio.length === 0) {
|
6404
|
+
throw new NoSpeechGeneratedError({ responses: [result.response] });
|
6405
|
+
}
|
6406
|
+
return new DefaultSpeechResult({
|
6407
|
+
audio: new DefaultGeneratedAudioFile({
|
6408
|
+
data: result.audio,
|
6409
|
+
mimeType: (_a17 = detectMimeType({
|
6410
|
+
data: result.audio,
|
6411
|
+
signatures: audioMimeTypeSignatures
|
6412
|
+
})) != null ? _a17 : "audio/mp3"
|
6413
|
+
}),
|
6414
|
+
warnings: result.warnings,
|
6415
|
+
responses: [result.response],
|
6416
|
+
providerMetadata: result.providerMetadata
|
6417
|
+
});
|
6418
|
+
}
|
6419
|
+
var DefaultSpeechResult = class {
|
6420
|
+
constructor(options) {
|
6421
|
+
var _a17;
|
6422
|
+
this.audio = options.audio;
|
6423
|
+
this.warnings = options.warnings;
|
6424
|
+
this.responses = options.responses;
|
6425
|
+
this.providerMetadata = (_a17 = options.providerMetadata) != null ? _a17 : {};
|
6426
|
+
}
|
6427
|
+
};
|
6428
|
+
|
6429
|
+
// errors/no-transcript-generated-error.ts
|
6430
|
+
var import_provider24 = require("@ai-sdk/provider");
|
6431
|
+
var NoTranscriptGeneratedError = class extends import_provider24.AISDKError {
|
6341
6432
|
constructor(options) {
|
6342
6433
|
super({
|
6343
6434
|
name: "AI_NoTranscriptGeneratedError",
|
@@ -6714,7 +6805,7 @@ function appendClientMessage({
|
|
6714
6805
|
|
6715
6806
|
// core/prompt/append-response-messages.ts
|
6716
6807
|
var import_ui_utils9 = require("@ai-sdk/ui-utils");
|
6717
|
-
var
|
6808
|
+
var import_provider25 = require("@ai-sdk/provider");
|
6718
6809
|
function appendResponseMessages({
|
6719
6810
|
messages,
|
6720
6811
|
responseMessages,
|
@@ -6797,7 +6888,7 @@ function appendResponseMessages({
|
|
6797
6888
|
break;
|
6798
6889
|
case "file":
|
6799
6890
|
if (part.data instanceof URL) {
|
6800
|
-
throw new
|
6891
|
+
throw new import_provider25.AISDKError({
|
6801
6892
|
name: "InvalidAssistantFileData",
|
6802
6893
|
message: "File data cannot be a URL"
|
6803
6894
|
});
|
@@ -6891,7 +6982,7 @@ function appendResponseMessages({
|
|
6891
6982
|
}
|
6892
6983
|
|
6893
6984
|
// core/registry/custom-provider.ts
|
6894
|
-
var
|
6985
|
+
var import_provider26 = require("@ai-sdk/provider");
|
6895
6986
|
function customProvider({
|
6896
6987
|
languageModels,
|
6897
6988
|
textEmbeddingModels,
|
@@ -6906,7 +6997,7 @@ function customProvider({
|
|
6906
6997
|
if (fallbackProvider) {
|
6907
6998
|
return fallbackProvider.languageModel(modelId);
|
6908
6999
|
}
|
6909
|
-
throw new
|
7000
|
+
throw new import_provider26.NoSuchModelError({ modelId, modelType: "languageModel" });
|
6910
7001
|
},
|
6911
7002
|
textEmbeddingModel(modelId) {
|
6912
7003
|
if (textEmbeddingModels != null && modelId in textEmbeddingModels) {
|
@@ -6915,7 +7006,7 @@ function customProvider({
|
|
6915
7006
|
if (fallbackProvider) {
|
6916
7007
|
return fallbackProvider.textEmbeddingModel(modelId);
|
6917
7008
|
}
|
6918
|
-
throw new
|
7009
|
+
throw new import_provider26.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
|
6919
7010
|
},
|
6920
7011
|
imageModel(modelId) {
|
6921
7012
|
if (imageModels != null && modelId in imageModels) {
|
@@ -6924,19 +7015,19 @@ function customProvider({
|
|
6924
7015
|
if (fallbackProvider == null ? void 0 : fallbackProvider.imageModel) {
|
6925
7016
|
return fallbackProvider.imageModel(modelId);
|
6926
7017
|
}
|
6927
|
-
throw new
|
7018
|
+
throw new import_provider26.NoSuchModelError({ modelId, modelType: "imageModel" });
|
6928
7019
|
}
|
6929
7020
|
};
|
6930
7021
|
}
|
6931
7022
|
var experimental_customProvider = customProvider;
|
6932
7023
|
|
6933
7024
|
// core/registry/no-such-provider-error.ts
|
6934
|
-
var
|
7025
|
+
var import_provider27 = require("@ai-sdk/provider");
|
6935
7026
|
var name16 = "AI_NoSuchProviderError";
|
6936
7027
|
var marker16 = `vercel.ai.error.${name16}`;
|
6937
7028
|
var symbol16 = Symbol.for(marker16);
|
6938
7029
|
var _a16;
|
6939
|
-
var NoSuchProviderError = class extends
|
7030
|
+
var NoSuchProviderError = class extends import_provider27.NoSuchModelError {
|
6940
7031
|
constructor({
|
6941
7032
|
modelId,
|
6942
7033
|
modelType,
|
@@ -6950,13 +7041,13 @@ var NoSuchProviderError = class extends import_provider26.NoSuchModelError {
|
|
6950
7041
|
this.availableProviders = availableProviders;
|
6951
7042
|
}
|
6952
7043
|
static isInstance(error) {
|
6953
|
-
return
|
7044
|
+
return import_provider27.AISDKError.hasMarker(error, marker16);
|
6954
7045
|
}
|
6955
7046
|
};
|
6956
7047
|
_a16 = symbol16;
|
6957
7048
|
|
6958
7049
|
// core/registry/provider-registry.ts
|
6959
|
-
var
|
7050
|
+
var import_provider28 = require("@ai-sdk/provider");
|
6960
7051
|
function createProviderRegistry(providers, {
|
6961
7052
|
separator = ":"
|
6962
7053
|
} = {}) {
|
@@ -6995,20 +7086,20 @@ var DefaultProviderRegistry = class {
|
|
6995
7086
|
splitId(id, modelType) {
|
6996
7087
|
const index = id.indexOf(this.separator);
|
6997
7088
|
if (index === -1) {
|
6998
|
-
throw new
|
7089
|
+
throw new import_provider28.NoSuchModelError({
|
6999
7090
|
modelId: id,
|
7000
7091
|
modelType,
|
7001
7092
|
message: `Invalid ${modelType} id for registry: ${id} (must be in the format "providerId${this.separator}modelId")`
|
7002
7093
|
});
|
7003
7094
|
}
|
7004
|
-
return [id.slice(0, index), id.slice(index +
|
7095
|
+
return [id.slice(0, index), id.slice(index + this.separator.length)];
|
7005
7096
|
}
|
7006
7097
|
languageModel(id) {
|
7007
7098
|
var _a17, _b;
|
7008
7099
|
const [providerId, modelId] = this.splitId(id, "languageModel");
|
7009
7100
|
const model = (_b = (_a17 = this.getProvider(providerId)).languageModel) == null ? void 0 : _b.call(_a17, modelId);
|
7010
7101
|
if (model == null) {
|
7011
|
-
throw new
|
7102
|
+
throw new import_provider28.NoSuchModelError({ modelId: id, modelType: "languageModel" });
|
7012
7103
|
}
|
7013
7104
|
return model;
|
7014
7105
|
}
|
@@ -7018,7 +7109,7 @@ var DefaultProviderRegistry = class {
|
|
7018
7109
|
const provider = this.getProvider(providerId);
|
7019
7110
|
const model = (_a17 = provider.textEmbeddingModel) == null ? void 0 : _a17.call(provider, modelId);
|
7020
7111
|
if (model == null) {
|
7021
|
-
throw new
|
7112
|
+
throw new import_provider28.NoSuchModelError({
|
7022
7113
|
modelId: id,
|
7023
7114
|
modelType: "textEmbeddingModel"
|
7024
7115
|
});
|
@@ -7031,7 +7122,7 @@ var DefaultProviderRegistry = class {
|
|
7031
7122
|
const provider = this.getProvider(providerId);
|
7032
7123
|
const model = (_a17 = provider.imageModel) == null ? void 0 : _a17.call(provider, modelId);
|
7033
7124
|
if (model == null) {
|
7034
|
-
throw new
|
7125
|
+
throw new import_provider28.NoSuchModelError({ modelId: id, modelType: "imageModel" });
|
7035
7126
|
}
|
7036
7127
|
return model;
|
7037
7128
|
}
|
@@ -7524,6 +7615,7 @@ var MCPClient = class {
|
|
7524
7615
|
async tools({
|
7525
7616
|
schemas = "automatic"
|
7526
7617
|
} = {}) {
|
7618
|
+
var _a17;
|
7527
7619
|
const tools = {};
|
7528
7620
|
try {
|
7529
7621
|
const listToolsResult = await this.listTools();
|
@@ -7531,14 +7623,18 @@ var MCPClient = class {
|
|
7531
7623
|
if (schemas !== "automatic" && !(name17 in schemas)) {
|
7532
7624
|
continue;
|
7533
7625
|
}
|
7534
|
-
const parameters = schemas === "automatic" ? (0, import_ui_utils10.jsonSchema)(
|
7626
|
+
const parameters = schemas === "automatic" ? (0, import_ui_utils10.jsonSchema)({
|
7627
|
+
...inputSchema,
|
7628
|
+
properties: (_a17 = inputSchema.properties) != null ? _a17 : {},
|
7629
|
+
additionalProperties: false
|
7630
|
+
}) : schemas[name17].parameters;
|
7535
7631
|
const self = this;
|
7536
7632
|
const toolWithExecute = tool({
|
7537
7633
|
description,
|
7538
7634
|
parameters,
|
7539
7635
|
execute: async (args, options) => {
|
7540
|
-
var
|
7541
|
-
(
|
7636
|
+
var _a18;
|
7637
|
+
(_a18 = options == null ? void 0 : options.abortSignal) == null ? void 0 : _a18.throwIfAborted();
|
7542
7638
|
return self.callTool({
|
7543
7639
|
name: name17,
|
7544
7640
|
args,
|
@@ -8033,6 +8129,7 @@ var StreamData = class {
|
|
8033
8129
|
experimental_createProviderRegistry,
|
8034
8130
|
experimental_customProvider,
|
8035
8131
|
experimental_generateImage,
|
8132
|
+
experimental_generateSpeech,
|
8036
8133
|
experimental_transcribe,
|
8037
8134
|
experimental_wrapLanguageModel,
|
8038
8135
|
extractReasoningMiddleware,
|