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/dist/index.mjs CHANGED
@@ -4008,23 +4008,36 @@ function toResponseMessages({
4008
4008
  generateMessageId
4009
4009
  }) {
4010
4010
  const responseMessages = [];
4011
- responseMessages.push({
4012
- role: "assistant",
4013
- content: [
4011
+ const content = [];
4012
+ if (reasoning.length > 0) {
4013
+ content.push(
4014
4014
  ...reasoning.map(
4015
4015
  (part) => part.type === "text" ? { ...part, type: "reasoning" } : { ...part, type: "redacted-reasoning" }
4016
- ),
4017
- // TODO language model v2: switch to order response content (instead of type-based ordering)
4016
+ )
4017
+ );
4018
+ }
4019
+ if (files.length > 0) {
4020
+ content.push(
4018
4021
  ...files.map((file) => ({
4019
4022
  type: "file",
4020
4023
  data: file.base64,
4021
4024
  mimeType: file.mimeType
4022
- })),
4023
- { type: "text", text: text2 },
4024
- ...toolCalls
4025
- ],
4026
- id: messageId
4027
- });
4025
+ }))
4026
+ );
4027
+ }
4028
+ if (text2.length > 0) {
4029
+ content.push({ type: "text", text: text2 });
4030
+ }
4031
+ if (toolCalls.length > 0) {
4032
+ content.push(...toolCalls);
4033
+ }
4034
+ if (content.length > 0) {
4035
+ responseMessages.push({
4036
+ role: "assistant",
4037
+ content,
4038
+ id: messageId
4039
+ });
4040
+ }
4028
4041
  if (toolResults.length > 0) {
4029
4042
  responseMessages.push({
4030
4043
  role: "tool",
@@ -6282,9 +6295,99 @@ var DefaultStreamTextResult = class {
6282
6295
  }
6283
6296
  };
6284
6297
 
6285
- // errors/no-transcript-generated-error.ts
6298
+ // errors/no-speech-generated-error.ts
6286
6299
  import { AISDKError as AISDKError18 } from "@ai-sdk/provider";
6287
- var NoTranscriptGeneratedError = class extends AISDKError18 {
6300
+ var NoSpeechGeneratedError = class extends AISDKError18 {
6301
+ constructor(options) {
6302
+ super({
6303
+ name: "AI_NoSpeechGeneratedError",
6304
+ message: "No speech audio generated."
6305
+ });
6306
+ this.responses = options.responses;
6307
+ }
6308
+ };
6309
+
6310
+ // core/generate-speech/generated-audio-file.ts
6311
+ var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {
6312
+ constructor({
6313
+ data,
6314
+ mimeType
6315
+ }) {
6316
+ super({ data, mimeType });
6317
+ let format = "mp3";
6318
+ if (mimeType) {
6319
+ const mimeTypeParts = mimeType.split("/");
6320
+ if (mimeTypeParts.length === 2) {
6321
+ if (mimeType !== "audio/mpeg") {
6322
+ format = mimeTypeParts[1];
6323
+ }
6324
+ }
6325
+ }
6326
+ if (!format) {
6327
+ throw new Error(
6328
+ "Audio format must be provided or determinable from mimeType"
6329
+ );
6330
+ }
6331
+ this.format = format;
6332
+ }
6333
+ };
6334
+
6335
+ // core/generate-speech/generate-speech.ts
6336
+ async function generateSpeech({
6337
+ model,
6338
+ text: text2,
6339
+ voice,
6340
+ outputFormat,
6341
+ instructions,
6342
+ speed,
6343
+ providerOptions = {},
6344
+ maxRetries: maxRetriesArg,
6345
+ abortSignal,
6346
+ headers
6347
+ }) {
6348
+ var _a17;
6349
+ const { retry } = prepareRetries({ maxRetries: maxRetriesArg });
6350
+ const result = await retry(
6351
+ () => model.doGenerate({
6352
+ text: text2,
6353
+ voice,
6354
+ outputFormat,
6355
+ instructions,
6356
+ speed,
6357
+ abortSignal,
6358
+ headers,
6359
+ providerOptions
6360
+ })
6361
+ );
6362
+ if (!result.audio || result.audio.length === 0) {
6363
+ throw new NoSpeechGeneratedError({ responses: [result.response] });
6364
+ }
6365
+ return new DefaultSpeechResult({
6366
+ audio: new DefaultGeneratedAudioFile({
6367
+ data: result.audio,
6368
+ mimeType: (_a17 = detectMimeType({
6369
+ data: result.audio,
6370
+ signatures: audioMimeTypeSignatures
6371
+ })) != null ? _a17 : "audio/mp3"
6372
+ }),
6373
+ warnings: result.warnings,
6374
+ responses: [result.response],
6375
+ providerMetadata: result.providerMetadata
6376
+ });
6377
+ }
6378
+ var DefaultSpeechResult = class {
6379
+ constructor(options) {
6380
+ var _a17;
6381
+ this.audio = options.audio;
6382
+ this.warnings = options.warnings;
6383
+ this.responses = options.responses;
6384
+ this.providerMetadata = (_a17 = options.providerMetadata) != null ? _a17 : {};
6385
+ }
6386
+ };
6387
+
6388
+ // errors/no-transcript-generated-error.ts
6389
+ import { AISDKError as AISDKError19 } from "@ai-sdk/provider";
6390
+ var NoTranscriptGeneratedError = class extends AISDKError19 {
6288
6391
  constructor(options) {
6289
6392
  super({
6290
6393
  name: "AI_NoTranscriptGeneratedError",
@@ -6663,7 +6766,7 @@ function appendClientMessage({
6663
6766
  import {
6664
6767
  extractMaxToolInvocationStep
6665
6768
  } from "@ai-sdk/ui-utils";
6666
- import { AISDKError as AISDKError19 } from "@ai-sdk/provider";
6769
+ import { AISDKError as AISDKError20 } from "@ai-sdk/provider";
6667
6770
  function appendResponseMessages({
6668
6771
  messages,
6669
6772
  responseMessages,
@@ -6746,7 +6849,7 @@ function appendResponseMessages({
6746
6849
  break;
6747
6850
  case "file":
6748
6851
  if (part.data instanceof URL) {
6749
- throw new AISDKError19({
6852
+ throw new AISDKError20({
6750
6853
  name: "InvalidAssistantFileData",
6751
6854
  message: "File data cannot be a URL"
6752
6855
  });
@@ -6880,7 +6983,7 @@ function customProvider({
6880
6983
  var experimental_customProvider = customProvider;
6881
6984
 
6882
6985
  // core/registry/no-such-provider-error.ts
6883
- import { AISDKError as AISDKError20, NoSuchModelError as NoSuchModelError3 } from "@ai-sdk/provider";
6986
+ import { AISDKError as AISDKError21, NoSuchModelError as NoSuchModelError3 } from "@ai-sdk/provider";
6884
6987
  var name16 = "AI_NoSuchProviderError";
6885
6988
  var marker16 = `vercel.ai.error.${name16}`;
6886
6989
  var symbol16 = Symbol.for(marker16);
@@ -6899,7 +7002,7 @@ var NoSuchProviderError = class extends NoSuchModelError3 {
6899
7002
  this.availableProviders = availableProviders;
6900
7003
  }
6901
7004
  static isInstance(error) {
6902
- return AISDKError20.hasMarker(error, marker16);
7005
+ return AISDKError21.hasMarker(error, marker16);
6903
7006
  }
6904
7007
  };
6905
7008
  _a16 = symbol16;
@@ -6950,7 +7053,7 @@ var DefaultProviderRegistry = class {
6950
7053
  message: `Invalid ${modelType} id for registry: ${id} (must be in the format "providerId${this.separator}modelId")`
6951
7054
  });
6952
7055
  }
6953
- return [id.slice(0, index), id.slice(index + 1)];
7056
+ return [id.slice(0, index), id.slice(index + this.separator.length)];
6954
7057
  }
6955
7058
  languageModel(id) {
6956
7059
  var _a17, _b;
@@ -7988,6 +8091,7 @@ export {
7988
8091
  experimental_createProviderRegistry,
7989
8092
  experimental_customProvider,
7990
8093
  generateImage as experimental_generateImage,
8094
+ generateSpeech as experimental_generateSpeech,
7991
8095
  transcribe as experimental_transcribe,
7992
8096
  experimental_wrapLanguageModel,
7993
8097
  extractReasoningMiddleware,