@langchain/core 1.1.25 → 1.1.27

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,17 @@
1
1
  # @langchain/core
2
2
 
3
+ ## 1.1.27
4
+
5
+ ### Patch Changes
6
+
7
+ - [#10104](https://github.com/langchain-ai/langchainjs/pull/10104) [`fb2226e`](https://github.com/langchain-ai/langchainjs/commit/fb2226e6decdaba21e78b3f01877b45fa1eed6d3) Thanks [@hntrl](https://github.com/hntrl)! - Revert "chore(deps): bump ansi-styles from 5.2.0 to 6.2.3"
8
+
9
+ ## 1.1.26
10
+
11
+ ### Patch Changes
12
+
13
+ - [#10085](https://github.com/langchain-ai/langchainjs/pull/10085) [`ed6ea53`](https://github.com/langchain-ai/langchainjs/commit/ed6ea53c38a004b65e30c0f5888a0ac7d8ee7028) Thanks [@colifran](https://github.com/colifran)! - fix(google): tool_calls are not preserved when concatenating AIMessageChunks
14
+
3
15
  ## 1.1.25
4
16
 
5
17
  ### Patch Changes
@@ -208,12 +208,17 @@ var AIMessageChunk = class extends require_base.BaseMessageChunk {
208
208
  additional_kwargs: require_base._mergeDicts(this.additional_kwargs, chunk.additional_kwargs),
209
209
  response_metadata: require_metadata.mergeResponseMetadata(this.response_metadata, chunk.response_metadata),
210
210
  tool_call_chunks: [],
211
+ tool_calls: [],
211
212
  id: this.id ?? chunk.id
212
213
  };
213
214
  if (this.tool_call_chunks !== void 0 || chunk.tool_call_chunks !== void 0) {
214
215
  const rawToolCalls = require_base._mergeLists(this.tool_call_chunks, chunk.tool_call_chunks);
215
216
  if (rawToolCalls !== void 0 && rawToolCalls.length > 0) combinedFields.tool_call_chunks = rawToolCalls;
216
217
  }
218
+ if (this.tool_calls !== void 0 || chunk.tool_calls !== void 0) {
219
+ const rawToolCalls = require_base._mergeLists(this.tool_calls, chunk.tool_calls);
220
+ if (rawToolCalls !== void 0 && rawToolCalls.length > 0) combinedFields.tool_calls = rawToolCalls;
221
+ }
217
222
  if (this.usage_metadata !== void 0 || chunk.usage_metadata !== void 0) combinedFields.usage_metadata = require_metadata.mergeUsageMetadata(this.usage_metadata, chunk.usage_metadata);
218
223
  const Cls = this.constructor;
219
224
  return new Cls(combinedFields);
@@ -1 +1 @@
1
- {"version":3,"file":"ai.cjs","names":["BaseMessage","defaultToolCallParser","getTranslator","BaseMessageChunk","collapseToolCallChunks","mergeContent","_mergeDicts","mergeResponseMetadata","_mergeLists","mergeUsageMetadata"],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n $InferToolCalls,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { collapseToolCallChunks, Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure,\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: $InferToolCalls<TStructure>[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [parsedToolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls =\n (parsedToolCalls as $InferToolCalls<TStructure>[]) ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [] as $InferToolCalls<TStructure>[];\n initParams.invalid_tool_calls = [];\n }\n\n // Convert content to content blocks if output version is v1\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\"\n ) {\n initParams.contentBlocks =\n initParams.content as Array<ContentBlock.Standard>;\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n if (initParams.tool_calls) {\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n }\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n })) as $InferToolCalls<TStructure>[];\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...(missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n })) as ContentBlock.Tools.ToolCall[])\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n /**\n * Type guard to check if an object is an AIMessage.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessage<T>;\n /**\n * Type guard to check if an object is an AIMessage.\n * @overload When called with unknown, returns base AIMessage type\n */\n static isInstance(obj: unknown): obj is AIMessage;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessage<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure,\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure,\n>\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (\n fields.tool_call_chunks === undefined ||\n fields.tool_call_chunks.length === 0\n ) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const collapsed = collapseToolCallChunks(fields.tool_call_chunks ?? []);\n initParams = {\n ...fields,\n tool_call_chunks: collapsed.tool_call_chunks,\n tool_calls: collapsed.tool_calls as $InferToolCalls<TStructure>[],\n invalid_tool_calls: collapsed.invalid_tool_calls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessageChunk<T>;\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * @overload When called with unknown, returns base AIMessageChunk type\n */\n static isInstance(obj: unknown): obj is AIMessageChunk;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessageChunk<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n"],"mappings":";;;;;;;AAgCA,IAAa,YAAb,cACUA,yBAEV;CACE,AAAS,OAAO;CAEhB,aAA6C,EAAE;CAE/C,qBAAyC,EAAE;CAE3C;CAEA,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACrB;;CAGH,YACE,QACA;EACA,IAAI;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CACrD,cAAa;GACX,SAAS;GACT,YAAY,EAAE;GACd,oBAAoB,EAAE;GACtB,mBAAmB,EAAE;GACtB;OACI;AACL,gBAAa;GACb,MAAM,eAAe,WAAW,mBAAmB;GACnD,MAAM,YAAY,WAAW;AAC7B,OACE,EAAE,gBAAgB,SAClB,aAAa,SAAS,MACrB,cAAc,UAAa,UAAU,WAAW,GAEjD,SAAQ,KACN;IACE;IACA;IACA;IACA;IACD,CAAC,KAAK,IAAI,CACZ;AAEH,OAAI;AACF,QAAI,EAAE,gBAAgB,SAAS,cAAc,QAAW;KACtD,MAAM,CAAC,iBAAiB,oBACtBC,4CAAsB,aAAa;AACrC,gBAAW,aACR,mBAAqD,EAAE;AAC1D,gBAAW,qBAAqB,oBAAoB,EAAE;WACjD;AACL,gBAAW,aAAa,WAAW,cAAc,EAAE;AACnD,gBAAW,qBAAqB,WAAW,sBAAsB,EAAE;;WAE/D;AAEN,eAAW,aAAa,EAAE;AAC1B,eAAW,qBAAqB,EAAE;;AAIpC,OACE,WAAW,sBAAsB,UACjC,oBAAoB,WAAW,qBAC/B,WAAW,kBAAkB,mBAAmB,MAChD;AACA,eAAW,gBACT,WAAW;AACb,eAAW,UAAU;;AAGvB,OAAI,WAAW,kBAAkB,QAAW;AAE1C,QAAI,WAAW,WACb,YAAW,cAAc,KACvB,GAAG,WAAW,WAAW,KAAK,cAAc;KAC1C,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;KAChB,EAAE,CACJ;IAGH,MAAM,mBAAmB,WAAW,cACjC,QACE,UACC,MAAM,SAAS,YAClB,CACA,QACE,UACC,CAAC,WAAW,YAAY,MACrB,aACC,SAAS,OAAO,MAAM,MAAM,SAAS,SAAS,MAAM,KACvD,CACJ;AACH,QAAI,iBAAiB,SAAS,EAC5B,YAAW,aAAa,iBAAiB,KAAK,WAAW;KACvD,MAAM;KACN,IAAI,MAAM;KACV,MAAM,MAAM;KACZ,MAAM,MAAM;KACb,EAAE;;;AAMT,QAAM,WAAW;AACjB,MAAI,OAAO,eAAe,UAAU;AAClC,QAAK,aAAa,WAAW,cAAc,KAAK;AAChD,QAAK,qBACH,WAAW,sBAAsB,KAAK;;AAE1C,OAAK,iBAAiB,WAAW;;CAGnC,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAaC,4BAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAkB;;EAIzD,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YAAY;GACnB,MAAM,mBAAmB,KAAK,WAAW,QACtC,UACC,CAAC,OAAO,MAAM,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK,CAClE;AACD,UAAO,KACL,GAAI,iBAAiB,KAAK,WAAW;IACnC,MAAM;IACN,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;IACb,EAAE,CACJ;;AAGH,SAAO;;CAGT,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;GACtB;;CAgBH,OAAO,WACL,KACqB;AACrB,SAAO,MAAM,WAAW,IAAI,IAAK,IAAyB,SAAS;;;;;;AAOvE,SAAgB,YACd,GAC4B;AAC5B,QAAO,EAAE,UAAU,KAAK;;;;;AAM1B,SAAgB,iBACd,GACiC;AACjC,QAAO,EAAE,UAAU,KAAK;;;;;;AAa1B,IAAa,iBAAb,cAGUC,8BAEV;CACE,AAAS,OAAO;CAEhB,aAA6C,EAAE;CAE/C,qBAAyC,EAAE;CAE3C,mBAAqC,EAAE;CAEvC;CAEA,YACE,QAGA;EACA,IAAI;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CACrD,cAAa;GACX,SAAS;GACT,YAAY,EAAE;GACd,oBAAoB,EAAE;GACtB,kBAAkB,EAAE;GACrB;WAED,OAAO,qBAAqB,UAC5B,OAAO,iBAAiB,WAAW,EAEnC,cAAa;GACX,GAAG;GACH,YAAY,OAAO,cAAc,EAAE;GACnC,oBAAoB,EAAE;GACtB,kBAAkB,EAAE;GACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;GACP;OACI;GACL,MAAM,YAAYC,qCAAuB,OAAO,oBAAoB,EAAE,CAAC;AACvE,gBAAa;IACX,GAAG;IACH,kBAAkB,UAAU;IAC5B,YAAY,UAAU;IACtB,oBAAoB,UAAU;IAC9B,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;IACP;;AAIH,QAAM,WAAW;AACjB,OAAK,mBACH,WAAW,oBAAoB,KAAK;AACtC,OAAK,aAAa,WAAW,cAAc,KAAK;AAChD,OAAK,qBACH,WAAW,sBAAsB,KAAK;AACxC,OAAK,iBAAiB,WAAW;;CAGnC,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACpB,kBAAkB;GACnB;;CAGH,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAaF,4BAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAkB;;EAIzD,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YACP;OAAI,OAAO,KAAK,YAAY,UAAU;IACpC,MAAM,mBAAmB,KAAK,QAC3B,QAAQ,UAAU,MAAM,SAAS,YAAY,CAC7C,KAAK,UAAU,MAAM,GAAG;AAC3B,SAAK,MAAM,YAAY,KAAK,WAC1B,KAAI,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,GAAG,CACxD,QAAO,KAAK;KACV,GAAG;KACH,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;KAChB,CAAC;;;AAMV,SAAO;;CAGT,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,kBAAkB,KAAK;GACvB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;GACtB;;CAGH,OAAO,OAAmC;EACxC,MAAM,iBAAuC;GAC3C,SAASG,0BAAa,KAAK,SAAS,MAAM,QAAQ;GAClD,mBAAmBC,yBACjB,KAAK,mBACL,MAAM,kBACP;GACD,mBAAmBC,uCACjB,KAAK,mBACL,MAAM,kBACP;GACD,kBAAkB,EAAE;GACpB,IAAI,KAAK,MAAM,MAAM;GACtB;AACD,MACE,KAAK,qBAAqB,UAC1B,MAAM,qBAAqB,QAC3B;GACA,MAAM,eAAeC,yBACnB,KAAK,kBACL,MAAM,iBACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,EACtD,gBAAe,mBAAmB;;AAGtC,MACE,KAAK,mBAAmB,UACxB,MAAM,mBAAmB,OAEzB,gBAAe,iBAAiBC,oCAC9B,KAAK,gBACL,MAAM,eACP;EAEH,MAAM,MAAM,KAAK;AACjB,SAAO,IAAI,IAAI,eAAe;;CAgBhC,OAAO,WACL,KAC0B;AAC1B,SAAO,MAAM,WAAW,IAAI,IAAK,IAAyB,SAAS"}
1
+ {"version":3,"file":"ai.cjs","names":["BaseMessage","defaultToolCallParser","getTranslator","BaseMessageChunk","collapseToolCallChunks","mergeContent","_mergeDicts","mergeResponseMetadata","_mergeLists","mergeUsageMetadata"],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n $InferToolCalls,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { collapseToolCallChunks, Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure,\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: $InferToolCalls<TStructure>[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [parsedToolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls =\n (parsedToolCalls as $InferToolCalls<TStructure>[]) ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [] as $InferToolCalls<TStructure>[];\n initParams.invalid_tool_calls = [];\n }\n\n // Convert content to content blocks if output version is v1\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\"\n ) {\n initParams.contentBlocks =\n initParams.content as Array<ContentBlock.Standard>;\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n if (initParams.tool_calls) {\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n }\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n })) as $InferToolCalls<TStructure>[];\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...(missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n })) as ContentBlock.Tools.ToolCall[])\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n /**\n * Type guard to check if an object is an AIMessage.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessage<T>;\n /**\n * Type guard to check if an object is an AIMessage.\n * @overload When called with unknown, returns base AIMessage type\n */\n static isInstance(obj: unknown): obj is AIMessage;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessage<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure,\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure,\n>\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (\n fields.tool_call_chunks === undefined ||\n fields.tool_call_chunks.length === 0\n ) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const collapsed = collapseToolCallChunks(fields.tool_call_chunks ?? []);\n initParams = {\n ...fields,\n tool_call_chunks: collapsed.tool_call_chunks,\n tool_calls: collapsed.tool_calls as $InferToolCalls<TStructure>[],\n invalid_tool_calls: collapsed.invalid_tool_calls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n tool_calls: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (this.tool_calls !== undefined || chunk.tool_calls !== undefined) {\n const rawToolCalls = _mergeLists(\n this.tool_calls as ContentBlock.Tools.ToolCall[],\n chunk.tool_calls as ContentBlock.Tools.ToolCall[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_calls =\n rawToolCalls as $InferToolCalls<TStructure>[];\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessageChunk<T>;\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * @overload When called with unknown, returns base AIMessageChunk type\n */\n static isInstance(obj: unknown): obj is AIMessageChunk;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessageChunk<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n"],"mappings":";;;;;;;AAgCA,IAAa,YAAb,cACUA,yBAEV;CACE,AAAS,OAAO;CAEhB,aAA6C,EAAE;CAE/C,qBAAyC,EAAE;CAE3C;CAEA,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACrB;;CAGH,YACE,QACA;EACA,IAAI;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CACrD,cAAa;GACX,SAAS;GACT,YAAY,EAAE;GACd,oBAAoB,EAAE;GACtB,mBAAmB,EAAE;GACtB;OACI;AACL,gBAAa;GACb,MAAM,eAAe,WAAW,mBAAmB;GACnD,MAAM,YAAY,WAAW;AAC7B,OACE,EAAE,gBAAgB,SAClB,aAAa,SAAS,MACrB,cAAc,UAAa,UAAU,WAAW,GAEjD,SAAQ,KACN;IACE;IACA;IACA;IACA;IACD,CAAC,KAAK,IAAI,CACZ;AAEH,OAAI;AACF,QAAI,EAAE,gBAAgB,SAAS,cAAc,QAAW;KACtD,MAAM,CAAC,iBAAiB,oBACtBC,4CAAsB,aAAa;AACrC,gBAAW,aACR,mBAAqD,EAAE;AAC1D,gBAAW,qBAAqB,oBAAoB,EAAE;WACjD;AACL,gBAAW,aAAa,WAAW,cAAc,EAAE;AACnD,gBAAW,qBAAqB,WAAW,sBAAsB,EAAE;;WAE/D;AAEN,eAAW,aAAa,EAAE;AAC1B,eAAW,qBAAqB,EAAE;;AAIpC,OACE,WAAW,sBAAsB,UACjC,oBAAoB,WAAW,qBAC/B,WAAW,kBAAkB,mBAAmB,MAChD;AACA,eAAW,gBACT,WAAW;AACb,eAAW,UAAU;;AAGvB,OAAI,WAAW,kBAAkB,QAAW;AAE1C,QAAI,WAAW,WACb,YAAW,cAAc,KACvB,GAAG,WAAW,WAAW,KAAK,cAAc;KAC1C,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;KAChB,EAAE,CACJ;IAGH,MAAM,mBAAmB,WAAW,cACjC,QACE,UACC,MAAM,SAAS,YAClB,CACA,QACE,UACC,CAAC,WAAW,YAAY,MACrB,aACC,SAAS,OAAO,MAAM,MAAM,SAAS,SAAS,MAAM,KACvD,CACJ;AACH,QAAI,iBAAiB,SAAS,EAC5B,YAAW,aAAa,iBAAiB,KAAK,WAAW;KACvD,MAAM;KACN,IAAI,MAAM;KACV,MAAM,MAAM;KACZ,MAAM,MAAM;KACb,EAAE;;;AAMT,QAAM,WAAW;AACjB,MAAI,OAAO,eAAe,UAAU;AAClC,QAAK,aAAa,WAAW,cAAc,KAAK;AAChD,QAAK,qBACH,WAAW,sBAAsB,KAAK;;AAE1C,OAAK,iBAAiB,WAAW;;CAGnC,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAaC,4BAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAkB;;EAIzD,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YAAY;GACnB,MAAM,mBAAmB,KAAK,WAAW,QACtC,UACC,CAAC,OAAO,MAAM,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK,CAClE;AACD,UAAO,KACL,GAAI,iBAAiB,KAAK,WAAW;IACnC,MAAM;IACN,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;IACb,EAAE,CACJ;;AAGH,SAAO;;CAGT,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;GACtB;;CAgBH,OAAO,WACL,KACqB;AACrB,SAAO,MAAM,WAAW,IAAI,IAAK,IAAyB,SAAS;;;;;;AAOvE,SAAgB,YACd,GAC4B;AAC5B,QAAO,EAAE,UAAU,KAAK;;;;;AAM1B,SAAgB,iBACd,GACiC;AACjC,QAAO,EAAE,UAAU,KAAK;;;;;;AAa1B,IAAa,iBAAb,cAGUC,8BAEV;CACE,AAAS,OAAO;CAEhB,aAA6C,EAAE;CAE/C,qBAAyC,EAAE;CAE3C,mBAAqC,EAAE;CAEvC;CAEA,YACE,QAGA;EACA,IAAI;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CACrD,cAAa;GACX,SAAS;GACT,YAAY,EAAE;GACd,oBAAoB,EAAE;GACtB,kBAAkB,EAAE;GACrB;WAED,OAAO,qBAAqB,UAC5B,OAAO,iBAAiB,WAAW,EAEnC,cAAa;GACX,GAAG;GACH,YAAY,OAAO,cAAc,EAAE;GACnC,oBAAoB,EAAE;GACtB,kBAAkB,EAAE;GACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;GACP;OACI;GACL,MAAM,YAAYC,qCAAuB,OAAO,oBAAoB,EAAE,CAAC;AACvE,gBAAa;IACX,GAAG;IACH,kBAAkB,UAAU;IAC5B,YAAY,UAAU;IACtB,oBAAoB,UAAU;IAC9B,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;IACP;;AAIH,QAAM,WAAW;AACjB,OAAK,mBACH,WAAW,oBAAoB,KAAK;AACtC,OAAK,aAAa,WAAW,cAAc,KAAK;AAChD,OAAK,qBACH,WAAW,sBAAsB,KAAK;AACxC,OAAK,iBAAiB,WAAW;;CAGnC,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACpB,kBAAkB;GACnB;;CAGH,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAaF,4BAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAkB;;EAIzD,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YACP;OAAI,OAAO,KAAK,YAAY,UAAU;IACpC,MAAM,mBAAmB,KAAK,QAC3B,QAAQ,UAAU,MAAM,SAAS,YAAY,CAC7C,KAAK,UAAU,MAAM,GAAG;AAC3B,SAAK,MAAM,YAAY,KAAK,WAC1B,KAAI,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,GAAG,CACxD,QAAO,KAAK;KACV,GAAG;KACH,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;KAChB,CAAC;;;AAMV,SAAO;;CAGT,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,kBAAkB,KAAK;GACvB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;GACtB;;CAGH,OAAO,OAAmC;EACxC,MAAM,iBAAuC;GAC3C,SAASG,0BAAa,KAAK,SAAS,MAAM,QAAQ;GAClD,mBAAmBC,yBACjB,KAAK,mBACL,MAAM,kBACP;GACD,mBAAmBC,uCACjB,KAAK,mBACL,MAAM,kBACP;GACD,kBAAkB,EAAE;GACpB,YAAY,EAAE;GACd,IAAI,KAAK,MAAM,MAAM;GACtB;AACD,MACE,KAAK,qBAAqB,UAC1B,MAAM,qBAAqB,QAC3B;GACA,MAAM,eAAeC,yBACnB,KAAK,kBACL,MAAM,iBACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,EACtD,gBAAe,mBAAmB;;AAGtC,MAAI,KAAK,eAAe,UAAa,MAAM,eAAe,QAAW;GACnE,MAAM,eAAeA,yBACnB,KAAK,YACL,MAAM,WACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,EACtD,gBAAe,aACb;;AAGN,MACE,KAAK,mBAAmB,UACxB,MAAM,mBAAmB,OAEzB,gBAAe,iBAAiBC,oCAC9B,KAAK,gBACL,MAAM,eACP;EAEH,MAAM,MAAM,KAAK;AACjB,SAAO,IAAI,IAAI,eAAe;;CAgBhC,OAAO,WACL,KAC0B;AAC1B,SAAO,MAAM,WAAW,IAAI,IAAK,IAAyB,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.cts","names":[],"sources":["../../src/messages/ai.ts"],"mappings":";;;;;;UAwBiB,eAAA,oBACI,gBAAA,GAAmB,gBAAA,UAC9B,iBAAA,CAAkB,UAAA;EAC1B,UAAA,GAAa,eAAA,CAAgB,UAAA;EAC7B,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,qBAAA,CAAsB,UAAA;AAAA;AAAA,cAG5B,SAAA,oBAA6B,gBAAA,GAAmB,gBAAA,UACnD,WAAA,CAAY,UAAA,mBACT,eAAA,CAAgB,UAAA;EAAA,SAElB,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,cAAA,GAAiB,eAAA,CAAgB,UAAA;EAAA,IAE7B,UAAA,CAAA,GAAc,MAAA;EASlB,WAAA,CACE,MAAA,EAAQ,oBAAA,CAAqB,UAAA,UAAoB,eAAA,CAAgB,UAAA;EAAA,OAsG5D,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IAwC3B,gBAAA,CAAA,GAAoB,MAAA;EA9KR;;;;;EAAA,OA4LlB,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,SAAA,CAAU,CAAA;EA7LrC;;;;EAAA,OAkMO,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,SAAA;AAAA;;;;iBAW1B,WAAA,oBAA+B,gBAAA,CAAA,CAC7C,CAAA,EAAG,WAAA,GACF,CAAA,IAAK,SAAA,CAAU,UAAA;AA1MlB;;;AAAA,iBAiNgB,gBAAA,oBAAoC,gBAAA,CAAA,CAClD,CAAA,EAAG,gBAAA,GACF,CAAA,IAAK,cAAA,CAAe,UAAA;AAAA,KAIX,oBAAA,oBACS,gBAAA,GAAmB,gBAAA,IACpC,eAAA,CAAgB,UAAA;EAClB,gBAAA,GAAmB,aAAA;AAAA;;;;;cAOR,cAAA,oBACQ,gBAAA,GAAmB,gBAAA,UAE9B,gBAAA,CAAiB,UAAA,mBACd,SAAA,CAAU,UAAA,GAAa,oBAAA,CAAqB,UAAA;EAAA,SAE9C,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,gBAAA,GAAmB,aAAA;EAEnB,cAAA,GAAiB,oBAAA,CAAqB,UAAA;EAEtC,WAAA,CACE,MAAA,EACI,oBAAA,CAAqB,UAAA,UACrB,oBAAA,CAAqB,UAAA;EAAA,IAgDvB,UAAA,CAAA,GAAc,MAAA;EAAA,OAUX,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IA4C3B,gBAAA,CAAA,GAAoB,MAAA;EAUjC,MAAA,CAAO,KAAA,EAAO,cAAA,CAAe,UAAA;EAhLP;;;;;EAAA,OA4Nf,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,cAAA,CAAe,CAAA;EApZ/B;;;;EAAA,OAyZJ,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,cAAA;AAAA"}
1
+ {"version":3,"file":"ai.d.cts","names":[],"sources":["../../src/messages/ai.ts"],"mappings":";;;;;;UAwBiB,eAAA,oBACI,gBAAA,GAAmB,gBAAA,UAC9B,iBAAA,CAAkB,UAAA;EAC1B,UAAA,GAAa,eAAA,CAAgB,UAAA;EAC7B,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,qBAAA,CAAsB,UAAA;AAAA;AAAA,cAG5B,SAAA,oBAA6B,gBAAA,GAAmB,gBAAA,UACnD,WAAA,CAAY,UAAA,mBACT,eAAA,CAAgB,UAAA;EAAA,SAElB,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,cAAA,GAAiB,eAAA,CAAgB,UAAA;EAAA,IAE7B,UAAA,CAAA,GAAc,MAAA;EASlB,WAAA,CACE,MAAA,EAAQ,oBAAA,CAAqB,UAAA,UAAoB,eAAA,CAAgB,UAAA;EAAA,OAsG5D,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IAwC3B,gBAAA,CAAA,GAAoB,MAAA;EA9KR;;;;;EAAA,OA4LlB,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,SAAA,CAAU,CAAA;EA7LrC;;;;EAAA,OAkMO,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,SAAA;AAAA;;;;iBAW1B,WAAA,oBAA+B,gBAAA,CAAA,CAC7C,CAAA,EAAG,WAAA,GACF,CAAA,IAAK,SAAA,CAAU,UAAA;AA1MlB;;;AAAA,iBAiNgB,gBAAA,oBAAoC,gBAAA,CAAA,CAClD,CAAA,EAAG,gBAAA,GACF,CAAA,IAAK,cAAA,CAAe,UAAA;AAAA,KAIX,oBAAA,oBACS,gBAAA,GAAmB,gBAAA,IACpC,eAAA,CAAgB,UAAA;EAClB,gBAAA,GAAmB,aAAA;AAAA;;;;;cAOR,cAAA,oBACQ,gBAAA,GAAmB,gBAAA,UAE9B,gBAAA,CAAiB,UAAA,mBACd,SAAA,CAAU,UAAA,GAAa,oBAAA,CAAqB,UAAA;EAAA,SAE9C,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,gBAAA,GAAmB,aAAA;EAEnB,cAAA,GAAiB,oBAAA,CAAqB,UAAA;EAEtC,WAAA,CACE,MAAA,EACI,oBAAA,CAAqB,UAAA,UACrB,oBAAA,CAAqB,UAAA;EAAA,IAgDvB,UAAA,CAAA,GAAc,MAAA;EAAA,OAUX,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IA4C3B,gBAAA,CAAA,GAAoB,MAAA;EAUjC,MAAA,CAAO,KAAA,EAAO,cAAA,CAAe,UAAA;EAhLP;;;;;EAAA,OAuOf,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,cAAA,CAAe,CAAA;EA/Z/B;;;;EAAA,OAoaJ,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,cAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","names":[],"sources":["../../src/messages/ai.ts"],"mappings":";;;;;;UAwBiB,eAAA,oBACI,gBAAA,GAAmB,gBAAA,UAC9B,iBAAA,CAAkB,UAAA;EAC1B,UAAA,GAAa,eAAA,CAAgB,UAAA;EAC7B,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,qBAAA,CAAsB,UAAA;AAAA;AAAA,cAG5B,SAAA,oBAA6B,gBAAA,GAAmB,gBAAA,UACnD,WAAA,CAAY,UAAA,mBACT,eAAA,CAAgB,UAAA;EAAA,SAElB,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,cAAA,GAAiB,eAAA,CAAgB,UAAA;EAAA,IAE7B,UAAA,CAAA,GAAc,MAAA;EASlB,WAAA,CACE,MAAA,EAAQ,oBAAA,CAAqB,UAAA,UAAoB,eAAA,CAAgB,UAAA;EAAA,OAsG5D,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IAwC3B,gBAAA,CAAA,GAAoB,MAAA;EA9KR;;;;;EAAA,OA4LlB,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,SAAA,CAAU,CAAA;EA7LrC;;;;EAAA,OAkMO,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,SAAA;AAAA;;;;iBAW1B,WAAA,oBAA+B,gBAAA,CAAA,CAC7C,CAAA,EAAG,WAAA,GACF,CAAA,IAAK,SAAA,CAAU,UAAA;AA1MlB;;;AAAA,iBAiNgB,gBAAA,oBAAoC,gBAAA,CAAA,CAClD,CAAA,EAAG,gBAAA,GACF,CAAA,IAAK,cAAA,CAAe,UAAA;AAAA,KAIX,oBAAA,oBACS,gBAAA,GAAmB,gBAAA,IACpC,eAAA,CAAgB,UAAA;EAClB,gBAAA,GAAmB,aAAA;AAAA;;;;;cAOR,cAAA,oBACQ,gBAAA,GAAmB,gBAAA,UAE9B,gBAAA,CAAiB,UAAA,mBACd,SAAA,CAAU,UAAA,GAAa,oBAAA,CAAqB,UAAA;EAAA,SAE9C,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,gBAAA,GAAmB,aAAA;EAEnB,cAAA,GAAiB,oBAAA,CAAqB,UAAA;EAEtC,WAAA,CACE,MAAA,EACI,oBAAA,CAAqB,UAAA,UACrB,oBAAA,CAAqB,UAAA;EAAA,IAgDvB,UAAA,CAAA,GAAc,MAAA;EAAA,OAUX,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IA4C3B,gBAAA,CAAA,GAAoB,MAAA;EAUjC,MAAA,CAAO,KAAA,EAAO,cAAA,CAAe,UAAA;EAhLP;;;;;EAAA,OA4Nf,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,cAAA,CAAe,CAAA;EApZ/B;;;;EAAA,OAyZJ,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,cAAA;AAAA"}
1
+ {"version":3,"file":"ai.d.ts","names":[],"sources":["../../src/messages/ai.ts"],"mappings":";;;;;;UAwBiB,eAAA,oBACI,gBAAA,GAAmB,gBAAA,UAC9B,iBAAA,CAAkB,UAAA;EAC1B,UAAA,GAAa,eAAA,CAAgB,UAAA;EAC7B,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,qBAAA,CAAsB,UAAA;AAAA;AAAA,cAG5B,SAAA,oBAA6B,gBAAA,GAAmB,gBAAA,UACnD,WAAA,CAAY,UAAA,mBACT,eAAA,CAAgB,UAAA;EAAA,SAElB,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,cAAA,GAAiB,eAAA,CAAgB,UAAA;EAAA,IAE7B,UAAA,CAAA,GAAc,MAAA;EASlB,WAAA,CACE,MAAA,EAAQ,oBAAA,CAAqB,UAAA,UAAoB,eAAA,CAAgB,UAAA;EAAA,OAsG5D,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IAwC3B,gBAAA,CAAA,GAAoB,MAAA;EA9KR;;;;;EAAA,OA4LlB,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,SAAA,CAAU,CAAA;EA7LrC;;;;EAAA,OAkMO,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,SAAA;AAAA;;;;iBAW1B,WAAA,oBAA+B,gBAAA,CAAA,CAC7C,CAAA,EAAG,WAAA,GACF,CAAA,IAAK,SAAA,CAAU,UAAA;AA1MlB;;;AAAA,iBAiNgB,gBAAA,oBAAoC,gBAAA,CAAA,CAClD,CAAA,EAAG,gBAAA,GACF,CAAA,IAAK,cAAA,CAAe,UAAA;AAAA,KAIX,oBAAA,oBACS,gBAAA,GAAmB,gBAAA,IACpC,eAAA,CAAgB,UAAA;EAClB,gBAAA,GAAmB,aAAA;AAAA;;;;;cAOR,cAAA,oBACQ,gBAAA,GAAmB,gBAAA,UAE9B,gBAAA,CAAiB,UAAA,mBACd,SAAA,CAAU,UAAA,GAAa,oBAAA,CAAqB,UAAA;EAAA,SAE9C,IAAA;EAET,UAAA,GAAa,eAAA,CAAgB,UAAA;EAE7B,kBAAA,GAAqB,eAAA;EAErB,gBAAA,GAAmB,aAAA;EAEnB,cAAA,GAAiB,oBAAA,CAAqB,UAAA;EAEtC,WAAA,CACE,MAAA,EACI,oBAAA,CAAqB,UAAA,UACrB,oBAAA,CAAqB,UAAA;EAAA,IAgDvB,UAAA,CAAA,GAAc,MAAA;EAAA,OAUX,OAAA,CAAA;EAAA,IAIH,aAAA,CAAA,GAAiB,KAAA,CAAM,YAAA,CAAa,QAAA;EAAA,IA4C3B,gBAAA,CAAA,GAAoB,MAAA;EAUjC,MAAA,CAAO,KAAA,EAAO,cAAA,CAAe,UAAA;EAhLP;;;;;EAAA,OAuOf,UAAA,WAAqB,gBAAA,CAAA,CAC1B,GAAA,EAAK,WAAA,CAAY,CAAA,IAChB,GAAA,IAAO,WAAA,CAAY,CAAA,IAAK,cAAA,CAAe,CAAA;EA/Z/B;;;;EAAA,OAoaJ,UAAA,CAAW,GAAA,YAAe,GAAA,IAAO,cAAA;AAAA"}
@@ -208,12 +208,17 @@ var AIMessageChunk = class extends BaseMessageChunk {
208
208
  additional_kwargs: _mergeDicts(this.additional_kwargs, chunk.additional_kwargs),
209
209
  response_metadata: mergeResponseMetadata(this.response_metadata, chunk.response_metadata),
210
210
  tool_call_chunks: [],
211
+ tool_calls: [],
211
212
  id: this.id ?? chunk.id
212
213
  };
213
214
  if (this.tool_call_chunks !== void 0 || chunk.tool_call_chunks !== void 0) {
214
215
  const rawToolCalls = _mergeLists(this.tool_call_chunks, chunk.tool_call_chunks);
215
216
  if (rawToolCalls !== void 0 && rawToolCalls.length > 0) combinedFields.tool_call_chunks = rawToolCalls;
216
217
  }
218
+ if (this.tool_calls !== void 0 || chunk.tool_calls !== void 0) {
219
+ const rawToolCalls = _mergeLists(this.tool_calls, chunk.tool_calls);
220
+ if (rawToolCalls !== void 0 && rawToolCalls.length > 0) combinedFields.tool_calls = rawToolCalls;
221
+ }
217
222
  if (this.usage_metadata !== void 0 || chunk.usage_metadata !== void 0) combinedFields.usage_metadata = mergeUsageMetadata(this.usage_metadata, chunk.usage_metadata);
218
223
  const Cls = this.constructor;
219
224
  return new Cls(combinedFields);
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","names":[],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n $InferToolCalls,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { collapseToolCallChunks, Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure,\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: $InferToolCalls<TStructure>[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [parsedToolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls =\n (parsedToolCalls as $InferToolCalls<TStructure>[]) ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [] as $InferToolCalls<TStructure>[];\n initParams.invalid_tool_calls = [];\n }\n\n // Convert content to content blocks if output version is v1\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\"\n ) {\n initParams.contentBlocks =\n initParams.content as Array<ContentBlock.Standard>;\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n if (initParams.tool_calls) {\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n }\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n })) as $InferToolCalls<TStructure>[];\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...(missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n })) as ContentBlock.Tools.ToolCall[])\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n /**\n * Type guard to check if an object is an AIMessage.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessage<T>;\n /**\n * Type guard to check if an object is an AIMessage.\n * @overload When called with unknown, returns base AIMessage type\n */\n static isInstance(obj: unknown): obj is AIMessage;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessage<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure,\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure,\n>\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (\n fields.tool_call_chunks === undefined ||\n fields.tool_call_chunks.length === 0\n ) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const collapsed = collapseToolCallChunks(fields.tool_call_chunks ?? []);\n initParams = {\n ...fields,\n tool_call_chunks: collapsed.tool_call_chunks,\n tool_calls: collapsed.tool_calls as $InferToolCalls<TStructure>[],\n invalid_tool_calls: collapsed.invalid_tool_calls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessageChunk<T>;\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * @overload When called with unknown, returns base AIMessageChunk type\n */\n static isInstance(obj: unknown): obj is AIMessageChunk;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessageChunk<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","names":[],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n $InferToolCalls,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { collapseToolCallChunks, Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure,\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: $InferToolCalls<TStructure>[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [parsedToolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls =\n (parsedToolCalls as $InferToolCalls<TStructure>[]) ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [] as $InferToolCalls<TStructure>[];\n initParams.invalid_tool_calls = [];\n }\n\n // Convert content to content blocks if output version is v1\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\"\n ) {\n initParams.contentBlocks =\n initParams.content as Array<ContentBlock.Standard>;\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n if (initParams.tool_calls) {\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n }\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n })) as $InferToolCalls<TStructure>[];\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...(missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n })) as ContentBlock.Tools.ToolCall[])\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n /**\n * Type guard to check if an object is an AIMessage.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessage<T>;\n /**\n * Type guard to check if an object is an AIMessage.\n * @overload When called with unknown, returns base AIMessage type\n */\n static isInstance(obj: unknown): obj is AIMessage;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessage<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure,\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure,\n>\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: $InferToolCalls<TStructure>[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (\n fields.tool_call_chunks === undefined ||\n fields.tool_call_chunks.length === 0\n ) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const collapsed = collapseToolCallChunks(fields.tool_call_chunks ?? []);\n initParams = {\n ...fields,\n tool_call_chunks: collapsed.tool_call_chunks,\n tool_calls: collapsed.tool_calls as $InferToolCalls<TStructure>[],\n invalid_tool_calls: collapsed.invalid_tool_calls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this as AIMessage);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n tool_calls: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (this.tool_calls !== undefined || chunk.tool_calls !== undefined) {\n const rawToolCalls = _mergeLists(\n this.tool_calls as ContentBlock.Tools.ToolCall[],\n chunk.tool_calls as ContentBlock.Tools.ToolCall[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_calls =\n rawToolCalls as $InferToolCalls<TStructure>[];\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * Preserves the MessageStructure type parameter when called with a typed BaseMessage.\n * @overload When called with a typed BaseMessage, preserves the TStructure type\n */\n static isInstance<T extends MessageStructure>(\n obj: BaseMessage<T>\n ): obj is BaseMessage<T> & AIMessageChunk<T>;\n /**\n * Type guard to check if an object is an AIMessageChunk.\n * @overload When called with unknown, returns base AIMessageChunk type\n */\n static isInstance(obj: unknown): obj is AIMessageChunk;\n static isInstance<T extends MessageStructure = MessageStructure>(\n obj: BaseMessage<T> | unknown\n ): obj is AIMessageChunk<T> {\n return super.isInstance(obj) && (obj as { type: string }).type === \"ai\";\n }\n}\n"],"mappings":";;;;;;;AAgCA,IAAa,YAAb,cACU,YAEV;CACE,AAAS,OAAO;CAEhB,aAA6C,EAAE;CAE/C,qBAAyC,EAAE;CAE3C;CAEA,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACrB;;CAGH,YACE,QACA;EACA,IAAI;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CACrD,cAAa;GACX,SAAS;GACT,YAAY,EAAE;GACd,oBAAoB,EAAE;GACtB,mBAAmB,EAAE;GACtB;OACI;AACL,gBAAa;GACb,MAAM,eAAe,WAAW,mBAAmB;GACnD,MAAM,YAAY,WAAW;AAC7B,OACE,EAAE,gBAAgB,SAClB,aAAa,SAAS,MACrB,cAAc,UAAa,UAAU,WAAW,GAEjD,SAAQ,KACN;IACE;IACA;IACA;IACA;IACD,CAAC,KAAK,IAAI,CACZ;AAEH,OAAI;AACF,QAAI,EAAE,gBAAgB,SAAS,cAAc,QAAW;KACtD,MAAM,CAAC,iBAAiB,oBACtB,sBAAsB,aAAa;AACrC,gBAAW,aACR,mBAAqD,EAAE;AAC1D,gBAAW,qBAAqB,oBAAoB,EAAE;WACjD;AACL,gBAAW,aAAa,WAAW,cAAc,EAAE;AACnD,gBAAW,qBAAqB,WAAW,sBAAsB,EAAE;;WAE/D;AAEN,eAAW,aAAa,EAAE;AAC1B,eAAW,qBAAqB,EAAE;;AAIpC,OACE,WAAW,sBAAsB,UACjC,oBAAoB,WAAW,qBAC/B,WAAW,kBAAkB,mBAAmB,MAChD;AACA,eAAW,gBACT,WAAW;AACb,eAAW,UAAU;;AAGvB,OAAI,WAAW,kBAAkB,QAAW;AAE1C,QAAI,WAAW,WACb,YAAW,cAAc,KACvB,GAAG,WAAW,WAAW,KAAK,cAAc;KAC1C,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;KAChB,EAAE,CACJ;IAGH,MAAM,mBAAmB,WAAW,cACjC,QACE,UACC,MAAM,SAAS,YAClB,CACA,QACE,UACC,CAAC,WAAW,YAAY,MACrB,aACC,SAAS,OAAO,MAAM,MAAM,SAAS,SAAS,MAAM,KACvD,CACJ;AACH,QAAI,iBAAiB,SAAS,EAC5B,YAAW,aAAa,iBAAiB,KAAK,WAAW;KACvD,MAAM;KACN,IAAI,MAAM;KACV,MAAM,MAAM;KACZ,MAAM,MAAM;KACb,EAAE;;;AAMT,QAAM,WAAW;AACjB,MAAI,OAAO,eAAe,UAAU;AAClC,QAAK,aAAa,WAAW,cAAc,KAAK;AAChD,QAAK,qBACH,WAAW,sBAAsB,KAAK;;AAE1C,OAAK,iBAAiB,WAAW;;CAGnC,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAa,cAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAkB;;EAIzD,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YAAY;GACnB,MAAM,mBAAmB,KAAK,WAAW,QACtC,UACC,CAAC,OAAO,MAAM,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK,CAClE;AACD,UAAO,KACL,GAAI,iBAAiB,KAAK,WAAW;IACnC,MAAM;IACN,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;IACb,EAAE,CACJ;;AAGH,SAAO;;CAGT,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;GACtB;;CAgBH,OAAO,WACL,KACqB;AACrB,SAAO,MAAM,WAAW,IAAI,IAAK,IAAyB,SAAS;;;;;;AAOvE,SAAgB,YACd,GAC4B;AAC5B,QAAO,EAAE,UAAU,KAAK;;;;;AAM1B,SAAgB,iBACd,GACiC;AACjC,QAAO,EAAE,UAAU,KAAK;;;;;;AAa1B,IAAa,iBAAb,cAGU,iBAEV;CACE,AAAS,OAAO;CAEhB,aAA6C,EAAE;CAE/C,qBAAyC,EAAE;CAE3C,mBAAqC,EAAE;CAEvC;CAEA,YACE,QAGA;EACA,IAAI;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,CACrD,cAAa;GACX,SAAS;GACT,YAAY,EAAE;GACd,oBAAoB,EAAE;GACtB,kBAAkB,EAAE;GACrB;WAED,OAAO,qBAAqB,UAC5B,OAAO,iBAAiB,WAAW,EAEnC,cAAa;GACX,GAAG;GACH,YAAY,OAAO,cAAc,EAAE;GACnC,oBAAoB,EAAE;GACtB,kBAAkB,EAAE;GACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;GACP;OACI;GACL,MAAM,YAAY,uBAAuB,OAAO,oBAAoB,EAAE,CAAC;AACvE,gBAAa;IACX,GAAG;IACH,kBAAkB,UAAU;IAC5B,YAAY,UAAU;IACtB,oBAAoB,UAAU;IAC9B,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;IACP;;AAIH,QAAM,WAAW;AACjB,OAAK,mBACH,WAAW,oBAAoB,KAAK;AACtC,OAAK,aAAa,WAAW,cAAc,KAAK;AAChD,OAAK,qBACH,WAAW,sBAAsB,KAAK;AACxC,OAAK,iBAAiB,WAAW;;CAGnC,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACpB,kBAAkB;GACnB;;CAGH,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAa,cAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAkB;;EAIzD,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YACP;OAAI,OAAO,KAAK,YAAY,UAAU;IACpC,MAAM,mBAAmB,KAAK,QAC3B,QAAQ,UAAU,MAAM,SAAS,YAAY,CAC7C,KAAK,UAAU,MAAM,GAAG;AAC3B,SAAK,MAAM,YAAY,KAAK,WAC1B,KAAI,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,GAAG,CACxD,QAAO,KAAK;KACV,GAAG;KACH,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;KAChB,CAAC;;;AAMV,SAAO;;CAGT,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,kBAAkB,KAAK;GACvB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;GACtB;;CAGH,OAAO,OAAmC;EACxC,MAAM,iBAAuC;GAC3C,SAAS,aAAa,KAAK,SAAS,MAAM,QAAQ;GAClD,mBAAmB,YACjB,KAAK,mBACL,MAAM,kBACP;GACD,mBAAmB,sBACjB,KAAK,mBACL,MAAM,kBACP;GACD,kBAAkB,EAAE;GACpB,YAAY,EAAE;GACd,IAAI,KAAK,MAAM,MAAM;GACtB;AACD,MACE,KAAK,qBAAqB,UAC1B,MAAM,qBAAqB,QAC3B;GACA,MAAM,eAAe,YACnB,KAAK,kBACL,MAAM,iBACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,EACtD,gBAAe,mBAAmB;;AAGtC,MAAI,KAAK,eAAe,UAAa,MAAM,eAAe,QAAW;GACnE,MAAM,eAAe,YACnB,KAAK,YACL,MAAM,WACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,EACtD,gBAAe,aACb;;AAGN,MACE,KAAK,mBAAmB,UACxB,MAAM,mBAAmB,OAEzB,gBAAe,iBAAiB,mBAC9B,KAAK,gBACL,MAAM,eACP;EAEH,MAAM,MAAM,KAAK;AACjB,SAAO,IAAI,IAAI,eAAe;;CAgBhC,OAAO,WACL,KAC0B;AAC1B,SAAO,MAAM,WAAW,IAAI,IAAK,IAAyB,SAAS"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/core",
3
- "version": "1.1.25",
3
+ "version": "1.1.27",
4
4
  "description": "Core LangChain.js abstractions and schemas",
5
5
  "type": "module",
6
6
  "engines": {
@@ -17,7 +17,7 @@
17
17
  "license": "MIT",
18
18
  "dependencies": {
19
19
  "@cfworker/json-schema": "^4.0.2",
20
- "ansi-styles": "^6.2.3",
20
+ "ansi-styles": "^5.0.0",
21
21
  "camelcase": "6",
22
22
  "decamelize": "1.2.0",
23
23
  "js-tiktoken": "^1.0.12",