ai 4.1.19 → 4.1.21

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": "4.1.19",
3
+ "version": "4.1.21",
4
4
  "description": "AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -42,8 +42,8 @@
42
42
  "dependencies": {
43
43
  "@ai-sdk/provider": "1.0.7",
44
44
  "@ai-sdk/provider-utils": "2.1.6",
45
- "@ai-sdk/react": "1.1.9",
46
- "@ai-sdk/ui-utils": "1.1.9",
45
+ "@ai-sdk/react": "1.1.10",
46
+ "@ai-sdk/ui-utils": "1.1.10",
47
47
  "@opentelemetry/api": "1.9.0",
48
48
  "jsondiffpatch": "0.6.0"
49
49
  },
@@ -1,7 +1,7 @@
1
1
  import { LanguageModelV1FinishReason, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1 } from '@ai-sdk/provider';
2
2
  import { ReactNode } from 'react';
3
3
  import { z } from 'zod';
4
- import { ToolInvocation, Attachment } from '@ai-sdk/ui-utils';
4
+ import { Message } from '@ai-sdk/ui-utils';
5
5
 
6
6
  type AIAction<T = any, R = any> = (...args: T[]) => Promise<R>;
7
7
  type AIActions<T = any, R = any> = Record<string, AIAction<T, R>>;
@@ -480,13 +480,6 @@ It can be a user message, an assistant message, or a tool message.
480
480
  */
481
481
  type CoreMessage = CoreSystemMessage | CoreUserMessage | CoreAssistantMessage | CoreToolMessage;
482
482
 
483
- type UIMessage = {
484
- role: 'system' | 'user' | 'assistant' | 'data';
485
- content: string;
486
- toolInvocations?: ToolInvocation[];
487
- experimental_attachments?: Attachment[];
488
- };
489
-
490
483
  /**
491
484
  Prompt part of the AI function options.
492
485
  It contains a system message, a simple text prompt, or a list of messages.
@@ -503,7 +496,7 @@ type Prompt = {
503
496
  /**
504
497
  A list of messages. You can either use `prompt` or `messages` but not both.
505
498
  */
506
- messages?: Array<CoreMessage> | Array<UIMessage>;
499
+ messages?: Array<CoreMessage> | Array<Omit<Message, 'id'>>;
507
500
  };
508
501
 
509
502
  type Streamable = ReactNode | Promise<ReactNode>;
@@ -1,7 +1,7 @@
1
1
  import { LanguageModelV1FinishReason, LanguageModelV1CallWarning, LanguageModelV1ProviderMetadata, LanguageModelV1 } from '@ai-sdk/provider';
2
2
  import { ReactNode } from 'react';
3
3
  import { z } from 'zod';
4
- import { ToolInvocation, Attachment } from '@ai-sdk/ui-utils';
4
+ import { Message } from '@ai-sdk/ui-utils';
5
5
 
6
6
  type AIAction<T = any, R = any> = (...args: T[]) => Promise<R>;
7
7
  type AIActions<T = any, R = any> = Record<string, AIAction<T, R>>;
@@ -478,13 +478,6 @@ It can be a user message, an assistant message, or a tool message.
478
478
  */
479
479
  type CoreMessage = CoreSystemMessage | CoreUserMessage | CoreAssistantMessage | CoreToolMessage;
480
480
 
481
- type UIMessage = {
482
- role: 'system' | 'user' | 'assistant' | 'data';
483
- content: string;
484
- toolInvocations?: ToolInvocation[];
485
- experimental_attachments?: Attachment[];
486
- };
487
-
488
481
  /**
489
482
  Prompt part of the AI function options.
490
483
  It contains a system message, a simple text prompt, or a list of messages.
@@ -501,7 +494,7 @@ type Prompt = {
501
494
  /**
502
495
  A list of messages. You can either use `prompt` or `messages` but not both.
503
496
  */
504
- messages?: Array<CoreMessage> | Array<UIMessage>;
497
+ messages?: Array<CoreMessage> | Array<Omit<Message, 'id'>>;
505
498
  };
506
499
 
507
500
  type Streamable = ReactNode | Promise<ReactNode>;
@@ -976,13 +976,13 @@ _a6 = symbol6;
976
976
 
977
977
  // core/prompt/convert-to-core-messages.ts
978
978
  function convertToCoreMessages(messages, options) {
979
- var _a9;
979
+ var _a9, _b;
980
980
  const tools = (_a9 = options == null ? void 0 : options.tools) != null ? _a9 : {};
981
981
  const coreMessages = [];
982
982
  for (let i = 0; i < messages.length; i++) {
983
983
  const message = messages[i];
984
984
  const isLastMessage = i === messages.length - 1;
985
- const { role, content, toolInvocations, experimental_attachments } = message;
985
+ const { role, content, experimental_attachments } = message;
986
986
  switch (role) {
987
987
  case "system": {
988
988
  coreMessages.push({
@@ -1002,6 +1002,92 @@ function convertToCoreMessages(messages, options) {
1002
1002
  break;
1003
1003
  }
1004
1004
  case "assistant": {
1005
+ if (message.parts != null) {
1006
+ let processBlock2 = function() {
1007
+ coreMessages.push({
1008
+ role: "assistant",
1009
+ content: block.map((part) => {
1010
+ switch (part.type) {
1011
+ case "text":
1012
+ return {
1013
+ type: "text",
1014
+ text: part.text
1015
+ };
1016
+ default:
1017
+ return {
1018
+ type: "tool-call",
1019
+ toolCallId: part.toolInvocation.toolCallId,
1020
+ toolName: part.toolInvocation.toolName,
1021
+ args: part.toolInvocation.args
1022
+ };
1023
+ }
1024
+ })
1025
+ });
1026
+ const stepInvocations = block.filter(
1027
+ (part) => part.type === "tool-invocation"
1028
+ ).map((part) => part.toolInvocation);
1029
+ if (stepInvocations.length > 0) {
1030
+ coreMessages.push({
1031
+ role: "tool",
1032
+ content: stepInvocations.map(
1033
+ (toolInvocation) => {
1034
+ if (!("result" in toolInvocation)) {
1035
+ throw new MessageConversionError({
1036
+ originalMessage: message,
1037
+ message: "ToolInvocation must have a result: " + JSON.stringify(toolInvocation)
1038
+ });
1039
+ }
1040
+ const { toolCallId, toolName, result } = toolInvocation;
1041
+ const tool = tools[toolName];
1042
+ return (tool == null ? void 0 : tool.experimental_toToolResultContent) != null ? {
1043
+ type: "tool-result",
1044
+ toolCallId,
1045
+ toolName,
1046
+ result: tool.experimental_toToolResultContent(result),
1047
+ experimental_content: tool.experimental_toToolResultContent(result)
1048
+ } : {
1049
+ type: "tool-result",
1050
+ toolCallId,
1051
+ toolName,
1052
+ result
1053
+ };
1054
+ }
1055
+ )
1056
+ });
1057
+ }
1058
+ block = [];
1059
+ blockHasToolInvocations = false;
1060
+ currentStep++;
1061
+ };
1062
+ var processBlock = processBlock2;
1063
+ let currentStep = 0;
1064
+ let blockHasToolInvocations = false;
1065
+ let block = [];
1066
+ for (const part of message.parts) {
1067
+ switch (part.type) {
1068
+ case "reasoning":
1069
+ break;
1070
+ case "text": {
1071
+ if (blockHasToolInvocations) {
1072
+ processBlock2();
1073
+ }
1074
+ block.push(part);
1075
+ break;
1076
+ }
1077
+ case "tool-invocation": {
1078
+ if (((_b = part.toolInvocation.step) != null ? _b : 0) !== currentStep) {
1079
+ processBlock2();
1080
+ }
1081
+ block.push(part);
1082
+ blockHasToolInvocations = true;
1083
+ break;
1084
+ }
1085
+ }
1086
+ }
1087
+ processBlock2();
1088
+ break;
1089
+ }
1090
+ const toolInvocations = message.toolInvocations;
1005
1091
  if (toolInvocations == null || toolInvocations.length === 0) {
1006
1092
  coreMessages.push({ role: "assistant", content });
1007
1093
  break;