@librechat/agents 3.2.0 → 3.2.2

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/esm/main.mjs CHANGED
@@ -79,6 +79,7 @@ export { BaseCheckpointSaver, Command, INTERRUPT, MemorySaver, interrupt, isInte
79
79
  export { CustomOpenAIClient } from './llm/openai/index.mjs';
80
80
  export { ChatOpenRouter } from './llm/openrouter/index.mjs';
81
81
  export { getChatModelClass } from './llm/providers.mjs';
82
+ export { FakeChatModel, createFakeStreamingLLM } from './llm/fake.mjs';
82
83
  export { initializeModel } from './llm/init.mjs';
83
84
  export { attemptInvoke, tryFallbackProviders } from './llm/invoke.mjs';
84
85
  export { getMaxOutputTokensKey, isThinkingEnabled } from './llm/request.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"main.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"main.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { ToolMessage, AIMessageChunk, AIMessage, HumanMessage } from '@langchain/core/messages';
2
- import { Providers } from '../common/enum.mjs';
2
+ import { Providers, ContentTypes } from '../common/enum.mjs';
3
3
  import { toLangChainContent } from './langchain.mjs';
4
4
 
5
5
  // src/messages.ts
@@ -92,6 +92,57 @@ function reduceBlocks(blocks) {
92
92
  }
93
93
  return reduced;
94
94
  }
95
+ function getReasoningText(value) {
96
+ if (typeof value === 'string') {
97
+ return value !== '' ? value : undefined;
98
+ }
99
+ const summaryText = value?.summary
100
+ ?.map((summary) => summary.text ?? '')
101
+ .filter((text) => text !== '')
102
+ .join('');
103
+ return summaryText != null && summaryText !== '' ? summaryText : undefined;
104
+ }
105
+ function getReasoningDetailsText(value) {
106
+ if (!Array.isArray(value)) {
107
+ return undefined;
108
+ }
109
+ const reasoningText = value
110
+ .filter((detail) => detail.type === 'reasoning.text')
111
+ .map((detail) => detail.text ?? '')
112
+ .filter((text) => text !== '')
113
+ .join('');
114
+ return reasoningText !== '' ? reasoningText : undefined;
115
+ }
116
+ function getAdditionalReasoningContent(message) {
117
+ const additionalKwargs = message.additional_kwargs;
118
+ if (additionalKwargs == null) {
119
+ return undefined;
120
+ }
121
+ const reasoningContent = getReasoningText(additionalKwargs.reasoning_content);
122
+ if (reasoningContent != null) {
123
+ return reasoningContent;
124
+ }
125
+ const reasoning = getReasoningText(additionalKwargs.reasoning);
126
+ if (reasoning != null) {
127
+ return reasoning;
128
+ }
129
+ return getReasoningDetailsText(additionalKwargs.reasoning_details);
130
+ }
131
+ function hasReasoningContent(content) {
132
+ if (!Array.isArray(content)) {
133
+ return false;
134
+ }
135
+ return content.some((item) => {
136
+ if (typeof item !== 'object' || !('type' in item)) {
137
+ return false;
138
+ }
139
+ return (item.type === ContentTypes.THINK ||
140
+ item.type === ContentTypes.THINKING ||
141
+ item.type === ContentTypes.REASONING ||
142
+ item.type === ContentTypes.REASONING_CONTENT ||
143
+ item.type === 'redacted_thinking');
144
+ });
145
+ }
95
146
  function modifyDeltaProperties(provider, obj) {
96
147
  if (!obj || typeof obj !== 'object')
97
148
  return obj;
@@ -207,23 +258,50 @@ function formatAnthropicMessage(message) {
207
258
  }
208
259
  function convertMessagesToContent(messages) {
209
260
  const processedContent = [];
261
+ const addToolCallBoundary = () => {
262
+ processedContent.push({ type: ContentTypes.TEXT, text: '' });
263
+ return processedContent.length - 1;
264
+ };
210
265
  const addContentPart = (message) => {
211
266
  const content = message?.lc_kwargs.content != null
212
267
  ? message.lc_kwargs.content
213
268
  : message?.content;
214
269
  if (content === undefined) {
215
- return;
270
+ return undefined;
271
+ }
272
+ const reasoningContent = message?._getType() === 'ai' && !hasReasoningContent(content)
273
+ ? getAdditionalReasoningContent(message)
274
+ : undefined;
275
+ if (reasoningContent != null) {
276
+ processedContent.push({
277
+ type: ContentTypes.THINK,
278
+ think: reasoningContent,
279
+ });
216
280
  }
217
281
  if (typeof content === 'string') {
282
+ if (content === '') {
283
+ return undefined;
284
+ }
218
285
  processedContent.push({
219
- type: 'text',
286
+ type: ContentTypes.TEXT,
220
287
  text: content,
221
288
  });
289
+ return processedContent.length - 1;
222
290
  }
223
291
  else if (Array.isArray(content)) {
224
- const filteredContent = content.filter((item) => item != null && item.type !== 'tool_use');
225
- processedContent.push(...filteredContent);
292
+ let textContentIndex;
293
+ for (const item of content) {
294
+ if (item == null || item.type === 'tool_use') {
295
+ continue;
296
+ }
297
+ processedContent.push(item);
298
+ if (item.type === ContentTypes.TEXT) {
299
+ textContentIndex = processedContent.length - 1;
300
+ }
301
+ }
302
+ return textContentIndex;
226
303
  }
304
+ return undefined;
227
305
  };
228
306
  let currentAIMessageIndex = -1;
229
307
  const toolCallMap = new Map();
@@ -239,8 +317,8 @@ function convertMessagesToContent(messages) {
239
317
  }
240
318
  toolCallMap.set(tool_call.id, tool_call);
241
319
  }
242
- addContentPart(message);
243
- currentAIMessageIndex = processedContent.length - 1;
320
+ currentAIMessageIndex =
321
+ addContentPart(message) ?? addToolCallBoundary();
244
322
  continue;
245
323
  }
246
324
  else if (messageType === 'tool' &&
@@ -269,6 +347,9 @@ function convertMessagesToContent(messages) {
269
347
  }
270
348
  return processedContent;
271
349
  }
350
+ function stringifyToolMessageContent(content) {
351
+ return content == null ? '' : String(content);
352
+ }
272
353
  function formatAnthropicArtifactContent(messages) {
273
354
  const lastMessage = messages[messages.length - 1];
274
355
  if (!(lastMessage instanceof ToolMessage))
@@ -298,7 +379,12 @@ function formatAnthropicArtifactContent(messages) {
298
379
  Array.isArray(msg.artifact?.content)) {
299
380
  const base = Array.isArray(msg.content)
300
381
  ? msg.content
301
- : [{ type: 'text', text: String(msg.content ?? '') }];
382
+ : [
383
+ {
384
+ type: ContentTypes.TEXT,
385
+ text: stringifyToolMessageContent(msg.content),
386
+ },
387
+ ];
302
388
  msg.content = base.concat(msg.artifact.content);
303
389
  }
304
390
  }
@@ -1 +1 @@
1
- {"version":3,"file":"core.mjs","sources":["../../../src/messages/core.ts"],"sourcesContent":["// src/messages.ts\nimport {\n AIMessage,\n BaseMessage,\n ToolMessage,\n HumanMessage,\n AIMessageChunk,\n} from '@langchain/core/messages';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type * as t from '@/types';\nimport { Providers } from '@/common';\nimport { toLangChainContent } from './langchain';\n\nexport function getConverseOverrideMessage({\n userMessage,\n lastMessageX,\n lastMessageY,\n}: {\n userMessage: string[];\n lastMessageX: AIMessageChunk | null;\n lastMessageY: ToolMessage;\n}): HumanMessage {\n const content = `\nUser: ${userMessage[1]}\n\n---\n# YOU HAVE ALREADY RESPONDED TO THE LATEST USER MESSAGE:\n\n# Observations:\n- ${lastMessageX?.content}\n\n# Tool Calls:\n- ${lastMessageX?.tool_calls?.join('\\n- ')}\n\n# Tool Responses:\n- ${lastMessageY.content}\n`;\n\n return new HumanMessage(content);\n}\n\nconst _allowedTypes = ['image_url', 'text', 'tool_use', 'tool_result'];\nconst allowedTypesByProvider: Record<string, string[]> = {\n default: _allowedTypes,\n [Providers.ANTHROPIC]: [\n ..._allowedTypes,\n 'thinking',\n 'redacted_thinking',\n 'server_tool_use',\n 'web_search_tool_result',\n 'web_search_result',\n ],\n [Providers.BEDROCK]: [..._allowedTypes, 'reasoning_content'],\n [Providers.OPENAI]: _allowedTypes,\n};\n\nconst modifyContent = ({\n provider,\n messageType,\n content,\n}: {\n provider: Providers;\n messageType: string;\n content: t.ExtendedMessageContent[];\n}): (t.ExtendedMessageContent | null)[] => {\n const allowedTypes =\n allowedTypesByProvider[provider] ?? allowedTypesByProvider.default;\n return content.map((item: t.ExtendedMessageContent | null) => {\n if (\n item &&\n typeof item === 'object' &&\n 'type' in item &&\n item.type != null &&\n item.type\n ) {\n let newType = item.type;\n if (newType.endsWith('_delta')) {\n newType = newType.replace('_delta', '');\n }\n if (!allowedTypes.includes(newType)) {\n newType = 'text';\n }\n\n /* Handle the edge case for empty object 'tool_use' input in AI messages */\n if (\n messageType === 'ai' &&\n newType === 'tool_use' &&\n 'input' in item &&\n item.input === ''\n ) {\n return { ...item, type: newType, input: '{}' };\n }\n\n return { ...item, type: newType };\n }\n return item;\n });\n};\n\ntype ContentBlock =\n | Partial<t.BedrockReasoningContentText>\n | t.MessageDeltaUpdate;\n\nfunction reduceBlocks(blocks: ContentBlock[]): ContentBlock[] {\n const reduced: ContentBlock[] = [];\n\n for (const block of blocks) {\n const lastBlock = reduced[reduced.length - 1] as ContentBlock | undefined;\n\n // Merge consecutive 'reasoning_content'\n if (\n block.type === 'reasoning_content' &&\n lastBlock?.type === 'reasoning_content'\n ) {\n // append text if exists\n if (block.reasoningText?.text != null && block.reasoningText.text) {\n (\n lastBlock.reasoningText as t.BedrockReasoningContentText['reasoningText']\n ).text =\n (lastBlock.reasoningText?.text ?? '') + block.reasoningText.text;\n }\n // preserve the signature if exists\n if (\n block.reasoningText?.signature != null &&\n block.reasoningText.signature\n ) {\n (\n lastBlock.reasoningText as t.BedrockReasoningContentText['reasoningText']\n ).signature = block.reasoningText.signature;\n }\n }\n // Merge consecutive 'text'\n else if (block.type === 'text' && lastBlock?.type === 'text') {\n lastBlock.text += block.text;\n }\n // add a new block as it's a different type or first element\n else {\n // deep copy to avoid mutation of original\n reduced.push(JSON.parse(JSON.stringify(block)));\n }\n }\n\n return reduced;\n}\n\nexport function modifyDeltaProperties(\n provider: Providers,\n obj?: AIMessageChunk\n): AIMessageChunk | undefined {\n if (!obj || typeof obj !== 'object') return obj;\n\n const messageType = (obj as Partial<AIMessageChunk>)._getType\n ? obj._getType()\n : '';\n\n if (provider === Providers.BEDROCK && Array.isArray(obj.content)) {\n obj.content = toLangChainContent(\n reduceBlocks(obj.content as ContentBlock[])\n );\n }\n if (Array.isArray(obj.content)) {\n obj.content = toLangChainContent(\n modifyContent({\n provider,\n messageType,\n content: obj.content as t.ExtendedMessageContent[],\n }) as t.MessageContentComplex[]\n );\n }\n if (\n (obj as Partial<AIMessageChunk>).lc_kwargs &&\n Array.isArray(obj.lc_kwargs.content)\n ) {\n if (provider === Providers.BEDROCK) {\n obj.lc_kwargs.content = reduceBlocks(\n obj.lc_kwargs.content as ContentBlock[]\n );\n }\n obj.lc_kwargs.content = modifyContent({\n provider,\n messageType,\n content: obj.lc_kwargs.content,\n });\n }\n return obj;\n}\n\nexport function formatAnthropicMessage(message: AIMessageChunk): AIMessage {\n if (!message.tool_calls || message.tool_calls.length === 0) {\n return new AIMessage({ content: toLangChainContent(message.content) });\n }\n\n const toolCallMap = new Map(message.tool_calls.map((tc) => [tc.id, tc]));\n let formattedContent: string | t.ExtendedMessageContent[];\n\n if (Array.isArray(message.content)) {\n formattedContent = message.content.reduce<t.ExtendedMessageContent[]>(\n (acc, item) => {\n if (typeof item === 'object') {\n const extendedItem = item as t.ExtendedMessageContent;\n if (\n extendedItem.type === 'text' &&\n extendedItem.text != null &&\n extendedItem.text\n ) {\n acc.push({ type: 'text', text: extendedItem.text });\n } else if (\n extendedItem.type === 'tool_use' &&\n extendedItem.id != null &&\n extendedItem.id\n ) {\n const toolCall = toolCallMap.get(extendedItem.id);\n if (toolCall) {\n acc.push({\n type: 'tool_use',\n id: extendedItem.id,\n name: toolCall.name,\n input: toolCall.args as unknown as string,\n });\n }\n } else if (\n 'input' in extendedItem &&\n extendedItem.input != null &&\n extendedItem.input\n ) {\n try {\n const parsedInput = JSON.parse(extendedItem.input);\n const toolCall = message.tool_calls?.find(\n (tc) => tc.args.input === parsedInput.input\n );\n if (toolCall) {\n acc.push({\n type: 'tool_use',\n id: toolCall.id,\n name: toolCall.name,\n input: toolCall.args as unknown as string,\n });\n }\n } catch {\n if (extendedItem.input) {\n acc.push({ type: 'text', text: extendedItem.input });\n }\n }\n }\n } else if (typeof item === 'string') {\n acc.push({ type: 'text', text: item });\n }\n return acc;\n },\n []\n );\n } else if (typeof message.content === 'string') {\n formattedContent = message.content;\n } else {\n formattedContent = [];\n }\n\n // const formattedToolCalls: ToolCall[] = message.tool_calls.map(toolCall => ({\n // id: toolCall.id ?? '',\n // name: toolCall.name,\n // args: toolCall.args,\n // type: 'tool_call',\n // }));\n\n const formattedToolCalls: t.AgentToolCall[] = message.tool_calls.map(\n (toolCall) => ({\n id: toolCall.id ?? '',\n type: 'function',\n function: {\n name: toolCall.name,\n arguments: toolCall.args,\n },\n })\n );\n\n return new AIMessage({\n content: toLangChainContent(formattedContent),\n tool_calls: formattedToolCalls as ToolCall[],\n additional_kwargs: {\n ...message.additional_kwargs,\n },\n });\n}\n\nexport function convertMessagesToContent(\n messages: BaseMessage[]\n): t.MessageContentComplex[] {\n const processedContent: t.MessageContentComplex[] = [];\n\n const addContentPart = (message: BaseMessage | null): void => {\n const content =\n message?.lc_kwargs.content != null\n ? message.lc_kwargs.content\n : message?.content;\n if (content === undefined) {\n return;\n }\n if (typeof content === 'string') {\n processedContent.push({\n type: 'text',\n text: content,\n });\n } else if (Array.isArray(content)) {\n const filteredContent = content.filter(\n (item) => item != null && item.type !== 'tool_use'\n );\n processedContent.push(...filteredContent);\n }\n };\n\n let currentAIMessageIndex = -1;\n const toolCallMap = new Map<string, t.CustomToolCall>();\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i] as BaseMessage | null;\n const messageType = message?._getType();\n\n if (\n messageType === 'ai' &&\n ((message as AIMessage).tool_calls?.length ?? 0) > 0\n ) {\n const tool_calls = (message as AIMessage).tool_calls || [];\n for (const tool_call of tool_calls) {\n if (tool_call.id == null || !tool_call.id) {\n continue;\n }\n\n toolCallMap.set(tool_call.id, tool_call);\n }\n\n addContentPart(message);\n currentAIMessageIndex = processedContent.length - 1;\n continue;\n } else if (\n messageType === 'tool' &&\n (message as ToolMessage).tool_call_id\n ) {\n const id = (message as ToolMessage).tool_call_id;\n const output = (message as ToolMessage).content;\n const tool_call = toolCallMap.get(id);\n if (currentAIMessageIndex === -1) {\n processedContent.push({ type: 'text', text: '' });\n currentAIMessageIndex = processedContent.length - 1;\n }\n const contentPart = processedContent[currentAIMessageIndex];\n processedContent.push({\n type: 'tool_call',\n tool_call: Object.assign({}, tool_call, { output }),\n });\n const tool_call_ids = contentPart.tool_call_ids || [];\n tool_call_ids.push(id);\n contentPart.tool_call_ids = tool_call_ids;\n continue;\n } else if (messageType !== 'ai') {\n continue;\n }\n\n addContentPart(message);\n }\n\n return processedContent;\n}\n\nexport function formatAnthropicArtifactContent(messages: BaseMessage[]): void {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return;\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return;\n\n // Build tool call ID set and merge artifact content in a single forward pass.\n const message = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIdSet = new Set<string>();\n if (message.tool_calls) {\n for (const tc of message.tool_calls) {\n if (tc.id != null) {\n toolCallIdSet.add(tc.id);\n }\n }\n }\n\n for (let j = latestAIParentIndex + 1; j < messages.length; j++) {\n const msg = messages[j];\n if (\n msg instanceof ToolMessage &&\n toolCallIdSet.has(msg.tool_call_id) &&\n msg.artifact != null &&\n Array.isArray(msg.artifact?.content)\n ) {\n const base = Array.isArray(msg.content)\n ? msg.content\n : [{ type: 'text' as const, text: String(msg.content ?? '') }];\n msg.content = base.concat(msg.artifact.content);\n }\n }\n}\n\nexport function formatArtifactPayload(messages: BaseMessage[]): void {\n const lastMessageY = messages[messages.length - 1];\n if (!(lastMessageY instanceof ToolMessage)) return;\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessageY.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return;\n\n // Single pass: collect relevant tool messages with artifacts and aggregate\n const aggregatedContent: t.MessageContentComplex[] = [];\n\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (\n !(msg instanceof ToolMessage) ||\n !Array.isArray(msg.artifact?.content)\n ) {\n continue;\n }\n let currentContent = msg.content;\n if (!Array.isArray(currentContent)) {\n currentContent = [{ type: 'text', text: msg.content }];\n }\n aggregatedContent.push(...(currentContent as t.MessageContentComplex[]));\n msg.content =\n 'Tool response is included in the next message as a Human message';\n aggregatedContent.push(...msg.artifact.content);\n }\n\n if (aggregatedContent.length > 0) {\n messages.push(\n new HumanMessage({ content: toLangChainContent(aggregatedContent) })\n );\n }\n}\n\nexport function findLastIndex<T>(\n array: T[],\n predicate: (value: T) => boolean\n): number {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) {\n return i;\n }\n }\n return -1;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.mjs","sources":["../../../src/messages/core.ts"],"sourcesContent":["// src/messages.ts\nimport {\n AIMessage,\n BaseMessage,\n ToolMessage,\n HumanMessage,\n AIMessageChunk,\n} from '@langchain/core/messages';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type * as t from '@/types';\nimport { ContentTypes, Providers } from '@/common';\nimport { toLangChainContent } from './langchain';\n\ntype ReasoningSummary = { summary?: Array<{ text?: string }> };\ntype ReasoningDetail = { type?: string; text?: string };\ntype ReasoningAdditionalKwargs = {\n reasoning_content?: string | Partial<ReasoningSummary> | null;\n reasoning?: string | Partial<ReasoningSummary> | null;\n reasoning_details?: ReasoningDetail[] | null;\n};\n\nexport function getConverseOverrideMessage({\n userMessage,\n lastMessageX,\n lastMessageY,\n}: {\n userMessage: string[];\n lastMessageX: AIMessageChunk | null;\n lastMessageY: ToolMessage;\n}): HumanMessage {\n const content = `\nUser: ${userMessage[1]}\n\n---\n# YOU HAVE ALREADY RESPONDED TO THE LATEST USER MESSAGE:\n\n# Observations:\n- ${lastMessageX?.content}\n\n# Tool Calls:\n- ${lastMessageX?.tool_calls?.join('\\n- ')}\n\n# Tool Responses:\n- ${lastMessageY.content}\n`;\n\n return new HumanMessage(content);\n}\n\nconst _allowedTypes = ['image_url', 'text', 'tool_use', 'tool_result'];\nconst allowedTypesByProvider: Record<string, string[]> = {\n default: _allowedTypes,\n [Providers.ANTHROPIC]: [\n ..._allowedTypes,\n 'thinking',\n 'redacted_thinking',\n 'server_tool_use',\n 'web_search_tool_result',\n 'web_search_result',\n ],\n [Providers.BEDROCK]: [..._allowedTypes, 'reasoning_content'],\n [Providers.OPENAI]: _allowedTypes,\n};\n\nconst modifyContent = ({\n provider,\n messageType,\n content,\n}: {\n provider: Providers;\n messageType: string;\n content: t.ExtendedMessageContent[];\n}): (t.ExtendedMessageContent | null)[] => {\n const allowedTypes =\n allowedTypesByProvider[provider] ?? allowedTypesByProvider.default;\n return content.map((item: t.ExtendedMessageContent | null) => {\n if (\n item &&\n typeof item === 'object' &&\n 'type' in item &&\n item.type != null &&\n item.type\n ) {\n let newType = item.type;\n if (newType.endsWith('_delta')) {\n newType = newType.replace('_delta', '');\n }\n if (!allowedTypes.includes(newType)) {\n newType = 'text';\n }\n\n /* Handle the edge case for empty object 'tool_use' input in AI messages */\n if (\n messageType === 'ai' &&\n newType === 'tool_use' &&\n 'input' in item &&\n item.input === ''\n ) {\n return { ...item, type: newType, input: '{}' };\n }\n\n return { ...item, type: newType };\n }\n return item;\n });\n};\n\ntype ContentBlock =\n | Partial<t.BedrockReasoningContentText>\n | t.MessageDeltaUpdate;\n\nfunction reduceBlocks(blocks: ContentBlock[]): ContentBlock[] {\n const reduced: ContentBlock[] = [];\n\n for (const block of blocks) {\n const lastBlock = reduced[reduced.length - 1] as ContentBlock | undefined;\n\n // Merge consecutive 'reasoning_content'\n if (\n block.type === 'reasoning_content' &&\n lastBlock?.type === 'reasoning_content'\n ) {\n // append text if exists\n if (block.reasoningText?.text != null && block.reasoningText.text) {\n (\n lastBlock.reasoningText as t.BedrockReasoningContentText['reasoningText']\n ).text =\n (lastBlock.reasoningText?.text ?? '') + block.reasoningText.text;\n }\n // preserve the signature if exists\n if (\n block.reasoningText?.signature != null &&\n block.reasoningText.signature\n ) {\n (\n lastBlock.reasoningText as t.BedrockReasoningContentText['reasoningText']\n ).signature = block.reasoningText.signature;\n }\n }\n // Merge consecutive 'text'\n else if (block.type === 'text' && lastBlock?.type === 'text') {\n lastBlock.text += block.text;\n }\n // add a new block as it's a different type or first element\n else {\n // deep copy to avoid mutation of original\n reduced.push(JSON.parse(JSON.stringify(block)));\n }\n }\n\n return reduced;\n}\n\nfunction getReasoningText(\n value: string | Partial<ReasoningSummary> | null | undefined\n): string | undefined {\n if (typeof value === 'string') {\n return value !== '' ? value : undefined;\n }\n const summaryText = value?.summary\n ?.map((summary) => summary.text ?? '')\n .filter((text) => text !== '')\n .join('');\n return summaryText != null && summaryText !== '' ? summaryText : undefined;\n}\n\nfunction getReasoningDetailsText(\n value: ReasoningDetail[] | null | undefined\n): string | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const reasoningText = value\n .filter((detail) => detail.type === 'reasoning.text')\n .map((detail) => detail.text ?? '')\n .filter((text) => text !== '')\n .join('');\n return reasoningText !== '' ? reasoningText : undefined;\n}\n\nfunction getAdditionalReasoningContent(\n message: BaseMessage\n): string | undefined {\n const additionalKwargs =\n message.additional_kwargs as ReasoningAdditionalKwargs | undefined;\n if (additionalKwargs == null) {\n return undefined;\n }\n\n const reasoningContent = getReasoningText(\n additionalKwargs.reasoning_content\n );\n if (reasoningContent != null) {\n return reasoningContent;\n }\n\n const reasoning = getReasoningText(additionalKwargs.reasoning);\n if (reasoning != null) {\n return reasoning;\n }\n\n return getReasoningDetailsText(additionalKwargs.reasoning_details);\n}\n\nfunction hasReasoningContent(content: BaseMessage['content']): boolean {\n if (!Array.isArray(content)) {\n return false;\n }\n return content.some((item) => {\n if (typeof item !== 'object' || !('type' in item)) {\n return false;\n }\n return (\n item.type === ContentTypes.THINK ||\n item.type === ContentTypes.THINKING ||\n item.type === ContentTypes.REASONING ||\n item.type === ContentTypes.REASONING_CONTENT ||\n item.type === 'redacted_thinking'\n );\n });\n}\n\nexport function modifyDeltaProperties(\n provider: Providers,\n obj?: AIMessageChunk\n): AIMessageChunk | undefined {\n if (!obj || typeof obj !== 'object') return obj;\n\n const messageType = (obj as Partial<AIMessageChunk>)._getType\n ? obj._getType()\n : '';\n\n if (provider === Providers.BEDROCK && Array.isArray(obj.content)) {\n obj.content = toLangChainContent(\n reduceBlocks(obj.content as ContentBlock[])\n );\n }\n if (Array.isArray(obj.content)) {\n obj.content = toLangChainContent(\n modifyContent({\n provider,\n messageType,\n content: obj.content as t.ExtendedMessageContent[],\n }) as t.MessageContentComplex[]\n );\n }\n if (\n (obj as Partial<AIMessageChunk>).lc_kwargs &&\n Array.isArray(obj.lc_kwargs.content)\n ) {\n if (provider === Providers.BEDROCK) {\n obj.lc_kwargs.content = reduceBlocks(\n obj.lc_kwargs.content as ContentBlock[]\n );\n }\n obj.lc_kwargs.content = modifyContent({\n provider,\n messageType,\n content: obj.lc_kwargs.content,\n });\n }\n return obj;\n}\n\nexport function formatAnthropicMessage(message: AIMessageChunk): AIMessage {\n if (!message.tool_calls || message.tool_calls.length === 0) {\n return new AIMessage({ content: toLangChainContent(message.content) });\n }\n\n const toolCallMap = new Map(message.tool_calls.map((tc) => [tc.id, tc]));\n let formattedContent: string | t.ExtendedMessageContent[];\n\n if (Array.isArray(message.content)) {\n formattedContent = message.content.reduce<t.ExtendedMessageContent[]>(\n (acc, item) => {\n if (typeof item === 'object') {\n const extendedItem = item as t.ExtendedMessageContent;\n if (\n extendedItem.type === 'text' &&\n extendedItem.text != null &&\n extendedItem.text\n ) {\n acc.push({ type: 'text', text: extendedItem.text });\n } else if (\n extendedItem.type === 'tool_use' &&\n extendedItem.id != null &&\n extendedItem.id\n ) {\n const toolCall = toolCallMap.get(extendedItem.id);\n if (toolCall) {\n acc.push({\n type: 'tool_use',\n id: extendedItem.id,\n name: toolCall.name,\n input: toolCall.args as unknown as string,\n });\n }\n } else if (\n 'input' in extendedItem &&\n extendedItem.input != null &&\n extendedItem.input\n ) {\n try {\n const parsedInput = JSON.parse(extendedItem.input);\n const toolCall = message.tool_calls?.find(\n (tc) => tc.args.input === parsedInput.input\n );\n if (toolCall) {\n acc.push({\n type: 'tool_use',\n id: toolCall.id,\n name: toolCall.name,\n input: toolCall.args as unknown as string,\n });\n }\n } catch {\n if (extendedItem.input) {\n acc.push({ type: 'text', text: extendedItem.input });\n }\n }\n }\n } else if (typeof item === 'string') {\n acc.push({ type: 'text', text: item });\n }\n return acc;\n },\n []\n );\n } else if (typeof message.content === 'string') {\n formattedContent = message.content;\n } else {\n formattedContent = [];\n }\n\n // const formattedToolCalls: ToolCall[] = message.tool_calls.map(toolCall => ({\n // id: toolCall.id ?? '',\n // name: toolCall.name,\n // args: toolCall.args,\n // type: 'tool_call',\n // }));\n\n const formattedToolCalls: t.AgentToolCall[] = message.tool_calls.map(\n (toolCall) => ({\n id: toolCall.id ?? '',\n type: 'function',\n function: {\n name: toolCall.name,\n arguments: toolCall.args,\n },\n })\n );\n\n return new AIMessage({\n content: toLangChainContent(formattedContent),\n tool_calls: formattedToolCalls as ToolCall[],\n additional_kwargs: {\n ...message.additional_kwargs,\n },\n });\n}\n\nexport function convertMessagesToContent(\n messages: BaseMessage[]\n): t.MessageContentComplex[] {\n const processedContent: t.MessageContentComplex[] = [];\n\n const addToolCallBoundary = (): number => {\n processedContent.push({ type: ContentTypes.TEXT, text: '' });\n return processedContent.length - 1;\n };\n\n const addContentPart = (message: BaseMessage | null): number | undefined => {\n const content =\n message?.lc_kwargs.content != null\n ? message.lc_kwargs.content\n : message?.content;\n if (content === undefined) {\n return undefined;\n }\n const reasoningContent =\n message?._getType() === 'ai' && !hasReasoningContent(content)\n ? getAdditionalReasoningContent(message)\n : undefined;\n if (reasoningContent != null) {\n processedContent.push({\n type: ContentTypes.THINK,\n think: reasoningContent,\n });\n }\n if (typeof content === 'string') {\n if (content === '') {\n return undefined;\n }\n processedContent.push({\n type: ContentTypes.TEXT,\n text: content,\n });\n return processedContent.length - 1;\n } else if (Array.isArray(content)) {\n let textContentIndex: number | undefined;\n for (const item of content) {\n if (item == null || item.type === 'tool_use') {\n continue;\n }\n processedContent.push(item);\n if (item.type === ContentTypes.TEXT) {\n textContentIndex = processedContent.length - 1;\n }\n }\n return textContentIndex;\n }\n return undefined;\n };\n\n let currentAIMessageIndex = -1;\n const toolCallMap = new Map<string, t.CustomToolCall>();\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i] as BaseMessage | null;\n const messageType = message?._getType();\n\n if (\n messageType === 'ai' &&\n ((message as AIMessage).tool_calls?.length ?? 0) > 0\n ) {\n const tool_calls = (message as AIMessage).tool_calls || [];\n for (const tool_call of tool_calls) {\n if (tool_call.id == null || !tool_call.id) {\n continue;\n }\n\n toolCallMap.set(tool_call.id, tool_call);\n }\n\n currentAIMessageIndex =\n addContentPart(message) ?? addToolCallBoundary();\n continue;\n } else if (\n messageType === 'tool' &&\n (message as ToolMessage).tool_call_id\n ) {\n const id = (message as ToolMessage).tool_call_id;\n const output = (message as ToolMessage).content;\n const tool_call = toolCallMap.get(id);\n if (currentAIMessageIndex === -1) {\n processedContent.push({ type: 'text', text: '' });\n currentAIMessageIndex = processedContent.length - 1;\n }\n const contentPart = processedContent[currentAIMessageIndex];\n processedContent.push({\n type: 'tool_call',\n tool_call: Object.assign({}, tool_call, { output }),\n });\n const tool_call_ids = contentPart.tool_call_ids || [];\n tool_call_ids.push(id);\n contentPart.tool_call_ids = tool_call_ids;\n continue;\n } else if (messageType !== 'ai') {\n continue;\n }\n\n addContentPart(message);\n }\n\n return processedContent;\n}\n\nfunction stringifyToolMessageContent(\n content: ToolMessage['content'] | null | undefined\n): string {\n return content == null ? '' : String(content);\n}\n\nexport function formatAnthropicArtifactContent(messages: BaseMessage[]): void {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return;\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return;\n\n // Build tool call ID set and merge artifact content in a single forward pass.\n const message = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIdSet = new Set<string>();\n if (message.tool_calls) {\n for (const tc of message.tool_calls) {\n if (tc.id != null) {\n toolCallIdSet.add(tc.id);\n }\n }\n }\n\n for (let j = latestAIParentIndex + 1; j < messages.length; j++) {\n const msg = messages[j];\n if (\n msg instanceof ToolMessage &&\n toolCallIdSet.has(msg.tool_call_id) &&\n msg.artifact != null &&\n Array.isArray(msg.artifact?.content)\n ) {\n const base = Array.isArray(msg.content)\n ? msg.content\n : [\n {\n type: ContentTypes.TEXT,\n text: stringifyToolMessageContent(msg.content),\n },\n ];\n msg.content = base.concat(msg.artifact.content);\n }\n }\n}\n\nexport function formatArtifactPayload(messages: BaseMessage[]): void {\n const lastMessageY = messages[messages.length - 1];\n if (!(lastMessageY instanceof ToolMessage)) return;\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessageY.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return;\n\n // Single pass: collect relevant tool messages with artifacts and aggregate\n const aggregatedContent: t.MessageContentComplex[] = [];\n\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (\n !(msg instanceof ToolMessage) ||\n !Array.isArray(msg.artifact?.content)\n ) {\n continue;\n }\n let currentContent = msg.content;\n if (!Array.isArray(currentContent)) {\n currentContent = [{ type: 'text', text: msg.content }];\n }\n aggregatedContent.push(...(currentContent as t.MessageContentComplex[]));\n msg.content =\n 'Tool response is included in the next message as a Human message';\n aggregatedContent.push(...msg.artifact.content);\n }\n\n if (aggregatedContent.length > 0) {\n messages.push(\n new HumanMessage({ content: toLangChainContent(aggregatedContent) })\n );\n }\n}\n\nexport function findLastIndex<T>(\n array: T[],\n predicate: (value: T) => boolean\n): number {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) {\n return i;\n }\n }\n return -1;\n}\n"],"names":[],"mappings":"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"}
@@ -917,6 +917,12 @@ function createContentAggregator() {
917
917
  const toolCallIdMap = new Map();
918
918
  // Track agentId and groupId for each content index (applied to content parts)
919
919
  const contentMetaMap = new Map();
920
+ const getFirstContentPart = (content) => {
921
+ if (content == null) {
922
+ return undefined;
923
+ }
924
+ return Array.isArray(content) ? content[0] : content;
925
+ };
920
926
  const updateContent = (index, contentPart, finalUpdate = false) => {
921
927
  if (!contentPart) {
922
928
  console.warn('No content part found in \'updateContent\'');
@@ -1124,10 +1130,8 @@ function createContentAggregator() {
1124
1130
  console.warn('No run step or runId found for message delta event');
1125
1131
  return;
1126
1132
  }
1127
- if (messageDelta.delta.content) {
1128
- const contentPart = Array.isArray(messageDelta.delta.content)
1129
- ? messageDelta.delta.content[0]
1130
- : messageDelta.delta.content;
1133
+ const contentPart = getFirstContentPart(messageDelta.delta.content);
1134
+ if (contentPart != null) {
1131
1135
  updateContent(runStep.index, contentPart);
1132
1136
  }
1133
1137
  }
@@ -1146,10 +1150,8 @@ function createContentAggregator() {
1146
1150
  console.warn('No run step or runId found for reasoning delta event');
1147
1151
  return;
1148
1152
  }
1149
- if (reasoningDelta.delta.content) {
1150
- const contentPart = Array.isArray(reasoningDelta.delta.content)
1151
- ? reasoningDelta.delta.content[0]
1152
- : reasoningDelta.delta.content;
1153
+ const contentPart = getFirstContentPart(reasoningDelta.delta.content);
1154
+ if (contentPart != null) {
1153
1155
  updateContent(runStep.index, contentPart);
1154
1156
  }
1155
1157
  }