ai 3.3.32 → 3.3.34

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai",
3
- "version": "3.3.32",
3
+ "version": "3.3.34",
4
4
  "description": "Vercel AI SDK - The AI Toolkit for TypeScript and JavaScript",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -15,8 +15,7 @@
15
15
  "solid/dist/**/*",
16
16
  "prompts/dist/**/*",
17
17
  "rsc/dist/**/*",
18
- "google/dist/**/*",
19
- "mistral/dist/**/*",
18
+ "test/dist/**/*",
20
19
  "CHANGELOG.md"
21
20
  ],
22
21
  "exports": {
@@ -26,6 +25,12 @@
26
25
  "import": "./dist/index.mjs",
27
26
  "require": "./dist/index.js"
28
27
  },
28
+ "./test": {
29
+ "types": "./test/dist/index.d.ts",
30
+ "import": "./test/dist/index.mjs",
31
+ "module": "./test/dist/index.mjs",
32
+ "require": "./test/dist/index.js"
33
+ },
29
34
  "./rsc": {
30
35
  "types": "./rsc/dist/index.d.ts",
31
36
  "react-server": "./rsc/dist/rsc-server.mjs",
@@ -61,7 +66,7 @@
61
66
  "dependencies": {
62
67
  "@ai-sdk/provider": "0.0.23",
63
68
  "@ai-sdk/provider-utils": "1.0.18",
64
- "@ai-sdk/react": "0.0.55",
69
+ "@ai-sdk/react": "0.0.56",
65
70
  "@ai-sdk/solid": "0.0.44",
66
71
  "@ai-sdk/svelte": "0.0.46",
67
72
  "@ai-sdk/ui-utils": "0.0.41",
@@ -101,8 +106,8 @@
101
106
  "tsup": "^7.2.0",
102
107
  "typescript": "5.5.4",
103
108
  "zod": "3.23.8",
104
- "eslint-config-vercel-ai": "0.0.0",
105
- "@vercel/ai-tsconfig": "0.0.0"
109
+ "@vercel/ai-tsconfig": "0.0.0",
110
+ "eslint-config-vercel-ai": "0.0.0"
106
111
  },
107
112
  "peerDependencies": {
108
113
  "openai": "^4.42.0",
@@ -480,100 +480,98 @@ function convertToLanguageModelMessage(message, downloadedImages) {
480
480
  }
481
481
  return {
482
482
  role: "user",
483
- content: message.content.map(
484
- (part) => {
485
- var _a8, _b, _c;
486
- switch (part.type) {
487
- case "text": {
488
- return {
489
- type: "text",
490
- text: part.text,
491
- providerMetadata: part.experimental_providerMetadata
492
- };
493
- }
494
- case "image": {
495
- if (part.image instanceof URL) {
496
- if (downloadedImages == null) {
497
- return {
498
- type: "image",
499
- image: part.image,
500
- mimeType: part.mimeType,
501
- providerMetadata: part.experimental_providerMetadata
502
- };
503
- } else {
504
- const downloadedImage = downloadedImages[part.image.toString()];
505
- return {
506
- type: "image",
507
- image: downloadedImage.data,
508
- mimeType: (_a8 = part.mimeType) != null ? _a8 : downloadedImage.mimeType,
509
- providerMetadata: part.experimental_providerMetadata
510
- };
511
- }
483
+ content: message.content.map((part) => {
484
+ var _a8, _b, _c;
485
+ switch (part.type) {
486
+ case "text": {
487
+ return {
488
+ type: "text",
489
+ text: part.text,
490
+ providerMetadata: part.experimental_providerMetadata
491
+ };
492
+ }
493
+ case "image": {
494
+ if (part.image instanceof URL) {
495
+ if (downloadedImages == null) {
496
+ return {
497
+ type: "image",
498
+ image: part.image,
499
+ mimeType: part.mimeType,
500
+ providerMetadata: part.experimental_providerMetadata
501
+ };
502
+ } else {
503
+ const downloadedImage = downloadedImages[part.image.toString()];
504
+ return {
505
+ type: "image",
506
+ image: downloadedImage.data,
507
+ mimeType: (_a8 = part.mimeType) != null ? _a8 : downloadedImage.mimeType,
508
+ providerMetadata: part.experimental_providerMetadata
509
+ };
512
510
  }
513
- if (typeof part.image === "string") {
514
- try {
515
- const url = new URL(part.image);
516
- switch (url.protocol) {
517
- case "http:":
518
- case "https:": {
519
- if (downloadedImages == null) {
520
- return {
521
- type: "image",
522
- image: url,
523
- mimeType: part.mimeType,
524
- providerMetadata: part.experimental_providerMetadata
525
- };
526
- } else {
527
- const downloadedImage = downloadedImages[part.image];
528
- return {
529
- type: "image",
530
- image: downloadedImage.data,
531
- mimeType: (_b = part.mimeType) != null ? _b : downloadedImage.mimeType,
532
- providerMetadata: part.experimental_providerMetadata
533
- };
534
- }
511
+ }
512
+ if (typeof part.image === "string") {
513
+ try {
514
+ const url = new URL(part.image);
515
+ switch (url.protocol) {
516
+ case "http:":
517
+ case "https:": {
518
+ if (downloadedImages == null) {
519
+ return {
520
+ type: "image",
521
+ image: url,
522
+ mimeType: part.mimeType,
523
+ providerMetadata: part.experimental_providerMetadata
524
+ };
525
+ } else {
526
+ const downloadedImage = downloadedImages[part.image];
527
+ return {
528
+ type: "image",
529
+ image: downloadedImage.data,
530
+ mimeType: (_b = part.mimeType) != null ? _b : downloadedImage.mimeType,
531
+ providerMetadata: part.experimental_providerMetadata
532
+ };
535
533
  }
536
- case "data:": {
537
- try {
538
- const [header, base64Content] = part.image.split(",");
539
- const mimeType = header.split(";")[0].split(":")[1];
540
- if (mimeType == null || base64Content == null) {
541
- throw new Error("Invalid data URL format");
542
- }
543
- return {
544
- type: "image",
545
- image: convertDataContentToUint8Array(base64Content),
546
- mimeType,
547
- providerMetadata: part.experimental_providerMetadata
548
- };
549
- } catch (error) {
550
- throw new Error(
551
- `Error processing data URL: ${getErrorMessage(
552
- message
553
- )}`
554
- );
534
+ }
535
+ case "data:": {
536
+ try {
537
+ const [header, base64Content] = part.image.split(",");
538
+ const mimeType = header.split(";")[0].split(":")[1];
539
+ if (mimeType == null || base64Content == null) {
540
+ throw new Error("Invalid data URL format");
555
541
  }
556
- }
557
- default: {
542
+ return {
543
+ type: "image",
544
+ image: convertDataContentToUint8Array(base64Content),
545
+ mimeType,
546
+ providerMetadata: part.experimental_providerMetadata
547
+ };
548
+ } catch (error) {
558
549
  throw new Error(
559
- `Unsupported URL protocol: ${url.protocol}`
550
+ `Error processing data URL: ${getErrorMessage(
551
+ message
552
+ )}`
560
553
  );
561
554
  }
562
555
  }
563
- } catch (_ignored) {
556
+ default: {
557
+ throw new Error(
558
+ `Unsupported URL protocol: ${url.protocol}`
559
+ );
560
+ }
564
561
  }
562
+ } catch (_ignored) {
565
563
  }
566
- const imageUint8 = convertDataContentToUint8Array(part.image);
567
- return {
568
- type: "image",
569
- image: imageUint8,
570
- mimeType: (_c = part.mimeType) != null ? _c : detectImageMimeType(imageUint8),
571
- providerMetadata: part.experimental_providerMetadata
572
- };
573
564
  }
565
+ const imageUint8 = convertDataContentToUint8Array(part.image);
566
+ return {
567
+ type: "image",
568
+ image: imageUint8,
569
+ mimeType: (_c = part.mimeType) != null ? _c : detectImageMimeType(imageUint8),
570
+ providerMetadata: part.experimental_providerMetadata
571
+ };
574
572
  }
575
573
  }
576
- ),
574
+ }).filter((part) => part.type !== "text" || part.text !== ""),
577
575
  providerMetadata: message.experimental_providerMetadata
578
576
  };
579
577
  }
@@ -1322,6 +1320,7 @@ async function streamUI({
1322
1320
  const ui = createStreamableUI(initial);
1323
1321
  const textRender = text || defaultTextRenderer;
1324
1322
  let finished;
1323
+ let finishEvent = null;
1325
1324
  async function render2({
1326
1325
  args,
1327
1326
  renderer,
@@ -1440,13 +1439,13 @@ async function streamUI({
1440
1439
  throw value.error;
1441
1440
  }
1442
1441
  case "finish": {
1443
- onFinish == null ? void 0 : onFinish({
1442
+ finishEvent = {
1444
1443
  finishReason: value.finishReason,
1445
1444
  usage: calculateLanguageModelUsage(value.usage),
1446
- value: ui.value,
1447
1445
  warnings: result.warnings,
1448
1446
  rawResponse: result.rawResponse
1449
- });
1447
+ };
1448
+ break;
1450
1449
  }
1451
1450
  }
1452
1451
  }
@@ -1459,6 +1458,12 @@ async function streamUI({
1459
1458
  });
1460
1459
  }
1461
1460
  await finished;
1461
+ if (finishEvent && onFinish) {
1462
+ await onFinish({
1463
+ ...finishEvent,
1464
+ value: ui.value
1465
+ });
1466
+ }
1462
1467
  } catch (error) {
1463
1468
  ui.error(error);
1464
1469
  }