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/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-transcript-generated-error.ts
6339
+ // errors/no-speech-generated-error.ts
6339
6340
  var import_provider23 = require("@ai-sdk/provider");
6340
- var NoTranscriptGeneratedError = class extends import_provider23.AISDKError {
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 import_provider24 = require("@ai-sdk/provider");
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 import_provider24.AISDKError({
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 import_provider25 = require("@ai-sdk/provider");
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 import_provider25.NoSuchModelError({ modelId, modelType: "languageModel" });
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 import_provider25.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
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 import_provider25.NoSuchModelError({ modelId, modelType: "imageModel" });
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 import_provider26 = require("@ai-sdk/provider");
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 import_provider26.NoSuchModelError {
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 import_provider26.AISDKError.hasMarker(error, marker16);
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 import_provider27 = require("@ai-sdk/provider");
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 import_provider27.NoSuchModelError({
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 + 1)];
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 import_provider27.NoSuchModelError({ modelId: id, modelType: "languageModel" });
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 import_provider27.NoSuchModelError({
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 import_provider27.NoSuchModelError({ modelId: id, modelType: "imageModel" });
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)(inputSchema) : schemas[name17].parameters;
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 _a17;
7541
- (_a17 = options == null ? void 0 : options.abortSignal) == null ? void 0 : _a17.throwIfAborted();
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,