ai 4.0.37 → 4.0.39

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
@@ -54,23 +54,24 @@ __export(streams_exports, {
54
54
  cosineSimilarity: () => cosineSimilarity,
55
55
  createDataStream: () => createDataStream,
56
56
  createDataStreamResponse: () => createDataStreamResponse,
57
+ createIdGenerator: () => import_provider_utils12.createIdGenerator,
57
58
  embed: () => embed,
58
59
  embedMany: () => embedMany,
59
60
  experimental_createProviderRegistry: () => experimental_createProviderRegistry,
60
61
  experimental_customProvider: () => experimental_customProvider,
61
62
  experimental_generateImage: () => generateImage,
62
63
  experimental_wrapLanguageModel: () => experimental_wrapLanguageModel,
63
- formatAssistantStreamPart: () => import_ui_utils14.formatAssistantStreamPart,
64
- formatDataStreamPart: () => import_ui_utils14.formatDataStreamPart,
65
- generateId: () => import_provider_utils14.generateId,
64
+ formatAssistantStreamPart: () => import_ui_utils9.formatAssistantStreamPart,
65
+ formatDataStreamPart: () => import_ui_utils9.formatDataStreamPart,
66
+ generateId: () => import_provider_utils12.generateId,
66
67
  generateObject: () => generateObject,
67
68
  generateText: () => generateText,
68
69
  jsonSchema: () => import_ui_utils9.jsonSchema,
69
- parseAssistantStreamPart: () => import_ui_utils14.parseAssistantStreamPart,
70
- parseDataStreamPart: () => import_ui_utils14.parseDataStreamPart,
70
+ parseAssistantStreamPart: () => import_ui_utils9.parseAssistantStreamPart,
71
+ parseDataStreamPart: () => import_ui_utils9.parseDataStreamPart,
71
72
  pipeDataStreamToResponse: () => pipeDataStreamToResponse,
72
- processDataStream: () => import_ui_utils14.processDataStream,
73
- processTextStream: () => import_ui_utils14.processTextStream,
73
+ processDataStream: () => import_ui_utils9.processDataStream,
74
+ processTextStream: () => import_ui_utils9.processTextStream,
74
75
  simulateReadableStream: () => simulateReadableStream,
75
76
  smoothStream: () => smoothStream,
76
77
  streamObject: () => streamObject,
@@ -78,10 +79,9 @@ __export(streams_exports, {
78
79
  tool: () => tool
79
80
  });
80
81
  module.exports = __toCommonJS(streams_exports);
81
- var import_ui_utils14 = require("@ai-sdk/ui-utils");
82
- var import_provider_utils14 = require("@ai-sdk/provider-utils");
83
82
 
84
83
  // core/index.ts
84
+ var import_provider_utils12 = require("@ai-sdk/provider-utils");
85
85
  var import_ui_utils9 = require("@ai-sdk/ui-utils");
86
86
 
87
87
  // core/data-stream/create-data-stream.ts
@@ -1717,7 +1717,7 @@ function convertToCoreMessages(messages, options) {
1717
1717
  break;
1718
1718
  }
1719
1719
  case "assistant": {
1720
- if (toolInvocations == null) {
1720
+ if (toolInvocations == null || toolInvocations.length === 0) {
1721
1721
  coreMessages.push({ role: "assistant", content });
1722
1722
  break;
1723
1723
  }
@@ -2280,7 +2280,7 @@ async function generateObject({
2280
2280
  experimental_telemetry: telemetry,
2281
2281
  experimental_providerMetadata: providerMetadata,
2282
2282
  _internal: {
2283
- generateId: generateId4 = originalGenerateId,
2283
+ generateId: generateId3 = originalGenerateId,
2284
2284
  currentDate = () => /* @__PURE__ */ new Date()
2285
2285
  } = {},
2286
2286
  ...settings
@@ -2410,7 +2410,7 @@ async function generateObject({
2410
2410
  headers
2411
2411
  });
2412
2412
  const responseData = {
2413
- id: (_b2 = (_a15 = result2.response) == null ? void 0 : _a15.id) != null ? _b2 : generateId4(),
2413
+ id: (_b2 = (_a15 = result2.response) == null ? void 0 : _a15.id) != null ? _b2 : generateId3(),
2414
2414
  timestamp: (_d = (_c = result2.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),
2415
2415
  modelId: (_f = (_e = result2.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId
2416
2416
  };
@@ -2518,7 +2518,7 @@ async function generateObject({
2518
2518
  });
2519
2519
  const objectText = (_b2 = (_a15 = result2.toolCalls) == null ? void 0 : _a15[0]) == null ? void 0 : _b2.args;
2520
2520
  const responseData = {
2521
- id: (_d = (_c = result2.response) == null ? void 0 : _c.id) != null ? _d : generateId4(),
2521
+ id: (_d = (_c = result2.response) == null ? void 0 : _c.id) != null ? _d : generateId3(),
2522
2522
  timestamp: (_f = (_e = result2.response) == null ? void 0 : _e.timestamp) != null ? _f : currentDate(),
2523
2523
  modelId: (_h = (_g = result2.response) == null ? void 0 : _g.modelId) != null ? _h : model.modelId
2524
2524
  };
@@ -2816,7 +2816,7 @@ function streamObject({
2816
2816
  experimental_providerMetadata: providerMetadata,
2817
2817
  onFinish,
2818
2818
  _internal: {
2819
- generateId: generateId4 = originalGenerateId2,
2819
+ generateId: generateId3 = originalGenerateId2,
2820
2820
  currentDate = () => /* @__PURE__ */ new Date(),
2821
2821
  now: now2 = now
2822
2822
  } = {},
@@ -2849,7 +2849,7 @@ function streamObject({
2849
2849
  inputProviderMetadata: providerMetadata,
2850
2850
  mode,
2851
2851
  onFinish,
2852
- generateId: generateId4,
2852
+ generateId: generateId3,
2853
2853
  currentDate,
2854
2854
  now: now2
2855
2855
  });
@@ -2871,7 +2871,7 @@ var DefaultStreamObjectResult = class {
2871
2871
  inputProviderMetadata,
2872
2872
  mode,
2873
2873
  onFinish,
2874
- generateId: generateId4,
2874
+ generateId: generateId3,
2875
2875
  currentDate,
2876
2876
  now: now2
2877
2877
  }) {
@@ -3072,7 +3072,7 @@ var DefaultStreamObjectResult = class {
3072
3072
  let accumulatedText = "";
3073
3073
  let textDelta = "";
3074
3074
  let response = {
3075
- id: generateId4(),
3075
+ id: generateId3(),
3076
3076
  timestamp: currentDate(),
3077
3077
  modelId: model.modelId
3078
3078
  };
@@ -3613,16 +3613,20 @@ function toResponseMessages({
3613
3613
  text: text2 = "",
3614
3614
  tools,
3615
3615
  toolCalls,
3616
- toolResults
3616
+ toolResults,
3617
+ messageId,
3618
+ generateMessageId
3617
3619
  }) {
3618
3620
  const responseMessages = [];
3619
3621
  responseMessages.push({
3620
3622
  role: "assistant",
3621
- content: [{ type: "text", text: text2 }, ...toolCalls]
3623
+ content: [{ type: "text", text: text2 }, ...toolCalls],
3624
+ id: messageId
3622
3625
  });
3623
3626
  if (toolResults.length > 0) {
3624
3627
  responseMessages.push({
3625
3628
  role: "tool",
3629
+ id: generateMessageId(),
3626
3630
  content: toolResults.map((toolResult) => {
3627
3631
  const tool2 = tools[toolResult.toolName];
3628
3632
  return (tool2 == null ? void 0 : tool2.experimental_toToolResultContent) != null ? {
@@ -3646,7 +3650,14 @@ function toResponseMessages({
3646
3650
  }
3647
3651
 
3648
3652
  // core/generate-text/generate-text.ts
3649
- var originalGenerateId3 = (0, import_provider_utils9.createIdGenerator)({ prefix: "aitxt", size: 24 });
3653
+ var originalGenerateId3 = (0, import_provider_utils9.createIdGenerator)({
3654
+ prefix: "aitxt",
3655
+ size: 24
3656
+ });
3657
+ var originalGenerateMessageId = (0, import_provider_utils9.createIdGenerator)({
3658
+ prefix: "msg",
3659
+ size: 24
3660
+ });
3650
3661
  async function generateText({
3651
3662
  model,
3652
3663
  tools,
@@ -3658,6 +3669,7 @@ async function generateText({
3658
3669
  abortSignal,
3659
3670
  headers,
3660
3671
  maxSteps = 1,
3672
+ experimental_generateMessageId: generateMessageId = originalGenerateMessageId,
3661
3673
  experimental_output: output,
3662
3674
  experimental_continueSteps: continueSteps = false,
3663
3675
  experimental_telemetry: telemetry,
@@ -3665,7 +3677,7 @@ async function generateText({
3665
3677
  experimental_activeTools: activeTools,
3666
3678
  experimental_repairToolCall: repairToolCall,
3667
3679
  _internal: {
3668
- generateId: generateId4 = originalGenerateId3,
3680
+ generateId: generateId3 = originalGenerateId3,
3669
3681
  currentDate = () => /* @__PURE__ */ new Date()
3670
3682
  } = {},
3671
3683
  onStepFinish,
@@ -3799,7 +3811,7 @@ async function generateText({
3799
3811
  headers
3800
3812
  });
3801
3813
  const responseData = {
3802
- id: (_b2 = (_a16 = result.response) == null ? void 0 : _a16.id) != null ? _b2 : generateId4(),
3814
+ id: (_b2 = (_a16 = result.response) == null ? void 0 : _a16.id) != null ? _b2 : generateId3(),
3803
3815
  timestamp: (_d2 = (_c2 = result.response) == null ? void 0 : _c2.timestamp) != null ? _d2 : currentDate(),
3804
3816
  modelId: (_f2 = (_e2 = result.response) == null ? void 0 : _e2.modelId) != null ? _f2 : model.modelId
3805
3817
  };
@@ -3889,7 +3901,9 @@ async function generateText({
3889
3901
  text: text2,
3890
3902
  tools: tools != null ? tools : {},
3891
3903
  toolCalls: currentToolCalls,
3892
- toolResults: currentToolResults
3904
+ toolResults: currentToolResults,
3905
+ messageId: generateMessageId(),
3906
+ generateMessageId
3893
3907
  })
3894
3908
  );
3895
3909
  }
@@ -3907,7 +3921,7 @@ async function generateText({
3907
3921
  ...currentModelResponse.response,
3908
3922
  headers: (_d = currentModelResponse.rawResponse) == null ? void 0 : _d.headers,
3909
3923
  // deep clone msgs to avoid mutating past messages in multi-step:
3910
- messages: JSON.parse(JSON.stringify(responseMessages))
3924
+ messages: structuredClone(responseMessages)
3911
3925
  },
3912
3926
  experimental_providerMetadata: currentModelResponse.providerMetadata,
3913
3927
  isContinued: nextStepType === "continue"
@@ -4196,6 +4210,11 @@ function smoothStream({
4196
4210
  var import_provider_utils11 = require("@ai-sdk/provider-utils");
4197
4211
  var import_ui_utils8 = require("@ai-sdk/ui-utils");
4198
4212
 
4213
+ // util/as-array.ts
4214
+ function asArray(value) {
4215
+ return value === void 0 ? [] : Array.isArray(value) ? value : [value];
4216
+ }
4217
+
4199
4218
  // core/util/merge-streams.ts
4200
4219
  function mergeStreams(stream1, stream2) {
4201
4220
  const reader1 = stream1.getReader();
@@ -4475,7 +4494,14 @@ function runToolsTransformation({
4475
4494
  }
4476
4495
 
4477
4496
  // core/generate-text/stream-text.ts
4478
- var originalGenerateId4 = (0, import_provider_utils11.createIdGenerator)({ prefix: "aitxt", size: 24 });
4497
+ var originalGenerateId4 = (0, import_provider_utils11.createIdGenerator)({
4498
+ prefix: "aitxt",
4499
+ size: 24
4500
+ });
4501
+ var originalGenerateMessageId2 = (0, import_provider_utils11.createIdGenerator)({
4502
+ prefix: "msg",
4503
+ size: 24
4504
+ });
4479
4505
  function streamText({
4480
4506
  model,
4481
4507
  tools,
@@ -4487,6 +4513,7 @@ function streamText({
4487
4513
  abortSignal,
4488
4514
  headers,
4489
4515
  maxSteps = 1,
4516
+ experimental_generateMessageId: generateMessageId = originalGenerateMessageId2,
4490
4517
  experimental_output: output,
4491
4518
  experimental_continueSteps: continueSteps = false,
4492
4519
  experimental_telemetry: telemetry,
@@ -4500,7 +4527,7 @@ function streamText({
4500
4527
  onStepFinish,
4501
4528
  _internal: {
4502
4529
  now: now2 = now,
4503
- generateId: generateId4 = originalGenerateId4,
4530
+ generateId: generateId3 = originalGenerateId4,
4504
4531
  currentDate = () => /* @__PURE__ */ new Date()
4505
4532
  } = {},
4506
4533
  ...settings
@@ -4518,7 +4545,7 @@ function streamText({
4518
4545
  tools,
4519
4546
  toolChoice,
4520
4547
  toolCallStreaming,
4521
- transforms: transform == null ? [] : Array.isArray(transform) ? transform : [transform],
4548
+ transforms: asArray(transform),
4522
4549
  activeTools,
4523
4550
  repairToolCall,
4524
4551
  maxSteps,
@@ -4530,7 +4557,8 @@ function streamText({
4530
4557
  onStepFinish,
4531
4558
  now: now2,
4532
4559
  currentDate,
4533
- generateId: generateId4
4560
+ generateId: generateId3,
4561
+ generateMessageId
4534
4562
  });
4535
4563
  }
4536
4564
  function createOutputTransformStream(output) {
@@ -4610,7 +4638,8 @@ var DefaultStreamTextResult = class {
4610
4638
  onStepFinish,
4611
4639
  now: now2,
4612
4640
  currentDate,
4613
- generateId: generateId4
4641
+ generateId: generateId3,
4642
+ generateMessageId
4614
4643
  }) {
4615
4644
  this.warningsPromise = new DelayedPromise();
4616
4645
  this.usagePromise = new DelayedPromise();
@@ -4635,7 +4664,7 @@ var DefaultStreamTextResult = class {
4635
4664
  let recordedContinuationText = "";
4636
4665
  let recordedFullText = "";
4637
4666
  const recordedResponse = {
4638
- id: generateId4(),
4667
+ id: generateId3(),
4639
4668
  timestamp: currentDate(),
4640
4669
  modelId: model.modelId,
4641
4670
  messages: []
@@ -4670,7 +4699,9 @@ var DefaultStreamTextResult = class {
4670
4699
  text: recordedContinuationText,
4671
4700
  tools: tools != null ? tools : {},
4672
4701
  toolCalls: recordedToolCalls,
4673
- toolResults: recordedToolResults
4702
+ toolResults: recordedToolResults,
4703
+ messageId: part.messageId,
4704
+ generateMessageId
4674
4705
  });
4675
4706
  const currentStep = recordedSteps.length;
4676
4707
  let nextStepType = "done";
@@ -4845,7 +4876,8 @@ var DefaultStreamTextResult = class {
4845
4876
  usage,
4846
4877
  stepType: stepType2,
4847
4878
  previousStepText,
4848
- hasLeadingWhitespace
4879
+ hasLeadingWhitespace,
4880
+ messageId
4849
4881
  }) {
4850
4882
  const promptFormat = responseMessages.length === 0 ? initialPrompt.type : "messages";
4851
4883
  const stepInputMessages = [
@@ -4953,7 +4985,7 @@ var DefaultStreamTextResult = class {
4953
4985
  let fullStepText = stepType2 === "continue" ? previousStepText : "";
4954
4986
  let stepLogProbs;
4955
4987
  let stepResponse = {
4956
- id: generateId4(),
4988
+ id: generateId3(),
4957
4989
  timestamp: currentDate(),
4958
4990
  modelId: model.modelId
4959
4991
  };
@@ -4985,6 +5017,12 @@ var DefaultStreamTextResult = class {
4985
5017
  doStreamSpan.setAttributes({
4986
5018
  "ai.response.msToFirstChunk": msToFirstChunk
4987
5019
  });
5020
+ controller.enqueue({
5021
+ type: "step-start",
5022
+ messageId,
5023
+ request: stepRequest,
5024
+ warnings: warnings != null ? warnings : []
5025
+ });
4988
5026
  }
4989
5027
  if (chunk.type === "text-delta" && chunk.textDelta.length === 0) {
4990
5028
  return;
@@ -5129,7 +5167,8 @@ var DefaultStreamTextResult = class {
5129
5167
  headers: rawResponse == null ? void 0 : rawResponse.headers
5130
5168
  },
5131
5169
  warnings,
5132
- isContinued: nextStepType === "continue"
5170
+ isContinued: nextStepType === "continue",
5171
+ messageId
5133
5172
  });
5134
5173
  const combinedUsage = addLanguageModelUsage(usage, stepUsage);
5135
5174
  if (nextStepType === "done") {
@@ -5162,7 +5201,9 @@ var DefaultStreamTextResult = class {
5162
5201
  text: stepText,
5163
5202
  tools: tools != null ? tools : {},
5164
5203
  toolCalls: stepToolCalls,
5165
- toolResults: stepToolResults
5204
+ toolResults: stepToolResults,
5205
+ messageId,
5206
+ generateMessageId
5166
5207
  })
5167
5208
  );
5168
5209
  }
@@ -5172,7 +5213,11 @@ var DefaultStreamTextResult = class {
5172
5213
  usage: combinedUsage,
5173
5214
  stepType: nextStepType,
5174
5215
  previousStepText: fullStepText,
5175
- hasLeadingWhitespace: hasWhitespaceSuffix
5216
+ hasLeadingWhitespace: hasWhitespaceSuffix,
5217
+ messageId: (
5218
+ // keep the same id when continuing a step:
5219
+ nextStepType === "continue" ? messageId : generateMessageId()
5220
+ )
5176
5221
  });
5177
5222
  }
5178
5223
  }
@@ -5190,7 +5235,8 @@ var DefaultStreamTextResult = class {
5190
5235
  },
5191
5236
  previousStepText: "",
5192
5237
  stepType: "initial",
5193
- hasLeadingWhitespace: false
5238
+ hasLeadingWhitespace: false,
5239
+ messageId: generateMessageId()
5194
5240
  });
5195
5241
  }
5196
5242
  }).catch((error) => {
@@ -5355,6 +5401,14 @@ var DefaultStreamTextResult = class {
5355
5401
  );
5356
5402
  break;
5357
5403
  }
5404
+ case "step-start": {
5405
+ controller.enqueue(
5406
+ (0, import_ui_utils8.formatDataStreamPart)("start_step", {
5407
+ messageId: chunk.messageId
5408
+ })
5409
+ );
5410
+ break;
5411
+ }
5358
5412
  case "step-finish": {
5359
5413
  controller.enqueue(
5360
5414
  (0, import_ui_utils8.formatDataStreamPart)("finish_step", {
@@ -5500,7 +5554,6 @@ var experimental_wrapLanguageModel = ({
5500
5554
  };
5501
5555
 
5502
5556
  // core/prompt/append-response-messages.ts
5503
- var import_provider_utils12 = require("@ai-sdk/provider-utils");
5504
5557
  function appendResponseMessages({
5505
5558
  messages,
5506
5559
  responseMessages
@@ -5510,17 +5563,10 @@ function appendResponseMessages({
5510
5563
  for (const message of responseMessages) {
5511
5564
  const role = message.role;
5512
5565
  switch (role) {
5513
- case "system":
5514
- case "user": {
5515
- throw new Error(
5516
- "AI response must not contain system or user messages: " + role
5517
- );
5518
- }
5519
5566
  case "assistant": {
5520
5567
  clonedMessages.push({
5521
5568
  role: "assistant",
5522
- id: (0, import_provider_utils12.generateId)(),
5523
- // generate an id for the message, will be overridden by the client
5569
+ id: message.id,
5524
5570
  createdAt: /* @__PURE__ */ new Date(),
5525
5571
  // generate a createdAt date for the message, will be overridden by the client
5526
5572
  // only include text in the content:
@@ -5554,6 +5600,10 @@ function appendResponseMessages({
5554
5600
  }
5555
5601
  break;
5556
5602
  }
5603
+ default: {
5604
+ const _exhaustiveCheck = role;
5605
+ throw new Error(`Unsupported message role: ${_exhaustiveCheck}`);
5606
+ }
5557
5607
  }
5558
5608
  }
5559
5609
  return clonedMessages;
@@ -6111,6 +6161,7 @@ var StreamData = class {
6111
6161
  cosineSimilarity,
6112
6162
  createDataStream,
6113
6163
  createDataStreamResponse,
6164
+ createIdGenerator,
6114
6165
  embed,
6115
6166
  embedMany,
6116
6167
  experimental_createProviderRegistry,