UNPKG

@langchain/core

Version:
1 lines 22.6 kB
{"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\nfunction coerceToContentBlocks(value: unknown): ContentBlock.Standard[] {\n if (typeof value === \"string\") {\n return value.length > 0 ? [{ type: \"text\", text: value }] : [];\n }\n if (Array.isArray(value)) {\n return value as Array<ContentBlock.Standard>;\n }\n if (value == null) {\n return [];\n }\n return [value as ContentBlock.Standard];\n}\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 usage_metadata: \"usage_metadata\",\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 // Serialized LangGraph payloads often still carry string `content` even\n // when `output_version` is \"v1\"; normalize to an array before mutating.\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\" &&\n initParams.content !== undefined\n ) {\n initParams.contentBlocks = coerceToContentBlocks(initParams.content);\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n if (!Array.isArray(initParams.contentBlocks)) {\n initParams.contentBlocks = coerceToContentBlocks(\n initParams.contentBlocks\n );\n }\n // Add constructor tool calls as content blocks only when they are not\n // already represented in the v1 content payload.\n if (initParams.tool_calls) {\n const missingContentBlockToolCalls = initParams.tool_calls.filter(\n (toolCall) =>\n !initParams.contentBlocks?.some(\n (block) =>\n block.type === \"tool_call\" &&\n block.id === toolCall.id &&\n block.name === toolCall.name\n )\n );\n initParams.contentBlocks.push(\n ...missingContentBlockToolCalls.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 = [\n ...(initParams.tool_calls ?? []),\n ...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 })),\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 static [Symbol.hasInstance](obj: unknown) {\n return this.isInstance(obj);\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 usage_metadata: \"usage_metadata\",\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 as ToolCallChunk[];\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 static [Symbol.hasInstance](obj: unknown) {\n return this.isInstance(obj);\n }\n}\n"],"mappings":"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"}