ai 5.0.263 → 5.0.264

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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # ai
2
2
 
3
+ ## 5.0.264
4
+
5
+ ### Patch Changes
6
+
7
+ - 594787e: fix(provider): preserve opaque file URI strings for provider serialization
8
+ - 7b19d17: fix(ai): prevent duplicate content types in chat transport requests
9
+ - 907e4c9: Fix streamed tool input callbacks firing out of order on newer Node.js versions by awaiting start and delta callbacks before invoking `onInputAvailable`.
10
+ - Updated dependencies [594787e]
11
+ - Updated dependencies [391ad4a]
12
+ - @ai-sdk/provider@2.0.5
13
+ - @ai-sdk/gateway@2.0.156
14
+ - @ai-sdk/provider-utils@3.0.38
15
+
3
16
  ## 5.0.263
4
17
 
5
18
  ### Patch Changes
package/dist/index.js CHANGED
@@ -816,7 +816,7 @@ function detectMediaType({
816
816
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
817
817
 
818
818
  // src/version.ts
819
- var VERSION = true ? "5.0.263" : "0.0.0-test";
819
+ var VERSION = true ? "5.0.264" : "0.0.0-test";
820
820
 
821
821
  // src/util/download/download.ts
822
822
  var download = async ({
@@ -1026,12 +1026,14 @@ function convertToLanguageModelMessage({
1026
1026
  const { data, mediaType } = convertToLanguageModelV2DataContent(
1027
1027
  part.data
1028
1028
  );
1029
+ const originalUrl = getOriginalUrl(part.data, data);
1029
1030
  return {
1030
1031
  type: "file",
1031
1032
  data,
1032
1033
  filename: part.filename,
1033
1034
  mediaType: mediaType != null ? mediaType : part.mediaType,
1034
- providerOptions
1035
+ providerOptions,
1036
+ ...originalUrl != null ? { originalUrl } : {}
1035
1037
  };
1036
1038
  }
1037
1039
  case "reasoning": {
@@ -1127,6 +1129,9 @@ async function downloadAssets(messages, download2, supportedUrls) {
1127
1129
  ).filter((file) => file != null)
1128
1130
  );
1129
1131
  }
1132
+ function getOriginalUrl(originalData, convertedData) {
1133
+ return typeof originalData === "string" && convertedData instanceof URL && convertedData.toString() !== originalData ? originalData : void 0;
1134
+ }
1130
1135
  function convertPartToLanguageModelPart(part, downloadedAssets) {
1131
1136
  var _a16;
1132
1137
  if (part.type === "text") {
@@ -1151,11 +1156,13 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1151
1156
  const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV2DataContent(originalData);
1152
1157
  let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;
1153
1158
  let data = convertedData;
1159
+ let originalUrl = getOriginalUrl(originalData, convertedData);
1154
1160
  if (data instanceof URL) {
1155
1161
  const downloadedFile = downloadedAssets[data.toString()];
1156
1162
  if (downloadedFile) {
1157
1163
  data = downloadedFile.data;
1158
1164
  mediaType != null ? mediaType : mediaType = downloadedFile.mediaType;
1165
+ originalUrl = void 0;
1159
1166
  }
1160
1167
  }
1161
1168
  switch (type) {
@@ -1169,7 +1176,8 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1169
1176
  // any image
1170
1177
  filename: void 0,
1171
1178
  data,
1172
- providerOptions: part.providerOptions
1179
+ providerOptions: part.providerOptions,
1180
+ ...originalUrl != null ? { originalUrl } : {}
1173
1181
  };
1174
1182
  }
1175
1183
  case "file": {
@@ -1181,7 +1189,8 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1181
1189
  mediaType,
1182
1190
  filename: part.filename,
1183
1191
  data,
1184
- providerOptions: part.providerOptions
1192
+ providerOptions: part.providerOptions,
1193
+ ...originalUrl != null ? { originalUrl } : {}
1185
1194
  };
1186
1195
  }
1187
1196
  }
@@ -4616,8 +4625,10 @@ function runToolsTransformation({
4616
4625
  }
4617
4626
  });
4618
4627
  }
4628
+ const activeToolCallToolNames = /* @__PURE__ */ new Map();
4619
4629
  const forwardStream = new TransformStream({
4620
4630
  async transform(chunk, controller) {
4631
+ var _a16, _b, _c, _d;
4621
4632
  const chunkType = chunk.type;
4622
4633
  switch (chunkType) {
4623
4634
  case "stream-start":
@@ -4627,9 +4638,6 @@ function runToolsTransformation({
4627
4638
  case "reasoning-start":
4628
4639
  case "reasoning-delta":
4629
4640
  case "reasoning-end":
4630
- case "tool-input-start":
4631
- case "tool-input-delta":
4632
- case "tool-input-end":
4633
4641
  case "source":
4634
4642
  case "response-metadata":
4635
4643
  case "error":
@@ -4637,6 +4645,36 @@ function runToolsTransformation({
4637
4645
  controller.enqueue(chunk);
4638
4646
  break;
4639
4647
  }
4648
+ case "tool-input-start": {
4649
+ activeToolCallToolNames.set(chunk.id, chunk.toolName);
4650
+ await ((_b = (_a16 = tools == null ? void 0 : tools[chunk.toolName]) == null ? void 0 : _a16.onInputStart) == null ? void 0 : _b.call(_a16, {
4651
+ toolCallId: chunk.id,
4652
+ messages,
4653
+ abortSignal,
4654
+ experimental_context
4655
+ }));
4656
+ controller.enqueue(chunk);
4657
+ break;
4658
+ }
4659
+ case "tool-input-delta": {
4660
+ const toolName = activeToolCallToolNames.get(chunk.id);
4661
+ if (toolName != null) {
4662
+ await ((_d = (_c = tools == null ? void 0 : tools[toolName]) == null ? void 0 : _c.onInputDelta) == null ? void 0 : _d.call(_c, {
4663
+ inputTextDelta: chunk.delta,
4664
+ toolCallId: chunk.id,
4665
+ messages,
4666
+ abortSignal,
4667
+ experimental_context
4668
+ }));
4669
+ }
4670
+ controller.enqueue(chunk);
4671
+ break;
4672
+ }
4673
+ case "tool-input-end": {
4674
+ activeToolCallToolNames.delete(chunk.id);
4675
+ controller.enqueue(chunk);
4676
+ break;
4677
+ }
4640
4678
  case "file": {
4641
4679
  controller.enqueue({
4642
4680
  type: "file",
@@ -5381,7 +5419,6 @@ var DefaultStreamTextResult = class {
5381
5419
  const stepToolCalls = [];
5382
5420
  const stepToolOutputs = [];
5383
5421
  let warnings;
5384
- const activeToolCallToolNames = {};
5385
5422
  let stepFinishReason = "unknown";
5386
5423
  let stepUsage = {
5387
5424
  inputTokens: void 0,
@@ -5499,16 +5536,7 @@ var DefaultStreamTextResult = class {
5499
5536
  break;
5500
5537
  }
5501
5538
  case "tool-input-start": {
5502
- activeToolCallToolNames[chunk.id] = chunk.toolName;
5503
5539
  const tool2 = stepToolSet == null ? void 0 : stepToolSet[chunk.toolName];
5504
- if ((tool2 == null ? void 0 : tool2.onInputStart) != null) {
5505
- await tool2.onInputStart({
5506
- toolCallId: chunk.id,
5507
- messages: stepInputMessages,
5508
- abortSignal,
5509
- experimental_context
5510
- });
5511
- }
5512
5540
  controller.enqueue({
5513
5541
  ...chunk,
5514
5542
  dynamic: (tool2 == null ? void 0 : tool2.type) === "dynamic"
@@ -5516,22 +5544,10 @@ var DefaultStreamTextResult = class {
5516
5544
  break;
5517
5545
  }
5518
5546
  case "tool-input-end": {
5519
- delete activeToolCallToolNames[chunk.id];
5520
5547
  controller.enqueue(chunk);
5521
5548
  break;
5522
5549
  }
5523
5550
  case "tool-input-delta": {
5524
- const toolName = activeToolCallToolNames[chunk.id];
5525
- const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolName];
5526
- if ((tool2 == null ? void 0 : tool2.onInputDelta) != null) {
5527
- await tool2.onInputDelta({
5528
- inputTextDelta: chunk.delta,
5529
- toolCallId: chunk.id,
5530
- messages: stepInputMessages,
5531
- abortSignal,
5532
- experimental_context
5533
- });
5534
- }
5535
5551
  controller.enqueue(chunk);
5536
5552
  break;
5537
5553
  }
@@ -9625,7 +9641,7 @@ var HttpChatTransport = class {
9625
9641
  const response = await fetch2(api, {
9626
9642
  method: "POST",
9627
9643
  headers: {
9628
- "Content-Type": "application/json",
9644
+ "content-type": "application/json",
9629
9645
  ...headers
9630
9646
  },
9631
9647
  body: JSON.stringify(body),