@langchain/core 1.0.1 → 1.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","names":["Serializable","SerializedConstructor","ContentBlock","$InferMessageContent","$InferResponseMetadata","MessageStructure","MessageType","Message","MESSAGE_SYMBOL","StoredMessageData","Record","StoredMessage","StoredGeneration","StoredMessageV1","MessageContent","Array","FunctionCall","BaseMessageFields","TStructure","TRole","Standard","OpenAIToolCall","Partial","mergeContent","_mergeStatus","BaseMessage","NonNullable","Symbol","toStringTag","isOpenAIToolCallArray","_mergeDicts","_mergeLists","Content","_mergeObj","T","BaseMessageChunk","MessageFieldWithRole","_isMessageFieldWithRole","BaseMessageLike","isBaseMessage","isBaseMessageChunk"],"sources":["../../src/messages/base.d.ts"],"sourcesContent":["import { Serializable, SerializedConstructor } from \"../load/serializable.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport { $InferMessageContent, $InferResponseMetadata, MessageStructure, MessageType, Message } from \"./message.js\";\n/** @internal */\ndeclare const MESSAGE_SYMBOL: unique symbol;\nexport interface StoredMessageData {\n content: string;\n role: string | undefined;\n name: string | undefined;\n tool_call_id: string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additional_kwargs?: Record<string, any>;\n /** Response metadata. For example: response headers, logprobs, token counts, model name. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response_metadata?: Record<string, any>;\n id?: string;\n}\nexport interface StoredMessage {\n type: string;\n data: StoredMessageData;\n}\nexport interface StoredGeneration {\n text: string;\n message?: StoredMessage;\n}\nexport interface StoredMessageV1 {\n type: string;\n role: string | undefined;\n text: string;\n}\nexport type MessageContent = string | Array<ContentBlock>;\nexport interface FunctionCall {\n /**\n * The arguments to call the function with, as generated by the model in JSON\n * format. Note that the model does not always generate valid JSON, and may\n * hallucinate parameters not defined by your function schema. Validate the\n * arguments in your code before calling your function.\n */\n arguments: string;\n /**\n * The name of the function to call.\n */\n name: string;\n}\nexport type BaseMessageFields<TStructure extends MessageStructure = MessageStructure, TRole extends MessageType = MessageType> = {\n id?: string;\n name?: string;\n content?: $InferMessageContent<TStructure, TRole>;\n contentBlocks?: Array<ContentBlock.Standard>;\n /** @deprecated */\n additional_kwargs?: {\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n function_call?: FunctionCall;\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n tool_calls?: OpenAIToolCall[];\n [key: string]: unknown;\n };\n response_metadata?: Partial<$InferResponseMetadata<TStructure, TRole>>;\n};\nexport declare function mergeContent(firstContent: MessageContent, secondContent: MessageContent): MessageContent;\n/**\n * 'Merge' two statuses. If either value passed is 'error', it will return 'error'. Else\n * it will return 'success'.\n *\n * @param {\"success\" | \"error\" | undefined} left The existing value to 'merge' with the new value.\n * @param {\"success\" | \"error\" | undefined} right The new value to 'merge' with the existing value\n * @returns {\"success\" | \"error\"} The 'merged' value.\n */\nexport declare function _mergeStatus(left?: \"success\" | \"error\", right?: \"success\" | \"error\"): \"success\" | \"error\" | undefined;\n/**\n * Base class for all types of messages in a conversation. It includes\n * properties like `content`, `name`, and `additional_kwargs`. It also\n * includes methods like `toDict()` and `_getType()`.\n */\nexport declare abstract class BaseMessage<TStructure extends MessageStructure = MessageStructure, TRole extends MessageType = MessageType> extends Serializable implements Message<TStructure, TRole> {\n lc_namespace: string[];\n lc_serializable: boolean;\n get lc_aliases(): Record<string, string>;\n readonly [MESSAGE_SYMBOL]: true;\n abstract readonly type: TRole;\n id?: string;\n name?: string;\n content: $InferMessageContent<TStructure, TRole>;\n additional_kwargs: NonNullable<BaseMessageFields<TStructure, TRole>[\"additional_kwargs\"]>;\n response_metadata: NonNullable<BaseMessageFields<TStructure, TRole>[\"response_metadata\"]>;\n /**\n * @deprecated Use .getType() instead or import the proper typeguard.\n * For example:\n *\n * ```ts\n * import { isAIMessage } from \"@langchain/core/messages\";\n *\n * const message = new AIMessage(\"Hello!\");\n * isAIMessage(message); // true\n * ```\n */\n _getType(): MessageType;\n /**\n * @deprecated Use .type instead\n * The type of the message.\n */\n getType(): MessageType;\n constructor(arg: $InferMessageContent<TStructure, TRole> | BaseMessageFields<TStructure, TRole>);\n /** Get text content of the message. */\n get text(): string;\n get contentBlocks(): Array<ContentBlock.Standard>;\n toDict(): StoredMessage;\n static lc_name(): string;\n // Can't be protected for silly reasons\n get _printableFields(): Record<string, unknown>;\n static isInstance(obj: unknown): obj is BaseMessage;\n // this private method is used to update the ID for the runtime\n // value as well as in lc_kwargs for serialisation\n _updateId(value: string | undefined): void;\n get [Symbol.toStringTag](): any;\n}\n/**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\nexport type OpenAIToolCall = {\n /**\n * The ID of the tool call.\n */\n id: string;\n /**\n * The function that the model called.\n */\n function: FunctionCall;\n /**\n * The type of the tool. Currently, only `function` is supported.\n */\n type: \"function\";\n index?: number;\n};\nexport declare function isOpenAIToolCallArray(value?: unknown): value is OpenAIToolCall[];\nexport declare function _mergeDicts(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nleft?: Record<string, any>, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nright?: Record<string, any>\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any>;\nexport declare function _mergeLists<Content extends ContentBlock>(left?: Content[], right?: Content[]): Content[] | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare function _mergeObj<T = any>(left: T | undefined, right: T | undefined): T;\n/**\n * Represents a chunk of a message, which can be concatenated with other\n * message chunks. It includes a method `_merge_kwargs_dict()` for merging\n * additional keyword arguments from another `BaseMessageChunk` into this\n * one. It also overrides the `__add__()` method to support concatenation\n * of `BaseMessageChunk` instances.\n */\nexport declare abstract class BaseMessageChunk<TStructure extends MessageStructure = MessageStructure, TRole extends MessageType = MessageType> extends BaseMessage<TStructure, TRole> {\n abstract concat(chunk: BaseMessageChunk): BaseMessageChunk<TStructure, TRole>;\n static isInstance(obj: unknown): obj is BaseMessageChunk;\n}\nexport type MessageFieldWithRole = {\n role: MessageType;\n content: MessageContent;\n name?: string;\n} & Record<string, unknown>;\nexport declare function _isMessageFieldWithRole(x: BaseMessageLike): x is MessageFieldWithRole;\nexport type BaseMessageLike = BaseMessage | MessageFieldWithRole | [MessageType, MessageContent] | string\n/**\n * @deprecated Specifying \"type\" is deprecated and will be removed in 0.4.0.\n */\n | ({\n type: MessageType | \"user\" | \"assistant\" | \"placeholder\";\n} & BaseMessageFields & Record<string, unknown>) | SerializedConstructor;\n/**\n * @deprecated Use {@link BaseMessage.isInstance} instead\n */\nexport declare function isBaseMessage(messageLike?: unknown): messageLike is BaseMessage;\n/**\n * @deprecated Use {@link BaseMessageChunk.isInstance} instead\n */\nexport declare function isBaseMessageChunk(messageLike?: unknown): messageLike is BaseMessageChunk;\nexport {};\n"],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","names":["Serializable","SerializedConstructor","ContentBlock","$InferMessageContent","$InferResponseMetadata","MessageStructure","MessageType","Message","MessageStringFormat","MESSAGE_SYMBOL","StoredMessageData","Record","StoredMessage","StoredGeneration","StoredMessageV1","MessageContent","Array","FunctionCall","BaseMessageFields","TStructure","TRole","Standard","OpenAIToolCall","Partial","mergeContent","_mergeStatus","BaseMessage","NonNullable","Symbol","toStringTag","isOpenAIToolCallArray","_mergeDicts","_mergeLists","Content","_mergeObj","T","BaseMessageChunk","MessageFieldWithRole","_isMessageFieldWithRole","BaseMessageLike","isBaseMessage","isBaseMessageChunk"],"sources":["../../src/messages/base.d.ts"],"sourcesContent":["import { Serializable, SerializedConstructor } from \"../load/serializable.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport { $InferMessageContent, $InferResponseMetadata, MessageStructure, MessageType, Message } from \"./message.js\";\nimport { type MessageStringFormat } from \"./format.js\";\n/** @internal */\ndeclare const MESSAGE_SYMBOL: unique symbol;\nexport interface StoredMessageData {\n content: string;\n role: string | undefined;\n name: string | undefined;\n tool_call_id: string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additional_kwargs?: Record<string, any>;\n /** Response metadata. For example: response headers, logprobs, token counts, model name. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response_metadata?: Record<string, any>;\n id?: string;\n}\nexport interface StoredMessage {\n type: string;\n data: StoredMessageData;\n}\nexport interface StoredGeneration {\n text: string;\n message?: StoredMessage;\n}\nexport interface StoredMessageV1 {\n type: string;\n role: string | undefined;\n text: string;\n}\nexport type MessageContent = string | Array<ContentBlock>;\nexport interface FunctionCall {\n /**\n * The arguments to call the function with, as generated by the model in JSON\n * format. Note that the model does not always generate valid JSON, and may\n * hallucinate parameters not defined by your function schema. Validate the\n * arguments in your code before calling your function.\n */\n arguments: string;\n /**\n * The name of the function to call.\n */\n name: string;\n}\nexport type BaseMessageFields<TStructure extends MessageStructure = MessageStructure, TRole extends MessageType = MessageType> = {\n id?: string;\n name?: string;\n content?: $InferMessageContent<TStructure, TRole>;\n contentBlocks?: Array<ContentBlock.Standard>;\n /** @deprecated */\n additional_kwargs?: {\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n function_call?: FunctionCall;\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n tool_calls?: OpenAIToolCall[];\n [key: string]: unknown;\n };\n response_metadata?: Partial<$InferResponseMetadata<TStructure, TRole>>;\n};\nexport declare function mergeContent(firstContent: MessageContent, secondContent: MessageContent): MessageContent;\n/**\n * 'Merge' two statuses. If either value passed is 'error', it will return 'error'. Else\n * it will return 'success'.\n *\n * @param {\"success\" | \"error\" | undefined} left The existing value to 'merge' with the new value.\n * @param {\"success\" | \"error\" | undefined} right The new value to 'merge' with the existing value\n * @returns {\"success\" | \"error\"} The 'merged' value.\n */\nexport declare function _mergeStatus(left?: \"success\" | \"error\", right?: \"success\" | \"error\"): \"success\" | \"error\" | undefined;\n/**\n * Base class for all types of messages in a conversation. It includes\n * properties like `content`, `name`, and `additional_kwargs`. It also\n * includes methods like `toDict()` and `_getType()`.\n */\nexport declare abstract class BaseMessage<TStructure extends MessageStructure = MessageStructure, TRole extends MessageType = MessageType> extends Serializable implements Message<TStructure, TRole> {\n lc_namespace: string[];\n lc_serializable: boolean;\n get lc_aliases(): Record<string, string>;\n readonly [MESSAGE_SYMBOL]: true;\n abstract readonly type: TRole;\n id?: string;\n name?: string;\n content: $InferMessageContent<TStructure, TRole>;\n additional_kwargs: NonNullable<BaseMessageFields<TStructure, TRole>[\"additional_kwargs\"]>;\n response_metadata: NonNullable<BaseMessageFields<TStructure, TRole>[\"response_metadata\"]>;\n /**\n * @deprecated Use .getType() instead or import the proper typeguard.\n * For example:\n *\n * ```ts\n * import { isAIMessage } from \"@langchain/core/messages\";\n *\n * const message = new AIMessage(\"Hello!\");\n * isAIMessage(message); // true\n * ```\n */\n _getType(): MessageType;\n /**\n * @deprecated Use .type instead\n * The type of the message.\n */\n getType(): MessageType;\n constructor(arg: $InferMessageContent<TStructure, TRole> | BaseMessageFields<TStructure, TRole>);\n /** Get text content of the message. */\n get text(): string;\n get contentBlocks(): Array<ContentBlock.Standard>;\n toDict(): StoredMessage;\n static lc_name(): string;\n // Can't be protected for silly reasons\n get _printableFields(): Record<string, unknown>;\n static isInstance(obj: unknown): obj is BaseMessage;\n // this private method is used to update the ID for the runtime\n // value as well as in lc_kwargs for serialisation\n _updateId(value: string | undefined): void;\n get [Symbol.toStringTag](): any;\n toFormattedString(format?: MessageStringFormat): string;\n}\n/**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\nexport type OpenAIToolCall = {\n /**\n * The ID of the tool call.\n */\n id: string;\n /**\n * The function that the model called.\n */\n function: FunctionCall;\n /**\n * The type of the tool. Currently, only `function` is supported.\n */\n type: \"function\";\n index?: number;\n};\nexport declare function isOpenAIToolCallArray(value?: unknown): value is OpenAIToolCall[];\nexport declare function _mergeDicts(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nleft?: Record<string, any>, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nright?: Record<string, any>\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any>;\nexport declare function _mergeLists<Content extends ContentBlock>(left?: Content[], right?: Content[]): Content[] | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare function _mergeObj<T = any>(left: T | undefined, right: T | undefined): T;\n/**\n * Represents a chunk of a message, which can be concatenated with other\n * message chunks. It includes a method `_merge_kwargs_dict()` for merging\n * additional keyword arguments from another `BaseMessageChunk` into this\n * one. It also overrides the `__add__()` method to support concatenation\n * of `BaseMessageChunk` instances.\n */\nexport declare abstract class BaseMessageChunk<TStructure extends MessageStructure = MessageStructure, TRole extends MessageType = MessageType> extends BaseMessage<TStructure, TRole> {\n abstract concat(chunk: BaseMessageChunk): BaseMessageChunk<TStructure, TRole>;\n static isInstance(obj: unknown): obj is BaseMessageChunk;\n}\nexport type MessageFieldWithRole = {\n role: MessageType;\n content: MessageContent;\n name?: string;\n} & Record<string, unknown>;\nexport declare function _isMessageFieldWithRole(x: BaseMessageLike): x is MessageFieldWithRole;\nexport type BaseMessageLike = BaseMessage | MessageFieldWithRole | [MessageType, MessageContent] | string\n/**\n * @deprecated Specifying \"type\" is deprecated and will be removed in 0.4.0.\n */\n | ({\n type: MessageType | \"user\" | \"assistant\" | \"placeholder\";\n} & BaseMessageFields & Record<string, unknown>) | SerializedConstructor;\n/**\n * @deprecated Use {@link BaseMessage.isInstance} instead\n */\nexport declare function isBaseMessage(messageLike?: unknown): messageLike is BaseMessage;\n/**\n * @deprecated Use {@link BaseMessageChunk.isInstance} instead\n */\nexport declare function isBaseMessageChunk(messageLike?: unknown): messageLike is BaseMessageChunk;\nexport {};\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { convertToV1FromAnthropicInput } from "./block_translators/anthropic.js"
4
4
  import { convertToV1FromDataContent } from "./block_translators/data.js";
5
5
  import { convertToV1FromChatCompletionsInput } from "./block_translators/openai.js";
6
6
  import { isMessage } from "./message.js";
7
+ import { convertToFormattedString } from "./format.js";
7
8
 
8
9
  //#region src/messages/base.ts
9
10
  /** @internal */
@@ -178,6 +179,9 @@ var BaseMessage = class extends Serializable {
178
179
  const printable = stringifyWithDepthLimit(this._printableFields, Math.max(4, depth));
179
180
  return `${this.constructor.lc_name()} ${printable}`;
180
181
  }
182
+ toFormattedString(format = "pretty") {
183
+ return convertToFormattedString(this, format);
184
+ }
181
185
  };
182
186
  function isOpenAIToolCallArray(value) {
183
187
  return Array.isArray(value) && value.every((v) => typeof v.index === "number");
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","names":["firstContent: MessageContent","secondContent: MessageContent","left?: \"success\" | \"error\"","right?: \"success\" | \"error\"","obj: any","depthLimit: number","currentDepth: number","obj","result: Record<string, unknown>","arg:\n | $InferMessageContent<TStructure, TRole>\n | BaseMessageFields<TStructure, TRole>","fields: BaseMessageFields<TStructure, TRole>","blocks: Array<ContentBlock>","blocks","obj: unknown","value: string | undefined","depth: number | null","value?: unknown","left: Record<string, any>","right: Record<string, any>","left?: Content[]","right?: Content[]","left: T | undefined","right: T | undefined","x: BaseMessageLike","messageLike?: unknown"],"sources":["../../src/messages/base.ts"],"sourcesContent":["import { Serializable, SerializedConstructor } from \"../load/serializable.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport { isDataContentBlock } from \"./content/data.js\";\nimport { convertToV1FromAnthropicInput } from \"./block_translators/anthropic.js\";\nimport { convertToV1FromDataContent } from \"./block_translators/data.js\";\nimport { convertToV1FromChatCompletionsInput } from \"./block_translators/openai.js\";\nimport {\n $InferMessageContent,\n $InferResponseMetadata,\n MessageStructure,\n MessageType,\n isMessage,\n Message,\n} from \"./message.js\";\n\n/** @internal */\nconst MESSAGE_SYMBOL = Symbol.for(\"langchain.message\");\n\nexport interface StoredMessageData {\n content: string;\n role: string | undefined;\n name: string | undefined;\n tool_call_id: string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additional_kwargs?: Record<string, any>;\n /** Response metadata. For example: response headers, logprobs, token counts, model name. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response_metadata?: Record<string, any>;\n id?: string;\n}\n\nexport interface StoredMessage {\n type: string;\n data: StoredMessageData;\n}\n\nexport interface StoredGeneration {\n text: string;\n message?: StoredMessage;\n}\n\nexport interface StoredMessageV1 {\n type: string;\n role: string | undefined;\n text: string;\n}\n\nexport type MessageContent = string | Array<ContentBlock>;\n\nexport interface FunctionCall {\n /**\n * The arguments to call the function with, as generated by the model in JSON\n * format. Note that the model does not always generate valid JSON, and may\n * hallucinate parameters not defined by your function schema. Validate the\n * arguments in your code before calling your function.\n */\n arguments: string;\n\n /**\n * The name of the function to call.\n */\n name: string;\n}\n\nexport type BaseMessageFields<\n TStructure extends MessageStructure = MessageStructure,\n TRole extends MessageType = MessageType\n> = {\n id?: string;\n name?: string;\n content?: $InferMessageContent<TStructure, TRole>;\n contentBlocks?: Array<ContentBlock.Standard>;\n /** @deprecated */\n additional_kwargs?: {\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n function_call?: FunctionCall;\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n tool_calls?: OpenAIToolCall[];\n [key: string]: unknown;\n };\n response_metadata?: Partial<$InferResponseMetadata<TStructure, TRole>>;\n};\n\nexport function mergeContent(\n firstContent: MessageContent,\n secondContent: MessageContent\n): MessageContent {\n // If first content is a string\n if (typeof firstContent === \"string\") {\n if (firstContent === \"\") {\n return secondContent;\n }\n if (typeof secondContent === \"string\") {\n return firstContent + secondContent;\n } else if (\n Array.isArray(secondContent) &&\n secondContent.some((c) => isDataContentBlock(c))\n ) {\n return [\n {\n type: \"text\",\n source_type: \"text\",\n text: firstContent,\n },\n ...secondContent,\n ];\n } else {\n return [{ type: \"text\", text: firstContent }, ...secondContent];\n }\n // If both are arrays\n } else if (Array.isArray(secondContent)) {\n return (\n _mergeLists(firstContent, secondContent) ?? [\n ...firstContent,\n ...secondContent,\n ]\n );\n } else {\n if (secondContent === \"\") {\n return firstContent;\n } else if (\n Array.isArray(firstContent) &&\n firstContent.some((c) => isDataContentBlock(c))\n ) {\n return [\n ...firstContent,\n {\n type: \"file\",\n source_type: \"text\",\n text: secondContent,\n },\n ];\n } else {\n return [...firstContent, { type: \"text\", text: secondContent }];\n }\n }\n}\n\n/**\n * 'Merge' two statuses. If either value passed is 'error', it will return 'error'. Else\n * it will return 'success'.\n *\n * @param {\"success\" | \"error\" | undefined} left The existing value to 'merge' with the new value.\n * @param {\"success\" | \"error\" | undefined} right The new value to 'merge' with the existing value\n * @returns {\"success\" | \"error\"} The 'merged' value.\n */\nexport function _mergeStatus(\n left?: \"success\" | \"error\",\n right?: \"success\" | \"error\"\n): \"success\" | \"error\" | undefined {\n if (left === \"error\" || right === \"error\") {\n return \"error\";\n }\n return \"success\";\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction stringifyWithDepthLimit(obj: any, depthLimit: number): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function helper(obj: any, currentDepth: number): any {\n if (typeof obj !== \"object\" || obj === null || obj === undefined) {\n return obj;\n }\n if (currentDepth >= depthLimit) {\n if (Array.isArray(obj)) {\n return \"[Array]\";\n }\n return \"[Object]\";\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => helper(item, currentDepth + 1));\n }\n\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n result[key] = helper(obj[key], currentDepth + 1);\n }\n return result;\n }\n\n return JSON.stringify(helper(obj, 0), null, 2);\n}\n\n/**\n * Base class for all types of messages in a conversation. It includes\n * properties like `content`, `name`, and `additional_kwargs`. It also\n * includes methods like `toDict()` and `_getType()`.\n */\nexport abstract class BaseMessage<\n TStructure extends MessageStructure = MessageStructure,\n TRole extends MessageType = MessageType\n >\n extends Serializable\n implements Message<TStructure, TRole>\n{\n lc_namespace = [\"langchain_core\", \"messages\"];\n\n lc_serializable = true;\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n additional_kwargs: \"additional_kwargs\",\n response_metadata: \"response_metadata\",\n };\n }\n\n readonly [MESSAGE_SYMBOL] = true as const;\n\n abstract readonly type: TRole;\n\n id?: string;\n\n name?: string;\n\n content: $InferMessageContent<TStructure, TRole>;\n\n additional_kwargs: NonNullable<\n BaseMessageFields<TStructure, TRole>[\"additional_kwargs\"]\n >;\n\n response_metadata: NonNullable<\n BaseMessageFields<TStructure, TRole>[\"response_metadata\"]\n >;\n\n /**\n * @deprecated Use .getType() instead or import the proper typeguard.\n * For example:\n *\n * ```ts\n * import { isAIMessage } from \"@langchain/core/messages\";\n *\n * const message = new AIMessage(\"Hello!\");\n * isAIMessage(message); // true\n * ```\n */\n _getType(): MessageType {\n return this.type;\n }\n\n /**\n * @deprecated Use .type instead\n * The type of the message.\n */\n getType(): MessageType {\n return this._getType();\n }\n\n constructor(\n arg:\n | $InferMessageContent<TStructure, TRole>\n | BaseMessageFields<TStructure, TRole>\n ) {\n const fields: BaseMessageFields<TStructure, TRole> =\n typeof arg === \"string\" || Array.isArray(arg) ? { content: arg } : arg;\n if (!fields.additional_kwargs) {\n fields.additional_kwargs = {};\n }\n if (!fields.response_metadata) {\n fields.response_metadata = {};\n }\n super(fields);\n this.name = fields.name;\n if (fields.content === undefined && fields.contentBlocks !== undefined) {\n this.content = fields.contentBlocks as $InferMessageContent<\n TStructure,\n TRole\n >;\n this.response_metadata = {\n output_version: \"v1\",\n ...fields.response_metadata,\n };\n } else if (fields.content !== undefined) {\n this.content = fields.content ?? [];\n this.response_metadata = fields.response_metadata;\n } else {\n this.content = [] as $InferMessageContent<TStructure, TRole>;\n this.response_metadata = fields.response_metadata;\n }\n this.additional_kwargs = fields.additional_kwargs;\n this.id = fields.id;\n }\n\n /** Get text content of the message. */\n get text(): string {\n if (typeof this.content === \"string\") {\n return this.content;\n }\n if (!Array.isArray(this.content)) return \"\";\n return this.content\n .map((c) => {\n if (typeof c === \"string\") return c;\n if (c.type === \"text\") return c.text;\n return \"\";\n })\n .join(\"\");\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n const blocks: Array<ContentBlock> =\n typeof this.content === \"string\"\n ? [{ type: \"text\", text: this.content }]\n : this.content;\n const parsingSteps = [\n convertToV1FromDataContent,\n convertToV1FromChatCompletionsInput,\n convertToV1FromAnthropicInput,\n ];\n const parsedBlocks = parsingSteps.reduce(\n (blocks, step) => step(blocks),\n blocks\n );\n return parsedBlocks as Array<ContentBlock.Standard>;\n }\n\n toDict(): StoredMessage {\n return {\n type: this.getType(),\n data: (this.toJSON() as SerializedConstructor)\n .kwargs as StoredMessageData,\n };\n }\n\n static lc_name() {\n return \"BaseMessage\";\n }\n\n // Can't be protected for silly reasons\n get _printableFields(): Record<string, unknown> {\n return {\n id: this.id,\n content: this.content,\n name: this.name,\n additional_kwargs: this.additional_kwargs,\n response_metadata: this.response_metadata,\n };\n }\n\n static isInstance(obj: unknown): obj is BaseMessage {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n MESSAGE_SYMBOL in obj &&\n obj[MESSAGE_SYMBOL] === true &&\n isMessage(obj)\n );\n }\n\n // this private method is used to update the ID for the runtime\n // value as well as in lc_kwargs for serialisation\n _updateId(value: string | undefined) {\n this.id = value;\n\n // lc_attributes wouldn't work here, because jest compares the\n // whole object\n this.lc_kwargs.id = value;\n }\n\n get [Symbol.toStringTag]() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.constructor as any).lc_name();\n }\n\n // Override the default behavior of console.log\n [Symbol.for(\"nodejs.util.inspect.custom\")](depth: number | null) {\n if (depth === null) {\n return this;\n }\n const printable = stringifyWithDepthLimit(\n this._printableFields,\n Math.max(4, depth)\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `${(this.constructor as any).lc_name()} ${printable}`;\n }\n}\n\n/**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\nexport type OpenAIToolCall = {\n /**\n * The ID of the tool call.\n */\n id: string;\n\n /**\n * The function that the model called.\n */\n function: FunctionCall;\n\n /**\n * The type of the tool. Currently, only `function` is supported.\n */\n type: \"function\";\n\n index?: number;\n};\n\nexport function isOpenAIToolCallArray(\n value?: unknown\n): value is OpenAIToolCall[] {\n return (\n Array.isArray(value) &&\n value.every((v) => typeof (v as OpenAIToolCall).index === \"number\")\n );\n}\n\nexport function _mergeDicts(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n left: Record<string, any> = {},\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n right: Record<string, any> = {}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n const merged = { ...left };\n for (const [key, value] of Object.entries(right)) {\n if (merged[key] == null) {\n merged[key] = value;\n } else if (value == null) {\n continue;\n } else if (\n typeof merged[key] !== typeof value ||\n Array.isArray(merged[key]) !== Array.isArray(value)\n ) {\n throw new Error(\n `field[${key}] already exists in the message chunk, but with a different type.`\n );\n } else if (typeof merged[key] === \"string\") {\n if (key === \"type\") {\n // Do not merge 'type' fields\n continue;\n } else if (\n [\"id\", \"name\", \"output_version\", \"model_provider\"].includes(key)\n ) {\n // Keep the incoming value for these fields\n merged[key] = value;\n } else {\n merged[key] += value;\n }\n } else if (typeof merged[key] === \"object\" && !Array.isArray(merged[key])) {\n merged[key] = _mergeDicts(merged[key], value);\n } else if (Array.isArray(merged[key])) {\n merged[key] = _mergeLists(merged[key], value);\n } else if (merged[key] === value) {\n continue;\n } else {\n console.warn(\n `field[${key}] already exists in this message chunk and value has unsupported type.`\n );\n }\n }\n return merged;\n}\n\nexport function _mergeLists<Content extends ContentBlock>(\n left?: Content[],\n right?: Content[]\n): Content[] | undefined {\n if (left === undefined && right === undefined) {\n return undefined;\n } else if (left === undefined || right === undefined) {\n return left || right;\n } else {\n const merged = [...left];\n for (const item of right) {\n if (\n typeof item === \"object\" &&\n item !== null &&\n \"index\" in item &&\n typeof item.index === \"number\"\n ) {\n const toMerge = merged.findIndex((leftItem) => {\n const isObject = typeof leftItem === \"object\";\n const indiciesMatch =\n \"index\" in leftItem && leftItem.index === item.index;\n const idsMatch =\n \"id\" in leftItem && \"id\" in item && leftItem?.id === item?.id;\n const eitherItemMissingID =\n !(\"id\" in leftItem) ||\n !leftItem?.id ||\n !(\"id\" in item) ||\n !item?.id;\n return isObject && indiciesMatch && (idsMatch || eitherItemMissingID);\n });\n if (\n toMerge !== -1 &&\n typeof merged[toMerge] === \"object\" &&\n merged[toMerge] !== null\n ) {\n merged[toMerge] = _mergeDicts(\n merged[toMerge] as Record<string, unknown>,\n item as Record<string, unknown>\n ) as Content;\n } else {\n merged.push(item);\n }\n } else if (\n typeof item === \"object\" &&\n item !== null &&\n \"text\" in item &&\n item.text === \"\"\n ) {\n // No-op - skip empty text blocks\n continue;\n } else {\n merged.push(item);\n }\n }\n return merged;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function _mergeObj<T = any>(\n left: T | undefined,\n right: T | undefined\n): T {\n if (!left && !right) {\n throw new Error(\"Cannot merge two undefined objects.\");\n }\n if (!left || !right) {\n return left || (right as T);\n } else if (typeof left !== typeof right) {\n throw new Error(\n `Cannot merge objects of different types.\\nLeft ${typeof left}\\nRight ${typeof right}`\n );\n } else if (typeof left === \"string\" && typeof right === \"string\") {\n return (left + right) as T;\n } else if (Array.isArray(left) && Array.isArray(right)) {\n return _mergeLists(left, right) as T;\n } else if (typeof left === \"object\" && typeof right === \"object\") {\n return _mergeDicts(left, right) as T;\n } else if (left === right) {\n return left;\n } else {\n throw new Error(\n `Can not merge objects of different types.\\nLeft ${left}\\nRight ${right}`\n );\n }\n}\n\n/**\n * Represents a chunk of a message, which can be concatenated with other\n * message chunks. It includes a method `_merge_kwargs_dict()` for merging\n * additional keyword arguments from another `BaseMessageChunk` into this\n * one. It also overrides the `__add__()` method to support concatenation\n * of `BaseMessageChunk` instances.\n */\nexport abstract class BaseMessageChunk<\n TStructure extends MessageStructure = MessageStructure,\n TRole extends MessageType = MessageType\n> extends BaseMessage<TStructure, TRole> {\n abstract concat(chunk: BaseMessageChunk): BaseMessageChunk<TStructure, TRole>;\n\n static isInstance(obj: unknown): obj is BaseMessageChunk {\n return (\n super.isInstance(obj) &&\n \"concat\" in obj &&\n typeof obj.concat === \"function\"\n );\n }\n}\n\nexport type MessageFieldWithRole = {\n role: MessageType;\n content: MessageContent;\n name?: string;\n} & Record<string, unknown>;\n\nexport function _isMessageFieldWithRole(\n x: BaseMessageLike\n): x is MessageFieldWithRole {\n return typeof (x as MessageFieldWithRole).role === \"string\";\n}\n\nexport type BaseMessageLike =\n | BaseMessage\n | MessageFieldWithRole\n | [MessageType, MessageContent]\n | string\n /**\n * @deprecated Specifying \"type\" is deprecated and will be removed in 0.4.0.\n */\n | ({\n type: MessageType | \"user\" | \"assistant\" | \"placeholder\";\n } & BaseMessageFields &\n Record<string, unknown>)\n | SerializedConstructor;\n\n/**\n * @deprecated Use {@link BaseMessage.isInstance} instead\n */\nexport function isBaseMessage(\n messageLike?: unknown\n): messageLike is BaseMessage {\n return typeof (messageLike as BaseMessage)?._getType === \"function\";\n}\n\n/**\n * @deprecated Use {@link BaseMessageChunk.isInstance} instead\n */\nexport function isBaseMessageChunk(\n messageLike?: unknown\n): messageLike is BaseMessageChunk {\n return (\n isBaseMessage(messageLike) &&\n typeof (messageLike as BaseMessageChunk).concat === \"function\"\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"base.js","names":["firstContent: MessageContent","secondContent: MessageContent","left?: \"success\" | \"error\"","right?: \"success\" | \"error\"","obj: any","depthLimit: number","currentDepth: number","obj","result: Record<string, unknown>","arg:\n | $InferMessageContent<TStructure, TRole>\n | BaseMessageFields<TStructure, TRole>","fields: BaseMessageFields<TStructure, TRole>","blocks: Array<ContentBlock>","blocks","obj: unknown","value: string | undefined","depth: number | null","format: MessageStringFormat","value?: unknown","left: Record<string, any>","right: Record<string, any>","left?: Content[]","right?: Content[]","left: T | undefined","right: T | undefined","x: BaseMessageLike","messageLike?: unknown"],"sources":["../../src/messages/base.ts"],"sourcesContent":["import { Serializable, SerializedConstructor } from \"../load/serializable.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport { isDataContentBlock } from \"./content/data.js\";\nimport { convertToV1FromAnthropicInput } from \"./block_translators/anthropic.js\";\nimport { convertToV1FromDataContent } from \"./block_translators/data.js\";\nimport { convertToV1FromChatCompletionsInput } from \"./block_translators/openai.js\";\nimport {\n $InferMessageContent,\n $InferResponseMetadata,\n MessageStructure,\n MessageType,\n isMessage,\n Message,\n} from \"./message.js\";\nimport {\n convertToFormattedString,\n type MessageStringFormat,\n} from \"./format.js\";\n\n/** @internal */\nconst MESSAGE_SYMBOL = Symbol.for(\"langchain.message\");\n\nexport interface StoredMessageData {\n content: string;\n role: string | undefined;\n name: string | undefined;\n tool_call_id: string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additional_kwargs?: Record<string, any>;\n /** Response metadata. For example: response headers, logprobs, token counts, model name. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response_metadata?: Record<string, any>;\n id?: string;\n}\n\nexport interface StoredMessage {\n type: string;\n data: StoredMessageData;\n}\n\nexport interface StoredGeneration {\n text: string;\n message?: StoredMessage;\n}\n\nexport interface StoredMessageV1 {\n type: string;\n role: string | undefined;\n text: string;\n}\n\nexport type MessageContent = string | Array<ContentBlock>;\n\nexport interface FunctionCall {\n /**\n * The arguments to call the function with, as generated by the model in JSON\n * format. Note that the model does not always generate valid JSON, and may\n * hallucinate parameters not defined by your function schema. Validate the\n * arguments in your code before calling your function.\n */\n arguments: string;\n\n /**\n * The name of the function to call.\n */\n name: string;\n}\n\nexport type BaseMessageFields<\n TStructure extends MessageStructure = MessageStructure,\n TRole extends MessageType = MessageType\n> = {\n id?: string;\n name?: string;\n content?: $InferMessageContent<TStructure, TRole>;\n contentBlocks?: Array<ContentBlock.Standard>;\n /** @deprecated */\n additional_kwargs?: {\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n function_call?: FunctionCall;\n /**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\n tool_calls?: OpenAIToolCall[];\n [key: string]: unknown;\n };\n response_metadata?: Partial<$InferResponseMetadata<TStructure, TRole>>;\n};\n\nexport function mergeContent(\n firstContent: MessageContent,\n secondContent: MessageContent\n): MessageContent {\n // If first content is a string\n if (typeof firstContent === \"string\") {\n if (firstContent === \"\") {\n return secondContent;\n }\n if (typeof secondContent === \"string\") {\n return firstContent + secondContent;\n } else if (\n Array.isArray(secondContent) &&\n secondContent.some((c) => isDataContentBlock(c))\n ) {\n return [\n {\n type: \"text\",\n source_type: \"text\",\n text: firstContent,\n },\n ...secondContent,\n ];\n } else {\n return [{ type: \"text\", text: firstContent }, ...secondContent];\n }\n // If both are arrays\n } else if (Array.isArray(secondContent)) {\n return (\n _mergeLists(firstContent, secondContent) ?? [\n ...firstContent,\n ...secondContent,\n ]\n );\n } else {\n if (secondContent === \"\") {\n return firstContent;\n } else if (\n Array.isArray(firstContent) &&\n firstContent.some((c) => isDataContentBlock(c))\n ) {\n return [\n ...firstContent,\n {\n type: \"file\",\n source_type: \"text\",\n text: secondContent,\n },\n ];\n } else {\n return [...firstContent, { type: \"text\", text: secondContent }];\n }\n }\n}\n\n/**\n * 'Merge' two statuses. If either value passed is 'error', it will return 'error'. Else\n * it will return 'success'.\n *\n * @param {\"success\" | \"error\" | undefined} left The existing value to 'merge' with the new value.\n * @param {\"success\" | \"error\" | undefined} right The new value to 'merge' with the existing value\n * @returns {\"success\" | \"error\"} The 'merged' value.\n */\nexport function _mergeStatus(\n left?: \"success\" | \"error\",\n right?: \"success\" | \"error\"\n): \"success\" | \"error\" | undefined {\n if (left === \"error\" || right === \"error\") {\n return \"error\";\n }\n return \"success\";\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction stringifyWithDepthLimit(obj: any, depthLimit: number): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function helper(obj: any, currentDepth: number): any {\n if (typeof obj !== \"object\" || obj === null || obj === undefined) {\n return obj;\n }\n if (currentDepth >= depthLimit) {\n if (Array.isArray(obj)) {\n return \"[Array]\";\n }\n return \"[Object]\";\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => helper(item, currentDepth + 1));\n }\n\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n result[key] = helper(obj[key], currentDepth + 1);\n }\n return result;\n }\n\n return JSON.stringify(helper(obj, 0), null, 2);\n}\n\n/**\n * Base class for all types of messages in a conversation. It includes\n * properties like `content`, `name`, and `additional_kwargs`. It also\n * includes methods like `toDict()` and `_getType()`.\n */\nexport abstract class BaseMessage<\n TStructure extends MessageStructure = MessageStructure,\n TRole extends MessageType = MessageType\n >\n extends Serializable\n implements Message<TStructure, TRole>\n{\n lc_namespace = [\"langchain_core\", \"messages\"];\n\n lc_serializable = true;\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n additional_kwargs: \"additional_kwargs\",\n response_metadata: \"response_metadata\",\n };\n }\n\n readonly [MESSAGE_SYMBOL] = true as const;\n\n abstract readonly type: TRole;\n\n id?: string;\n\n name?: string;\n\n content: $InferMessageContent<TStructure, TRole>;\n\n additional_kwargs: NonNullable<\n BaseMessageFields<TStructure, TRole>[\"additional_kwargs\"]\n >;\n\n response_metadata: NonNullable<\n BaseMessageFields<TStructure, TRole>[\"response_metadata\"]\n >;\n\n /**\n * @deprecated Use .getType() instead or import the proper typeguard.\n * For example:\n *\n * ```ts\n * import { isAIMessage } from \"@langchain/core/messages\";\n *\n * const message = new AIMessage(\"Hello!\");\n * isAIMessage(message); // true\n * ```\n */\n _getType(): MessageType {\n return this.type;\n }\n\n /**\n * @deprecated Use .type instead\n * The type of the message.\n */\n getType(): MessageType {\n return this._getType();\n }\n\n constructor(\n arg:\n | $InferMessageContent<TStructure, TRole>\n | BaseMessageFields<TStructure, TRole>\n ) {\n const fields: BaseMessageFields<TStructure, TRole> =\n typeof arg === \"string\" || Array.isArray(arg) ? { content: arg } : arg;\n if (!fields.additional_kwargs) {\n fields.additional_kwargs = {};\n }\n if (!fields.response_metadata) {\n fields.response_metadata = {};\n }\n super(fields);\n this.name = fields.name;\n if (fields.content === undefined && fields.contentBlocks !== undefined) {\n this.content = fields.contentBlocks as $InferMessageContent<\n TStructure,\n TRole\n >;\n this.response_metadata = {\n output_version: \"v1\",\n ...fields.response_metadata,\n };\n } else if (fields.content !== undefined) {\n this.content = fields.content ?? [];\n this.response_metadata = fields.response_metadata;\n } else {\n this.content = [] as $InferMessageContent<TStructure, TRole>;\n this.response_metadata = fields.response_metadata;\n }\n this.additional_kwargs = fields.additional_kwargs;\n this.id = fields.id;\n }\n\n /** Get text content of the message. */\n get text(): string {\n if (typeof this.content === \"string\") {\n return this.content;\n }\n if (!Array.isArray(this.content)) return \"\";\n return this.content\n .map((c) => {\n if (typeof c === \"string\") return c;\n if (c.type === \"text\") return c.text;\n return \"\";\n })\n .join(\"\");\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n const blocks: Array<ContentBlock> =\n typeof this.content === \"string\"\n ? [{ type: \"text\", text: this.content }]\n : this.content;\n const parsingSteps = [\n convertToV1FromDataContent,\n convertToV1FromChatCompletionsInput,\n convertToV1FromAnthropicInput,\n ];\n const parsedBlocks = parsingSteps.reduce(\n (blocks, step) => step(blocks),\n blocks\n );\n return parsedBlocks as Array<ContentBlock.Standard>;\n }\n\n toDict(): StoredMessage {\n return {\n type: this.getType(),\n data: (this.toJSON() as SerializedConstructor)\n .kwargs as StoredMessageData,\n };\n }\n\n static lc_name() {\n return \"BaseMessage\";\n }\n\n // Can't be protected for silly reasons\n get _printableFields(): Record<string, unknown> {\n return {\n id: this.id,\n content: this.content,\n name: this.name,\n additional_kwargs: this.additional_kwargs,\n response_metadata: this.response_metadata,\n };\n }\n\n static isInstance(obj: unknown): obj is BaseMessage {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n MESSAGE_SYMBOL in obj &&\n obj[MESSAGE_SYMBOL] === true &&\n isMessage(obj)\n );\n }\n\n // this private method is used to update the ID for the runtime\n // value as well as in lc_kwargs for serialisation\n _updateId(value: string | undefined) {\n this.id = value;\n\n // lc_attributes wouldn't work here, because jest compares the\n // whole object\n this.lc_kwargs.id = value;\n }\n\n get [Symbol.toStringTag]() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.constructor as any).lc_name();\n }\n\n // Override the default behavior of console.log\n [Symbol.for(\"nodejs.util.inspect.custom\")](depth: number | null) {\n if (depth === null) {\n return this;\n }\n const printable = stringifyWithDepthLimit(\n this._printableFields,\n Math.max(4, depth)\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `${(this.constructor as any).lc_name()} ${printable}`;\n }\n\n toFormattedString(format: MessageStringFormat = \"pretty\"): string {\n return convertToFormattedString(this, format);\n }\n}\n\n/**\n * @deprecated Use \"tool_calls\" field on AIMessages instead\n */\nexport type OpenAIToolCall = {\n /**\n * The ID of the tool call.\n */\n id: string;\n\n /**\n * The function that the model called.\n */\n function: FunctionCall;\n\n /**\n * The type of the tool. Currently, only `function` is supported.\n */\n type: \"function\";\n\n index?: number;\n};\n\nexport function isOpenAIToolCallArray(\n value?: unknown\n): value is OpenAIToolCall[] {\n return (\n Array.isArray(value) &&\n value.every((v) => typeof (v as OpenAIToolCall).index === \"number\")\n );\n}\n\nexport function _mergeDicts(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n left: Record<string, any> = {},\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n right: Record<string, any> = {}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n const merged = { ...left };\n for (const [key, value] of Object.entries(right)) {\n if (merged[key] == null) {\n merged[key] = value;\n } else if (value == null) {\n continue;\n } else if (\n typeof merged[key] !== typeof value ||\n Array.isArray(merged[key]) !== Array.isArray(value)\n ) {\n throw new Error(\n `field[${key}] already exists in the message chunk, but with a different type.`\n );\n } else if (typeof merged[key] === \"string\") {\n if (key === \"type\") {\n // Do not merge 'type' fields\n continue;\n } else if (\n [\"id\", \"name\", \"output_version\", \"model_provider\"].includes(key)\n ) {\n // Keep the incoming value for these fields\n merged[key] = value;\n } else {\n merged[key] += value;\n }\n } else if (typeof merged[key] === \"object\" && !Array.isArray(merged[key])) {\n merged[key] = _mergeDicts(merged[key], value);\n } else if (Array.isArray(merged[key])) {\n merged[key] = _mergeLists(merged[key], value);\n } else if (merged[key] === value) {\n continue;\n } else {\n console.warn(\n `field[${key}] already exists in this message chunk and value has unsupported type.`\n );\n }\n }\n return merged;\n}\n\nexport function _mergeLists<Content extends ContentBlock>(\n left?: Content[],\n right?: Content[]\n): Content[] | undefined {\n if (left === undefined && right === undefined) {\n return undefined;\n } else if (left === undefined || right === undefined) {\n return left || right;\n } else {\n const merged = [...left];\n for (const item of right) {\n if (\n typeof item === \"object\" &&\n item !== null &&\n \"index\" in item &&\n typeof item.index === \"number\"\n ) {\n const toMerge = merged.findIndex((leftItem) => {\n const isObject = typeof leftItem === \"object\";\n const indiciesMatch =\n \"index\" in leftItem && leftItem.index === item.index;\n const idsMatch =\n \"id\" in leftItem && \"id\" in item && leftItem?.id === item?.id;\n const eitherItemMissingID =\n !(\"id\" in leftItem) ||\n !leftItem?.id ||\n !(\"id\" in item) ||\n !item?.id;\n return isObject && indiciesMatch && (idsMatch || eitherItemMissingID);\n });\n if (\n toMerge !== -1 &&\n typeof merged[toMerge] === \"object\" &&\n merged[toMerge] !== null\n ) {\n merged[toMerge] = _mergeDicts(\n merged[toMerge] as Record<string, unknown>,\n item as Record<string, unknown>\n ) as Content;\n } else {\n merged.push(item);\n }\n } else if (\n typeof item === \"object\" &&\n item !== null &&\n \"text\" in item &&\n item.text === \"\"\n ) {\n // No-op - skip empty text blocks\n continue;\n } else {\n merged.push(item);\n }\n }\n return merged;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function _mergeObj<T = any>(\n left: T | undefined,\n right: T | undefined\n): T {\n if (!left && !right) {\n throw new Error(\"Cannot merge two undefined objects.\");\n }\n if (!left || !right) {\n return left || (right as T);\n } else if (typeof left !== typeof right) {\n throw new Error(\n `Cannot merge objects of different types.\\nLeft ${typeof left}\\nRight ${typeof right}`\n );\n } else if (typeof left === \"string\" && typeof right === \"string\") {\n return (left + right) as T;\n } else if (Array.isArray(left) && Array.isArray(right)) {\n return _mergeLists(left, right) as T;\n } else if (typeof left === \"object\" && typeof right === \"object\") {\n return _mergeDicts(left, right) as T;\n } else if (left === right) {\n return left;\n } else {\n throw new Error(\n `Can not merge objects of different types.\\nLeft ${left}\\nRight ${right}`\n );\n }\n}\n\n/**\n * Represents a chunk of a message, which can be concatenated with other\n * message chunks. It includes a method `_merge_kwargs_dict()` for merging\n * additional keyword arguments from another `BaseMessageChunk` into this\n * one. It also overrides the `__add__()` method to support concatenation\n * of `BaseMessageChunk` instances.\n */\nexport abstract class BaseMessageChunk<\n TStructure extends MessageStructure = MessageStructure,\n TRole extends MessageType = MessageType\n> extends BaseMessage<TStructure, TRole> {\n abstract concat(chunk: BaseMessageChunk): BaseMessageChunk<TStructure, TRole>;\n\n static isInstance(obj: unknown): obj is BaseMessageChunk {\n return (\n super.isInstance(obj) &&\n \"concat\" in obj &&\n typeof obj.concat === \"function\"\n );\n }\n}\n\nexport type MessageFieldWithRole = {\n role: MessageType;\n content: MessageContent;\n name?: string;\n} & Record<string, unknown>;\n\nexport function _isMessageFieldWithRole(\n x: BaseMessageLike\n): x is MessageFieldWithRole {\n return typeof (x as MessageFieldWithRole).role === \"string\";\n}\n\nexport type BaseMessageLike =\n | BaseMessage\n | MessageFieldWithRole\n | [MessageType, MessageContent]\n | string\n /**\n * @deprecated Specifying \"type\" is deprecated and will be removed in 0.4.0.\n */\n | ({\n type: MessageType | \"user\" | \"assistant\" | \"placeholder\";\n } & BaseMessageFields &\n Record<string, unknown>)\n | SerializedConstructor;\n\n/**\n * @deprecated Use {@link BaseMessage.isInstance} instead\n */\nexport function isBaseMessage(\n messageLike?: unknown\n): messageLike is BaseMessage {\n return typeof (messageLike as BaseMessage)?._getType === \"function\";\n}\n\n/**\n * @deprecated Use {@link BaseMessageChunk.isInstance} instead\n */\nexport function isBaseMessageChunk(\n messageLike?: unknown\n): messageLike is BaseMessageChunk {\n return (\n isBaseMessage(messageLike) &&\n typeof (messageLike as BaseMessageChunk).concat === \"function\"\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+
2
+ //#region src/messages/format.ts
3
+ function convertToFormattedString(message, format = "pretty") {
4
+ if (format === "pretty") return convertToPrettyString(message);
5
+ return JSON.stringify(message);
6
+ }
7
+ function convertToPrettyString(message) {
8
+ const lines = [];
9
+ const title = ` ${message.type.charAt(0).toUpperCase() + message.type.slice(1)} Message `;
10
+ const sepLen = Math.floor((80 - title.length) / 2);
11
+ const sep = "=".repeat(sepLen);
12
+ const secondSep = title.length % 2 === 0 ? sep : `${sep}=`;
13
+ lines.push(`${sep}${title}${secondSep}`);
14
+ if (message.type === "ai") {
15
+ const aiMessage = message;
16
+ if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {
17
+ lines.push("Tool Calls:");
18
+ for (const tc of aiMessage.tool_calls) {
19
+ lines.push(` ${tc.name} (${tc.id})`);
20
+ lines.push(` Call ID: ${tc.id}`);
21
+ lines.push(" Args:");
22
+ for (const [key, value] of Object.entries(tc.args)) lines.push(` ${key}: ${value}`);
23
+ }
24
+ }
25
+ }
26
+ if (message.type === "tool") {
27
+ const toolMessage = message;
28
+ if (toolMessage.name) lines.push(`Name: ${toolMessage.name}`);
29
+ }
30
+ if (typeof message.content === "string" && message.content.trim()) {
31
+ if (lines.length > 1) lines.push("");
32
+ lines.push(message.content);
33
+ }
34
+ return lines.join("\n");
35
+ }
36
+
37
+ //#endregion
38
+ exports.convertToFormattedString = convertToFormattedString;
39
+ //# sourceMappingURL=format.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.cjs","names":["message: BaseMessage","format: MessageStringFormat","lines: string[]"],"sources":["../../src/messages/format.ts"],"sourcesContent":["import { type BaseMessage } from \"./base.js\";\nimport { type AIMessage } from \"./ai.js\";\nimport { type ToolMessage } from \"./tool.js\";\n\nexport type MessageStringFormat = \"pretty\";\n\nexport function convertToFormattedString(\n message: BaseMessage,\n format: MessageStringFormat = \"pretty\"\n): string {\n if (format === \"pretty\") return convertToPrettyString(message);\n return JSON.stringify(message);\n}\n\nfunction convertToPrettyString(message: BaseMessage): string {\n const lines: string[] = [];\n const title = ` ${\n message.type.charAt(0).toUpperCase() + message.type.slice(1)\n } Message `;\n const sepLen = Math.floor((80 - title.length) / 2);\n const sep = \"=\".repeat(sepLen);\n const secondSep = title.length % 2 === 0 ? sep : `${sep}=`;\n lines.push(`${sep}${title}${secondSep}`);\n\n // Add message type specific details\n if (message.type === \"ai\") {\n const aiMessage = message as AIMessage;\n if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {\n lines.push(\"Tool Calls:\");\n for (const tc of aiMessage.tool_calls) {\n lines.push(` ${tc.name} (${tc.id})`);\n lines.push(` Call ID: ${tc.id}`);\n lines.push(\" Args:\");\n for (const [key, value] of Object.entries(tc.args)) {\n lines.push(` ${key}: ${value}`);\n }\n }\n }\n }\n if (message.type === \"tool\") {\n const toolMessage = message as ToolMessage;\n if (toolMessage.name) {\n lines.push(`Name: ${toolMessage.name}`);\n }\n }\n\n // Add content if it's a string and not empty\n if (typeof message.content === \"string\" && message.content.trim()) {\n if (lines.length > 1) {\n lines.push(\"\"); // blank line before content\n }\n lines.push(message.content);\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";;AAMA,SAAgB,yBACdA,SACAC,SAA8B,UACtB;AACR,KAAI,WAAW,SAAU,QAAO,sBAAsB,QAAQ;AAC9D,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAS,sBAAsBD,SAA8B;CAC3D,MAAME,QAAkB,CAAE;CAC1B,MAAM,QAAQ,CAAC,CAAC,EACd,QAAQ,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,QAAQ,KAAK,MAAM,EAAE,CAC7D,SAAS,CAAC;CACX,MAAM,SAAS,KAAK,OAAO,KAAK,MAAM,UAAU,EAAE;CAClD,MAAM,MAAM,IAAI,OAAO,OAAO;CAC9B,MAAM,YAAY,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1D,MAAM,KAAK,GAAG,MAAM,QAAQ,WAAW,CAAC;AAGxC,KAAI,QAAQ,SAAS,MAAM;EACzB,MAAM,YAAY;AAClB,MAAI,UAAU,cAAc,UAAU,WAAW,SAAS,GAAG;GAC3D,MAAM,KAAK,cAAc;AACzB,QAAK,MAAM,MAAM,UAAU,YAAY;IACrC,MAAM,KAAK,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,UAAU;AACrB,SAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,GAAG,KAAK,EAChD,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC;GAErC;EACF;CACF;AACD,KAAI,QAAQ,SAAS,QAAQ;EAC3B,MAAM,cAAc;AACpB,MAAI,YAAY,MACd,MAAM,KAAK,CAAC,MAAM,EAAE,YAAY,MAAM,CAAC;CAE1C;AAGD,KAAI,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,MAAM,EAAE;AACjE,MAAI,MAAM,SAAS,GACjB,MAAM,KAAK,GAAG;EAEhB,MAAM,KAAK,QAAQ,QAAQ;CAC5B;AAED,QAAO,MAAM,KAAK,KAAK;AACxB"}
@@ -0,0 +1,5 @@
1
+ //#region src/messages/format.d.ts
2
+ type MessageStringFormat = "pretty";
3
+ //#endregion
4
+ export { MessageStringFormat };
5
+ //# sourceMappingURL=format.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.cts","names":["BaseMessage","MessageStringFormat","convertToFormattedString"],"sources":["../../src/messages/format.d.ts"],"sourcesContent":["import { type BaseMessage } from \"./base.js\";\nexport type MessageStringFormat = \"pretty\";\nexport declare function convertToFormattedString(message: BaseMessage, format?: MessageStringFormat): string;\n"],"mappings":";AACYC,KAAAA,mBAAAA,GAAmB,QAAA"}
@@ -0,0 +1,5 @@
1
+ //#region src/messages/format.d.ts
2
+ type MessageStringFormat = "pretty";
3
+ //#endregion
4
+ export { MessageStringFormat };
5
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","names":["BaseMessage","MessageStringFormat","convertToFormattedString"],"sources":["../../src/messages/format.d.ts"],"sourcesContent":["import { type BaseMessage } from \"./base.js\";\nexport type MessageStringFormat = \"pretty\";\nexport declare function convertToFormattedString(message: BaseMessage, format?: MessageStringFormat): string;\n"],"mappings":";AACYC,KAAAA,mBAAAA,GAAmB,QAAA"}
@@ -0,0 +1,38 @@
1
+ //#region src/messages/format.ts
2
+ function convertToFormattedString(message, format = "pretty") {
3
+ if (format === "pretty") return convertToPrettyString(message);
4
+ return JSON.stringify(message);
5
+ }
6
+ function convertToPrettyString(message) {
7
+ const lines = [];
8
+ const title = ` ${message.type.charAt(0).toUpperCase() + message.type.slice(1)} Message `;
9
+ const sepLen = Math.floor((80 - title.length) / 2);
10
+ const sep = "=".repeat(sepLen);
11
+ const secondSep = title.length % 2 === 0 ? sep : `${sep}=`;
12
+ lines.push(`${sep}${title}${secondSep}`);
13
+ if (message.type === "ai") {
14
+ const aiMessage = message;
15
+ if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {
16
+ lines.push("Tool Calls:");
17
+ for (const tc of aiMessage.tool_calls) {
18
+ lines.push(` ${tc.name} (${tc.id})`);
19
+ lines.push(` Call ID: ${tc.id}`);
20
+ lines.push(" Args:");
21
+ for (const [key, value] of Object.entries(tc.args)) lines.push(` ${key}: ${value}`);
22
+ }
23
+ }
24
+ }
25
+ if (message.type === "tool") {
26
+ const toolMessage = message;
27
+ if (toolMessage.name) lines.push(`Name: ${toolMessage.name}`);
28
+ }
29
+ if (typeof message.content === "string" && message.content.trim()) {
30
+ if (lines.length > 1) lines.push("");
31
+ lines.push(message.content);
32
+ }
33
+ return lines.join("\n");
34
+ }
35
+
36
+ //#endregion
37
+ export { convertToFormattedString };
38
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","names":["message: BaseMessage","format: MessageStringFormat","lines: string[]"],"sources":["../../src/messages/format.ts"],"sourcesContent":["import { type BaseMessage } from \"./base.js\";\nimport { type AIMessage } from \"./ai.js\";\nimport { type ToolMessage } from \"./tool.js\";\n\nexport type MessageStringFormat = \"pretty\";\n\nexport function convertToFormattedString(\n message: BaseMessage,\n format: MessageStringFormat = \"pretty\"\n): string {\n if (format === \"pretty\") return convertToPrettyString(message);\n return JSON.stringify(message);\n}\n\nfunction convertToPrettyString(message: BaseMessage): string {\n const lines: string[] = [];\n const title = ` ${\n message.type.charAt(0).toUpperCase() + message.type.slice(1)\n } Message `;\n const sepLen = Math.floor((80 - title.length) / 2);\n const sep = \"=\".repeat(sepLen);\n const secondSep = title.length % 2 === 0 ? sep : `${sep}=`;\n lines.push(`${sep}${title}${secondSep}`);\n\n // Add message type specific details\n if (message.type === \"ai\") {\n const aiMessage = message as AIMessage;\n if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {\n lines.push(\"Tool Calls:\");\n for (const tc of aiMessage.tool_calls) {\n lines.push(` ${tc.name} (${tc.id})`);\n lines.push(` Call ID: ${tc.id}`);\n lines.push(\" Args:\");\n for (const [key, value] of Object.entries(tc.args)) {\n lines.push(` ${key}: ${value}`);\n }\n }\n }\n }\n if (message.type === \"tool\") {\n const toolMessage = message as ToolMessage;\n if (toolMessage.name) {\n lines.push(`Name: ${toolMessage.name}`);\n }\n }\n\n // Add content if it's a string and not empty\n if (typeof message.content === \"string\" && message.content.trim()) {\n if (lines.length > 1) {\n lines.push(\"\"); // blank line before content\n }\n lines.push(message.content);\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":";AAMA,SAAgB,yBACdA,SACAC,SAA8B,UACtB;AACR,KAAI,WAAW,SAAU,QAAO,sBAAsB,QAAQ;AAC9D,QAAO,KAAK,UAAU,QAAQ;AAC/B;AAED,SAAS,sBAAsBD,SAA8B;CAC3D,MAAME,QAAkB,CAAE;CAC1B,MAAM,QAAQ,CAAC,CAAC,EACd,QAAQ,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,QAAQ,KAAK,MAAM,EAAE,CAC7D,SAAS,CAAC;CACX,MAAM,SAAS,KAAK,OAAO,KAAK,MAAM,UAAU,EAAE;CAClD,MAAM,MAAM,IAAI,OAAO,OAAO;CAC9B,MAAM,YAAY,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1D,MAAM,KAAK,GAAG,MAAM,QAAQ,WAAW,CAAC;AAGxC,KAAI,QAAQ,SAAS,MAAM;EACzB,MAAM,YAAY;AAClB,MAAI,UAAU,cAAc,UAAU,WAAW,SAAS,GAAG;GAC3D,MAAM,KAAK,cAAc;AACzB,QAAK,MAAM,MAAM,UAAU,YAAY;IACrC,MAAM,KAAK,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,UAAU;AACrB,SAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,GAAG,KAAK,EAChD,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC;GAErC;EACF;CACF;AACD,KAAI,QAAQ,SAAS,QAAQ;EAC3B,MAAM,cAAc;AACpB,MAAI,YAAY,MACd,MAAM,KAAK,CAAC,MAAM,EAAE,YAAY,MAAM,CAAC;CAE1C;AAGD,KAAI,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,MAAM,EAAE;AACjE,MAAI,MAAM,SAAS,GACjB,MAAM,KAAK,GAAG;EAEhB,MAAM,KAAK,QAAQ,QAAQ;CAC5B;AAED,QAAO,MAAM,KAAK,KAAK;AACxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["BaseLangChain","fields?: ToolParams","input: TInput","config?: TConfig","toolInput: Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >","enrichedConfig: ToolRunnableConfig","ensureConfig","mergeConfigs","_isToolCall","arg: TArg","configArg?: TConfig","tags?: string[]","parsed: SchemaOutputT","isInteropZodSchema","interopParseAsync","z4","ToolInputParsingException","result","parseCallbackConfigArg","CallbackManager","toolCallId: string | undefined","_configHasToolCallId","z","callbacks?: TConfig","fields: DynamicToolInput<ToolOutputT>","input: string","runManager?: CallbackManagerForToolRun","parentConfig?: ToolRunnableConfig","fields: DynamicStructuredToolInput<SchemaT, SchemaOutputT, ToolOutputT>","arg: Parameters<\n DynamicStructuredToolInput<SchemaT, SchemaOutputT>[\"func\"]\n >[0]","parentConfig?: RunnableConfig","func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>","fields: ToolWrapperParams<SchemaT>","isSimpleStringZodSchema","validatesOnlyStrings","patchConfig","AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","getAbortSignalError","params: {\n content: TOutput;\n name: string;\n artifact?: unknown;\n toolCallId?: string;\n metadata?: Record<string, unknown>;\n}","isDirectToolOutput","ToolMessage","content: unknown"],"sources":["../../src/tools/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { z as z4, ZodError } from \"zod/v4\";\nimport {\n validate,\n type Schema as ValidationSchema,\n} from \"@cfworker/json-schema\";\nimport {\n CallbackManager,\n CallbackManagerForToolRun,\n parseCallbackConfigArg,\n} from \"../callbacks/manager.js\";\nimport { BaseLangChain } from \"../language_models/base.js\";\nimport {\n mergeConfigs,\n ensureConfig,\n patchConfig,\n pickRunnableConfigKeys,\n type RunnableConfig,\n} from \"../runnables/config.js\";\nimport type { RunnableFunc } from \"../runnables/base.js\";\nimport { isDirectToolOutput, ToolCall, ToolMessage } from \"../messages/tool.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport {\n _configHasToolCallId,\n _isToolCall,\n ToolInputParsingException,\n} from \"./utils.js\";\nimport {\n type InferInteropZodInput,\n type InferInteropZodOutput,\n type InteropZodObject,\n type InteropZodType,\n interopParseAsync,\n isSimpleStringZodSchema,\n isInteropZodSchema,\n type ZodStringV3,\n type ZodStringV4,\n type ZodObjectV3,\n type ZodObjectV4,\n} from \"../utils/types/zod.js\";\nimport { getAbortSignalError } from \"../utils/signal.js\";\nimport type {\n StructuredToolCallInput,\n ToolInputSchemaBase,\n ToolReturnType,\n ResponseFormat,\n ToolInputSchemaInputType,\n ToolInputSchemaOutputType,\n ToolParams,\n ToolRunnableConfig,\n StructuredToolInterface,\n DynamicToolInput,\n DynamicStructuredToolInput,\n StringInputToolSchema,\n ToolInterface,\n ToolOutputType,\n} from \"./types.js\";\nimport { type JSONSchema, validatesOnlyStrings } from \"../utils/json_schema.js\";\n\nexport type {\n BaseDynamicToolInput,\n ContentAndArtifact,\n DynamicToolInput,\n DynamicStructuredToolInput,\n ResponseFormat,\n StructuredToolCallInput,\n StructuredToolInterface,\n StructuredToolParams,\n ToolInterface,\n ToolParams,\n ToolReturnType,\n ToolRunnableConfig,\n ToolInputSchemaBase as ToolSchemaBase,\n} from \"./types.js\";\n\nexport {\n isLangChainTool,\n isRunnableToolLike,\n isStructuredTool,\n isStructuredToolParams,\n} from \"./types.js\";\n\nexport { ToolInputParsingException };\n/**\n * Base class for Tools that accept input of any shape defined by a Zod schema.\n */\nexport abstract class StructuredTool<\n SchemaT = ToolInputSchemaBase,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n >\n extends BaseLangChain<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolOutputT | ToolMessage\n >\n implements StructuredToolInterface<SchemaT, SchemaInputT, ToolOutputT>\n{\n abstract name: string;\n\n abstract description: string;\n\n abstract schema: SchemaT;\n\n /**\n * Whether to return the tool's output directly.\n *\n * Setting this to true means that after the tool is called,\n * an agent should stop looping.\n */\n returnDirect = false;\n\n verboseParsingErrors = false;\n\n get lc_namespace() {\n return [\"langchain\", \"tools\"];\n }\n\n /**\n * The tool response format.\n *\n * If \"content\" then the output of the tool is interpreted as the contents of a\n * ToolMessage. If \"content_and_artifact\" then the output is expected to be a\n * two-tuple corresponding to the (content, artifact) of a ToolMessage.\n *\n * @default \"content\"\n */\n responseFormat?: ResponseFormat = \"content\";\n\n /**\n * Default config object for the tool runnable.\n */\n defaultConfig?: ToolRunnableConfig;\n\n constructor(fields?: ToolParams) {\n super(fields ?? {});\n\n this.verboseParsingErrors =\n fields?.verboseParsingErrors ?? this.verboseParsingErrors;\n this.responseFormat = fields?.responseFormat ?? this.responseFormat;\n this.defaultConfig = fields?.defaultConfig ?? this.defaultConfig;\n this.metadata = fields?.metadata ?? this.metadata;\n }\n\n protected abstract _call(\n arg: SchemaOutputT,\n runManager?: CallbackManagerForToolRun,\n parentConfig?: ToolRunnableConfig\n ): Promise<ToolOutputT>;\n\n /**\n * Invokes the tool with the provided input and configuration.\n * @param input The input for the tool.\n * @param config Optional configuration for the tool.\n * @returns A Promise that resolves with the tool's output.\n */\n async invoke<\n TInput extends StructuredToolCallInput<SchemaT, SchemaInputT>,\n TConfig extends ToolRunnableConfig | undefined\n >(\n input: TInput,\n config?: TConfig\n ): Promise<ToolReturnType<TInput, TConfig, ToolOutputT>> {\n let toolInput: Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >;\n\n let enrichedConfig: ToolRunnableConfig = ensureConfig(\n mergeConfigs(this.defaultConfig, config)\n );\n if (_isToolCall(input)) {\n toolInput = input.args as Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >;\n enrichedConfig = {\n ...enrichedConfig,\n toolCall: input,\n };\n } else {\n toolInput = input as Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >;\n }\n\n return this.call(toolInput, enrichedConfig) as Promise<\n ToolReturnType<TInput, TConfig, ToolOutputT>\n >;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n *\n * Calls the tool with the provided argument, configuration, and tags. It\n * parses the input according to the schema, handles any errors, and\n * manages callbacks.\n * @param arg The input argument for the tool.\n * @param configArg Optional configuration or callbacks for the tool.\n * @param tags Optional tags for the tool.\n * @returns A Promise that resolves with a string.\n */\n async call<\n TArg extends StructuredToolCallInput<SchemaT, SchemaInputT>,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n configArg?: TConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<ToolReturnType<TArg, TConfig, ToolOutputT>> {\n // Determine the actual input that needs parsing/validation.\n // If arg is a ToolCall, use its args; otherwise, use arg directly.\n const inputForValidation = _isToolCall(arg) ? arg.args : arg;\n\n let parsed: SchemaOutputT; // This will hold the successfully parsed input of the expected output type.\n if (isInteropZodSchema(this.schema)) {\n try {\n // Validate the inputForValidation - TS needs help here as it can't exclude ToolCall based on the check\n parsed = await interopParseAsync(\n this.schema as InteropZodType,\n inputForValidation as Exclude<TArg, ToolCall>\n );\n } catch (e) {\n let message = `Received tool input did not match expected schema`;\n if (this.verboseParsingErrors) {\n message = `${message}\\nDetails: ${(e as Error).message}`;\n }\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof Error && e.constructor.name === \"ZodError\") {\n message = `${message}\\n\\n${z4.prettifyError(e as ZodError)}`;\n }\n // Pass the original raw input arg to the exception\n throw new ToolInputParsingException(message, JSON.stringify(arg));\n }\n } else {\n const result = validate(\n inputForValidation,\n this.schema as ValidationSchema\n );\n if (!result.valid) {\n let message = `Received tool input did not match expected schema`;\n if (this.verboseParsingErrors) {\n message = `${message}\\nDetails: ${result.errors\n .map((e) => `${e.keywordLocation}: ${e.error}`)\n .join(\"\\n\")}`;\n }\n // Pass the original raw input arg to the exception\n throw new ToolInputParsingException(message, JSON.stringify(arg));\n }\n // Assign the validated input to parsed\n // We cast here because validate() doesn't narrow the type sufficiently for TS, but we know it's valid.\n parsed = inputForValidation as SchemaOutputT;\n }\n\n const config = parseCallbackConfigArg(configArg);\n const callbackManager_ = CallbackManager.configure(\n config.callbacks,\n this.callbacks,\n config.tags || tags,\n this.tags,\n config.metadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const runManager = await callbackManager_?.handleToolStart(\n this.toJSON(),\n // Log the original raw input arg\n typeof arg === \"string\" ? arg : JSON.stringify(arg),\n config.runId,\n undefined,\n undefined,\n undefined,\n config.runName\n );\n delete config.runId;\n let result;\n try {\n // Pass the correctly typed parsed input to _call\n result = await this._call(parsed, runManager, config);\n } catch (e) {\n await runManager?.handleToolError(e);\n throw e;\n }\n let content;\n let artifact;\n if (this.responseFormat === \"content_and_artifact\") {\n if (Array.isArray(result) && result.length === 2) {\n [content, artifact] = result;\n } else {\n throw new Error(\n `Tool response format is \"content_and_artifact\" but the output was not a two-tuple.\\nResult: ${JSON.stringify(\n result\n )}`\n );\n }\n } else {\n content = result;\n }\n\n let toolCallId: string | undefined;\n // Extract toolCallId ONLY if the original arg was a ToolCall\n if (_isToolCall(arg)) {\n toolCallId = arg.id;\n }\n // Or if it was provided in the config's toolCall property\n if (!toolCallId && _configHasToolCallId(config)) {\n toolCallId = config.toolCall.id;\n }\n\n const formattedOutput = _formatToolOutput<ToolOutputT>({\n content,\n artifact,\n toolCallId,\n name: this.name,\n metadata: this.metadata,\n });\n await runManager?.handleToolEnd(formattedOutput);\n return formattedOutput as ToolReturnType<TArg, TConfig, ToolOutputT>;\n }\n}\n\n/**\n * Base class for Tools that accept input as a string.\n */\nexport abstract class Tool<ToolOutputT = ToolOutputType>\n extends StructuredTool<\n StringInputToolSchema,\n ToolInputSchemaOutputType<StringInputToolSchema>,\n ToolInputSchemaInputType<StringInputToolSchema>,\n ToolOutputT\n >\n implements\n ToolInterface<\n StringInputToolSchema,\n ToolInputSchemaInputType<StringInputToolSchema>,\n ToolOutputT\n >\n{\n schema = z\n .object({ input: z.string().optional() })\n .transform((obj) => obj.input);\n\n constructor(fields?: ToolParams) {\n super(fields);\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n *\n * Calls the tool with the provided argument and callbacks. It handles\n * string inputs specifically.\n * @param arg The input argument for the tool, which can be a string, undefined, or an input of the tool's schema.\n * @param callbacks Optional callbacks for the tool.\n * @returns A Promise that resolves with a string.\n */\n // Match the base class signature including the generics and conditional return type\n call<\n TArg extends string | undefined | z.input<this[\"schema\"]> | ToolCall,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n callbacks?: TConfig\n ): Promise<ToolReturnType<NonNullable<TArg>, TConfig, ToolOutputT>> {\n // Prepare the input for the base class call method.\n // If arg is string or undefined, wrap it; otherwise, pass ToolCall or { input: ... } directly.\n const structuredArg =\n typeof arg === \"string\" || arg == null ? { input: arg } : arg;\n\n // Ensure TConfig is passed to super.call\n return super.call(structuredArg, callbacks);\n }\n}\n\n/**\n * A tool that can be created dynamically from a function, name, and description.\n */\nexport class DynamicTool<\n ToolOutputT = ToolOutputType\n> extends Tool<ToolOutputT> {\n static lc_name() {\n return \"DynamicTool\";\n }\n\n name: string;\n\n description: string;\n\n func: DynamicToolInput<ToolOutputT>[\"func\"];\n\n constructor(fields: DynamicToolInput<ToolOutputT>) {\n super(fields);\n this.name = fields.name;\n this.description = fields.description;\n this.func = fields.func;\n this.returnDirect = fields.returnDirect ?? this.returnDirect;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n */\n async call<\n TArg extends string | undefined | z.input<this[\"schema\"]> | ToolCall,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n configArg?: TConfig\n ): Promise<ToolReturnType<NonNullable<TArg>, TConfig, ToolOutputT>> {\n const config = parseCallbackConfigArg(configArg);\n if (config.runName === undefined) {\n config.runName = this.name;\n }\n // Call the Tool class's call method, passing generics through\n // Cast config to TConfig to satisfy the super.call signature\n return super.call<TArg, TConfig>(arg, config as TConfig);\n }\n\n /** @ignore */\n async _call(\n input: string, // DynamicTool's _call specifically expects a string after schema transformation\n runManager?: CallbackManagerForToolRun,\n parentConfig?: ToolRunnableConfig\n ): Promise<ToolOutputT> {\n return this.func(input, runManager, parentConfig);\n }\n}\n\n/**\n * A tool that can be created dynamically from a function, name, and\n * description, designed to work with structured data. It extends the\n * StructuredTool class and overrides the _call method to execute the\n * provided function when the tool is called.\n *\n * Schema can be passed as Zod or JSON schema. The tool will not validate\n * input if JSON schema is passed.\n */\nexport class DynamicStructuredTool<\n SchemaT = ToolInputSchemaBase,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n> extends StructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT> {\n static lc_name() {\n return \"DynamicStructuredTool\";\n }\n\n name: string;\n\n description: string;\n\n func: DynamicStructuredToolInput<SchemaT, SchemaOutputT, ToolOutputT>[\"func\"];\n\n schema: SchemaT;\n\n constructor(\n fields: DynamicStructuredToolInput<SchemaT, SchemaOutputT, ToolOutputT>\n ) {\n super(fields);\n this.name = fields.name;\n this.description = fields.description;\n this.func = fields.func;\n this.returnDirect = fields.returnDirect ?? this.returnDirect;\n this.schema = fields.schema;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n */\n // Match the base class signature\n async call<\n TArg extends StructuredToolCallInput<SchemaT, SchemaInputT>,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n configArg?: TConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<ToolReturnType<NonNullable<TArg>, TConfig, ToolOutputT>> {\n const config = parseCallbackConfigArg(configArg);\n if (config.runName === undefined) {\n config.runName = this.name;\n }\n\n // Call the base class method, passing generics through\n // Cast config to TConfig to satisfy the super.call signature\n return super.call<TArg, TConfig>(arg, config as TConfig, tags);\n }\n\n protected _call(\n arg: Parameters<\n DynamicStructuredToolInput<SchemaT, SchemaOutputT>[\"func\"]\n >[0],\n runManager?: CallbackManagerForToolRun,\n parentConfig?: RunnableConfig\n ): Promise<ToolOutputT> {\n return this.func(arg, runManager, parentConfig);\n }\n}\n\n/**\n * Abstract base class for toolkits in LangChain. Toolkits are collections\n * of tools that agents can use. Subclasses must implement the `tools`\n * property to provide the specific tools for the toolkit.\n */\nexport abstract class BaseToolkit {\n abstract tools: StructuredToolInterface[];\n\n getTools(): StructuredToolInterface[] {\n return this.tools;\n }\n}\n\n/**\n * Parameters for the tool function.\n * Schema can be provided as Zod or JSON schema.\n * Both schema types will be validated.\n * @template {ToolInputSchemaBase} RunInput The input schema for the tool.\n */\ninterface ToolWrapperParams<RunInput = ToolInputSchemaBase | undefined>\n extends ToolParams {\n /**\n * The name of the tool. If using with an LLM, this\n * will be passed as the tool name.\n */\n name: string;\n /**\n * The description of the tool.\n * @default `${fields.name} tool`\n */\n description?: string;\n /**\n * The input schema for the tool. If using an LLM, this\n * will be passed as the tool schema to generate arguments\n * for.\n */\n schema?: RunInput;\n /**\n * The tool response format.\n *\n * If \"content\" then the output of the tool is interpreted as the contents of a\n * ToolMessage. If \"content_and_artifact\" then the output is expected to be a\n * two-tuple corresponding to the (content, artifact) of a ToolMessage.\n *\n * @default \"content\"\n */\n responseFormat?: ResponseFormat;\n /**\n * Whether to return the tool's output directly.\n *\n * Setting this to true means that after the tool is called,\n * an agent should stop looping.\n */\n returnDirect?: boolean;\n}\n\n/**\n * Creates a new StructuredTool instance with the provided function, name, description, and schema.\n *\n * Schema can be provided as Zod or JSON schema, and both will be validated.\n *\n * @function\n * @template {ToolInputSchemaBase} SchemaT The input schema for the tool.\n * @template {ToolReturnType} ToolOutputT The output type of the tool.\n *\n * @param {RunnableFunc<z.output<SchemaT>, ToolOutputT>} func - The function to invoke when the tool is called.\n * @param {ToolWrapperParams<SchemaT>} fields - An object containing the following properties:\n * @param {string} fields.name The name of the tool.\n * @param {string | undefined} fields.description The description of the tool. Defaults to either the description on the Zod schema, or `${fields.name} tool`.\n * @param {z.AnyZodObject | z.ZodString | undefined} fields.schema The Zod schema defining the input for the tool. If undefined, it will default to a Zod string schema.\n *\n * @returns {DynamicStructuredTool<SchemaT>} A new StructuredTool instance.\n */\nexport function tool<SchemaT extends ZodStringV3, ToolOutputT = ToolOutputType>(\n func: RunnableFunc<\n InferInteropZodOutput<SchemaT>,\n ToolOutputT,\n ToolRunnableConfig\n >,\n fields: ToolWrapperParams<SchemaT>\n): DynamicTool<ToolOutputT>;\n\nexport function tool<SchemaT extends ZodStringV4, ToolOutputT = ToolOutputType>(\n func: RunnableFunc<\n InferInteropZodOutput<SchemaT>,\n ToolOutputT,\n ToolRunnableConfig\n >,\n fields: ToolWrapperParams<SchemaT>\n): DynamicTool<ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodObjectV3,\n SchemaOutputT = InferInteropZodOutput<SchemaT>,\n SchemaInputT = InferInteropZodInput<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodObjectV4,\n SchemaOutputT = InferInteropZodOutput<SchemaT>,\n SchemaInputT = InferInteropZodInput<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends JSONSchema,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<\n Parameters<DynamicStructuredToolInput<SchemaT>[\"func\"]>[0],\n ToolOutputT,\n ToolRunnableConfig\n >,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends\n | InteropZodObject\n | InteropZodType<string>\n | JSONSchema = InteropZodObject,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n fields: ToolWrapperParams<SchemaT>\n):\n | DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>\n | DynamicTool<ToolOutputT> {\n const isSimpleStringSchema = isSimpleStringZodSchema(fields.schema);\n const isStringJSONSchema = validatesOnlyStrings(fields.schema);\n\n // If the schema is not provided, or it's a simple string schema, create a DynamicTool\n if (!fields.schema || isSimpleStringSchema || isStringJSONSchema) {\n return new DynamicTool<ToolOutputT>({\n ...fields,\n description:\n fields.description ??\n (fields.schema as { description?: string } | undefined)?.description ??\n `${fields.name} tool`,\n func: async (input, runManager, config) => {\n return new Promise<ToolOutputT>((resolve, reject) => {\n const childConfig = patchConfig(config, {\n callbacks: runManager?.getChild(),\n });\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(childConfig),\n async () => {\n try {\n // TS doesn't restrict the type here based on the guard above\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve(func(input as any, childConfig));\n } catch (e) {\n reject(e);\n }\n }\n );\n });\n },\n });\n }\n\n const schema = fields.schema as InteropZodObject | JSONSchema;\n\n const description =\n fields.description ??\n (fields.schema as { description?: string }).description ??\n `${fields.name} tool`;\n\n return new DynamicStructuredTool<\n typeof schema,\n SchemaOutputT,\n SchemaInputT,\n ToolOutputT\n >({\n ...fields,\n description,\n schema,\n func: async (input, runManager, config) => {\n return new Promise<ToolOutputT>((resolve, reject) => {\n if (config?.signal) {\n config.signal.addEventListener(\"abort\", () => {\n return reject(getAbortSignalError(config.signal));\n });\n }\n\n const childConfig = patchConfig(config, {\n callbacks: runManager?.getChild(),\n });\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(childConfig),\n async () => {\n try {\n const result = await func(input, childConfig);\n\n /**\n * If the signal is aborted, we don't want to resolve the promise\n * as the promise is already rejected.\n */\n if (config?.signal?.aborted) {\n return;\n }\n\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }\n );\n });\n },\n }) as DynamicStructuredTool<\n SchemaT,\n SchemaOutputT,\n SchemaInputT,\n ToolOutputT\n >;\n}\n\nfunction _formatToolOutput<TOutput extends ToolOutputType>(params: {\n content: TOutput;\n name: string;\n artifact?: unknown;\n toolCallId?: string;\n metadata?: Record<string, unknown>;\n}): ToolMessage | TOutput {\n const { content, artifact, toolCallId, metadata } = params;\n if (toolCallId && !isDirectToolOutput(content)) {\n if (\n typeof content === \"string\" ||\n (Array.isArray(content) &&\n content.every((item) => typeof item === \"object\"))\n ) {\n return new ToolMessage({\n status: \"success\",\n content,\n artifact,\n tool_call_id: toolCallId,\n name: params.name,\n metadata,\n });\n } else {\n return new ToolMessage({\n status: \"success\",\n content: _stringify(content),\n artifact,\n tool_call_id: toolCallId,\n name: params.name,\n metadata,\n });\n }\n } else {\n return content;\n }\n}\n\nfunction _stringify(content: unknown): string {\n try {\n return JSON.stringify(content, null, 2) ?? \"\";\n } catch (_noOp) {\n return `${content}`;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["BaseLangChain","fields?: ToolParams","input: TInput","config?: TConfig","toolInput: Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >","enrichedConfig: ToolRunnableConfig","ensureConfig","mergeConfigs","_isToolCall","arg: TArg","configArg?: TConfig","tags?: string[]","parsed: SchemaOutputT","isInteropZodSchema","interopParseAsync","z4","ToolInputParsingException","result","parseCallbackConfigArg","CallbackManager","toolCallId: string | undefined","_configHasToolCallId","z","callbacks?: TConfig","fields: DynamicToolInput<ToolOutputT>","input: string","runManager?: CallbackManagerForToolRun","parentConfig?: ToolRunnableConfig","fields: DynamicStructuredToolInput<SchemaT, SchemaOutputT, ToolOutputT>","arg: Parameters<\n DynamicStructuredToolInput<SchemaT, SchemaOutputT>[\"func\"]\n >[0]","parentConfig?: RunnableConfig","func: (\n input: SchemaOutputT,\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>","fields: ToolWrapperParams<SchemaT>","isSimpleStringZodSchema","validatesOnlyStrings","patchConfig","AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","getAbortSignalError","params: {\n content: TOutput;\n name: string;\n artifact?: unknown;\n toolCallId?: string;\n metadata?: Record<string, unknown>;\n}","isDirectToolOutput","ToolMessage","content: unknown"],"sources":["../../src/tools/index.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { z as z4, ZodError } from \"zod/v4\";\nimport {\n validate,\n type Schema as ValidationSchema,\n} from \"@cfworker/json-schema\";\nimport {\n CallbackManager,\n CallbackManagerForToolRun,\n parseCallbackConfigArg,\n} from \"../callbacks/manager.js\";\nimport { BaseLangChain } from \"../language_models/base.js\";\nimport {\n mergeConfigs,\n ensureConfig,\n patchConfig,\n pickRunnableConfigKeys,\n type RunnableConfig,\n} from \"../runnables/config.js\";\nimport type { RunnableFunc } from \"../runnables/base.js\";\nimport { isDirectToolOutput, ToolCall, ToolMessage } from \"../messages/tool.js\";\nimport { AsyncLocalStorageProviderSingleton } from \"../singletons/index.js\";\nimport type { RunnableToolLike } from \"../runnables/base.js\";\nimport {\n _configHasToolCallId,\n _isToolCall,\n ToolInputParsingException,\n} from \"./utils.js\";\nimport {\n type InferInteropZodInput,\n type InferInteropZodOutput,\n type InteropZodObject,\n type InteropZodType,\n interopParseAsync,\n isSimpleStringZodSchema,\n isInteropZodSchema,\n type ZodStringV3,\n type ZodStringV4,\n type ZodObjectV3,\n type ZodObjectV4,\n} from \"../utils/types/zod.js\";\nimport { getAbortSignalError } from \"../utils/signal.js\";\nimport type {\n StructuredToolCallInput,\n ToolInputSchemaBase,\n ToolReturnType,\n ResponseFormat,\n ToolInputSchemaInputType,\n ToolInputSchemaOutputType,\n ToolParams,\n ToolRunnableConfig,\n StructuredToolInterface,\n DynamicToolInput,\n DynamicStructuredToolInput,\n StringInputToolSchema,\n ToolInterface,\n ToolOutputType,\n ToolRuntime,\n} from \"./types.js\";\nimport { type JSONSchema, validatesOnlyStrings } from \"../utils/json_schema.js\";\n\nexport type {\n BaseDynamicToolInput,\n ContentAndArtifact,\n DynamicToolInput,\n DynamicStructuredToolInput,\n ResponseFormat,\n StructuredToolCallInput,\n StructuredToolInterface,\n StructuredToolParams,\n ToolInterface,\n ToolParams,\n ToolReturnType,\n ToolRunnableConfig,\n ToolInputSchemaBase as ToolSchemaBase,\n} from \"./types.js\";\n\nexport {\n isLangChainTool,\n isRunnableToolLike,\n isStructuredTool,\n isStructuredToolParams,\n type ToolRuntime,\n} from \"./types.js\";\n\nexport { ToolInputParsingException };\n/**\n * Base class for Tools that accept input of any shape defined by a Zod schema.\n */\nexport abstract class StructuredTool<\n SchemaT = ToolInputSchemaBase,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n >\n extends BaseLangChain<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolOutputT | ToolMessage\n >\n implements StructuredToolInterface<SchemaT, SchemaInputT, ToolOutputT>\n{\n abstract name: string;\n\n abstract description: string;\n\n abstract schema: SchemaT;\n\n /**\n * Whether to return the tool's output directly.\n *\n * Setting this to true means that after the tool is called,\n * an agent should stop looping.\n */\n returnDirect = false;\n\n verboseParsingErrors = false;\n\n get lc_namespace() {\n return [\"langchain\", \"tools\"];\n }\n\n /**\n * The tool response format.\n *\n * If \"content\" then the output of the tool is interpreted as the contents of a\n * ToolMessage. If \"content_and_artifact\" then the output is expected to be a\n * two-tuple corresponding to the (content, artifact) of a ToolMessage.\n *\n * @default \"content\"\n */\n responseFormat?: ResponseFormat = \"content\";\n\n /**\n * Default config object for the tool runnable.\n */\n defaultConfig?: ToolRunnableConfig;\n\n constructor(fields?: ToolParams) {\n super(fields ?? {});\n\n this.verboseParsingErrors =\n fields?.verboseParsingErrors ?? this.verboseParsingErrors;\n this.responseFormat = fields?.responseFormat ?? this.responseFormat;\n this.defaultConfig = fields?.defaultConfig ?? this.defaultConfig;\n this.metadata = fields?.metadata ?? this.metadata;\n }\n\n protected abstract _call(\n arg: SchemaOutputT,\n runManager?: CallbackManagerForToolRun,\n parentConfig?: ToolRunnableConfig\n ): Promise<ToolOutputT>;\n\n /**\n * Invokes the tool with the provided input and configuration.\n * @param input The input for the tool.\n * @param config Optional configuration for the tool.\n * @returns A Promise that resolves with the tool's output.\n */\n async invoke<\n TInput extends StructuredToolCallInput<SchemaT, SchemaInputT>,\n TConfig extends ToolRunnableConfig | undefined\n >(\n input: TInput,\n config?: TConfig\n ): Promise<ToolReturnType<TInput, TConfig, ToolOutputT>> {\n let toolInput: Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >;\n\n let enrichedConfig: ToolRunnableConfig = ensureConfig(\n mergeConfigs(this.defaultConfig, config)\n );\n if (_isToolCall(input)) {\n toolInput = input.args as Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >;\n enrichedConfig = {\n ...enrichedConfig,\n toolCall: input,\n };\n } else {\n toolInput = input as Exclude<\n StructuredToolCallInput<SchemaT, SchemaInputT>,\n ToolCall\n >;\n }\n\n return this.call(toolInput, enrichedConfig) as Promise<\n ToolReturnType<TInput, TConfig, ToolOutputT>\n >;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n *\n * Calls the tool with the provided argument, configuration, and tags. It\n * parses the input according to the schema, handles any errors, and\n * manages callbacks.\n * @param arg The input argument for the tool.\n * @param configArg Optional configuration or callbacks for the tool.\n * @param tags Optional tags for the tool.\n * @returns A Promise that resolves with a string.\n */\n async call<\n TArg extends StructuredToolCallInput<SchemaT, SchemaInputT>,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n configArg?: TConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<ToolReturnType<TArg, TConfig, ToolOutputT>> {\n // Determine the actual input that needs parsing/validation.\n // If arg is a ToolCall, use its args; otherwise, use arg directly.\n const inputForValidation = _isToolCall(arg) ? arg.args : arg;\n\n let parsed: SchemaOutputT; // This will hold the successfully parsed input of the expected output type.\n if (isInteropZodSchema(this.schema)) {\n try {\n // Validate the inputForValidation - TS needs help here as it can't exclude ToolCall based on the check\n parsed = await interopParseAsync(\n this.schema as InteropZodType,\n inputForValidation as Exclude<TArg, ToolCall>\n );\n } catch (e) {\n let message = `Received tool input did not match expected schema`;\n if (this.verboseParsingErrors) {\n message = `${message}\\nDetails: ${(e as Error).message}`;\n }\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof Error && e.constructor.name === \"ZodError\") {\n message = `${message}\\n\\n${z4.prettifyError(e as ZodError)}`;\n }\n // Pass the original raw input arg to the exception\n throw new ToolInputParsingException(message, JSON.stringify(arg));\n }\n } else {\n const result = validate(\n inputForValidation,\n this.schema as ValidationSchema\n );\n if (!result.valid) {\n let message = `Received tool input did not match expected schema`;\n if (this.verboseParsingErrors) {\n message = `${message}\\nDetails: ${result.errors\n .map((e) => `${e.keywordLocation}: ${e.error}`)\n .join(\"\\n\")}`;\n }\n // Pass the original raw input arg to the exception\n throw new ToolInputParsingException(message, JSON.stringify(arg));\n }\n // Assign the validated input to parsed\n // We cast here because validate() doesn't narrow the type sufficiently for TS, but we know it's valid.\n parsed = inputForValidation as SchemaOutputT;\n }\n\n const config = parseCallbackConfigArg(configArg);\n const callbackManager_ = CallbackManager.configure(\n config.callbacks,\n this.callbacks,\n config.tags || tags,\n this.tags,\n config.metadata,\n this.metadata,\n { verbose: this.verbose }\n );\n const runManager = await callbackManager_?.handleToolStart(\n this.toJSON(),\n // Log the original raw input arg\n typeof arg === \"string\" ? arg : JSON.stringify(arg),\n config.runId,\n undefined,\n undefined,\n undefined,\n config.runName\n );\n delete config.runId;\n let result;\n try {\n // Pass the correctly typed parsed input to _call\n result = await this._call(parsed, runManager, config);\n } catch (e) {\n await runManager?.handleToolError(e);\n throw e;\n }\n let content;\n let artifact;\n if (this.responseFormat === \"content_and_artifact\") {\n if (Array.isArray(result) && result.length === 2) {\n [content, artifact] = result;\n } else {\n throw new Error(\n `Tool response format is \"content_and_artifact\" but the output was not a two-tuple.\\nResult: ${JSON.stringify(\n result\n )}`\n );\n }\n } else {\n content = result;\n }\n\n let toolCallId: string | undefined;\n // Extract toolCallId ONLY if the original arg was a ToolCall\n if (_isToolCall(arg)) {\n toolCallId = arg.id;\n }\n // Or if it was provided in the config's toolCall property\n if (!toolCallId && _configHasToolCallId(config)) {\n toolCallId = config.toolCall.id;\n }\n\n const formattedOutput = _formatToolOutput<ToolOutputT>({\n content,\n artifact,\n toolCallId,\n name: this.name,\n metadata: this.metadata,\n });\n await runManager?.handleToolEnd(formattedOutput);\n return formattedOutput as ToolReturnType<TArg, TConfig, ToolOutputT>;\n }\n}\n\n/**\n * Base class for Tools that accept input as a string.\n */\nexport abstract class Tool<ToolOutputT = ToolOutputType>\n extends StructuredTool<\n StringInputToolSchema,\n ToolInputSchemaOutputType<StringInputToolSchema>,\n ToolInputSchemaInputType<StringInputToolSchema>,\n ToolOutputT\n >\n implements\n ToolInterface<\n StringInputToolSchema,\n ToolInputSchemaInputType<StringInputToolSchema>,\n ToolOutputT\n >\n{\n schema = z\n .object({ input: z.string().optional() })\n .transform((obj) => obj.input);\n\n constructor(fields?: ToolParams) {\n super(fields);\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n *\n * Calls the tool with the provided argument and callbacks. It handles\n * string inputs specifically.\n * @param arg The input argument for the tool, which can be a string, undefined, or an input of the tool's schema.\n * @param callbacks Optional callbacks for the tool.\n * @returns A Promise that resolves with a string.\n */\n // Match the base class signature including the generics and conditional return type\n call<\n TArg extends string | undefined | z.input<this[\"schema\"]> | ToolCall,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n callbacks?: TConfig\n ): Promise<ToolReturnType<NonNullable<TArg>, TConfig, ToolOutputT>> {\n // Prepare the input for the base class call method.\n // If arg is string or undefined, wrap it; otherwise, pass ToolCall or { input: ... } directly.\n const structuredArg =\n typeof arg === \"string\" || arg == null ? { input: arg } : arg;\n\n // Ensure TConfig is passed to super.call\n return super.call(structuredArg, callbacks);\n }\n}\n\n/**\n * A tool that can be created dynamically from a function, name, and description.\n */\nexport class DynamicTool<\n ToolOutputT = ToolOutputType\n> extends Tool<ToolOutputT> {\n static lc_name() {\n return \"DynamicTool\";\n }\n\n name: string;\n\n description: string;\n\n func: DynamicToolInput<ToolOutputT>[\"func\"];\n\n constructor(fields: DynamicToolInput<ToolOutputT>) {\n super(fields);\n this.name = fields.name;\n this.description = fields.description;\n this.func = fields.func;\n this.returnDirect = fields.returnDirect ?? this.returnDirect;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n */\n async call<\n TArg extends string | undefined | z.input<this[\"schema\"]> | ToolCall,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n configArg?: TConfig\n ): Promise<ToolReturnType<NonNullable<TArg>, TConfig, ToolOutputT>> {\n const config = parseCallbackConfigArg(configArg);\n if (config.runName === undefined) {\n config.runName = this.name;\n }\n // Call the Tool class's call method, passing generics through\n // Cast config to TConfig to satisfy the super.call signature\n return super.call<TArg, TConfig>(arg, config as TConfig);\n }\n\n /** @ignore */\n async _call(\n input: string, // DynamicTool's _call specifically expects a string after schema transformation\n runManager?: CallbackManagerForToolRun,\n parentConfig?: ToolRunnableConfig\n ): Promise<ToolOutputT> {\n return this.func(input, runManager, parentConfig);\n }\n}\n\n/**\n * A tool that can be created dynamically from a function, name, and\n * description, designed to work with structured data. It extends the\n * StructuredTool class and overrides the _call method to execute the\n * provided function when the tool is called.\n *\n * Schema can be passed as Zod or JSON schema. The tool will not validate\n * input if JSON schema is passed.\n */\nexport class DynamicStructuredTool<\n SchemaT = ToolInputSchemaBase,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n> extends StructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT> {\n static lc_name() {\n return \"DynamicStructuredTool\";\n }\n\n name: string;\n\n description: string;\n\n func: DynamicStructuredToolInput<SchemaT, SchemaOutputT, ToolOutputT>[\"func\"];\n\n schema: SchemaT;\n\n constructor(\n fields: DynamicStructuredToolInput<SchemaT, SchemaOutputT, ToolOutputT>\n ) {\n super(fields);\n this.name = fields.name;\n this.description = fields.description;\n this.func = fields.func;\n this.returnDirect = fields.returnDirect ?? this.returnDirect;\n this.schema = fields.schema;\n }\n\n /**\n * @deprecated Use .invoke() instead. Will be removed in 0.3.0.\n */\n // Match the base class signature\n async call<\n TArg extends StructuredToolCallInput<SchemaT, SchemaInputT>,\n TConfig extends ToolRunnableConfig | undefined\n >(\n arg: TArg,\n configArg?: TConfig,\n /** @deprecated */\n tags?: string[]\n ): Promise<ToolReturnType<NonNullable<TArg>, TConfig, ToolOutputT>> {\n const config = parseCallbackConfigArg(configArg);\n if (config.runName === undefined) {\n config.runName = this.name;\n }\n\n // Call the base class method, passing generics through\n // Cast config to TConfig to satisfy the super.call signature\n return super.call<TArg, TConfig>(arg, config as TConfig, tags);\n }\n\n protected _call(\n arg: Parameters<\n DynamicStructuredToolInput<SchemaT, SchemaOutputT>[\"func\"]\n >[0],\n runManager?: CallbackManagerForToolRun,\n parentConfig?: RunnableConfig\n ): Promise<ToolOutputT> {\n return this.func(arg, runManager, parentConfig);\n }\n}\n\n/**\n * Abstract base class for toolkits in LangChain. Toolkits are collections\n * of tools that agents can use. Subclasses must implement the `tools`\n * property to provide the specific tools for the toolkit.\n */\nexport abstract class BaseToolkit {\n abstract tools: StructuredToolInterface[];\n\n getTools(): StructuredToolInterface[] {\n return this.tools;\n }\n}\n\n/**\n * Parameters for the tool function.\n * Schema can be provided as Zod or JSON schema.\n * Both schema types will be validated.\n * @template {ToolInputSchemaBase} RunInput The input schema for the tool.\n */\ninterface ToolWrapperParams<RunInput = ToolInputSchemaBase | undefined>\n extends ToolParams {\n /**\n * The name of the tool. If using with an LLM, this\n * will be passed as the tool name.\n */\n name: string;\n /**\n * The description of the tool.\n * @default `${fields.name} tool`\n */\n description?: string;\n /**\n * The input schema for the tool. If using an LLM, this\n * will be passed as the tool schema to generate arguments\n * for.\n */\n schema?: RunInput;\n /**\n * The tool response format.\n *\n * If \"content\" then the output of the tool is interpreted as the contents of a\n * ToolMessage. If \"content_and_artifact\" then the output is expected to be a\n * two-tuple corresponding to the (content, artifact) of a ToolMessage.\n *\n * @default \"content\"\n */\n responseFormat?: ResponseFormat;\n /**\n * Whether to return the tool's output directly.\n *\n * Setting this to true means that after the tool is called,\n * an agent should stop looping.\n */\n returnDirect?: boolean;\n}\n\n/**\n * Creates a new StructuredTool instance with the provided function, name, description, and schema.\n *\n * Schema can be provided as Zod or JSON schema, and both will be validated.\n *\n * @function\n * @template {ToolInputSchemaBase} SchemaT The input schema for the tool.\n * @template {ToolReturnType} ToolOutputT The output type of the tool.\n *\n * @param {RunnableFunc<z.output<SchemaT>, ToolOutputT>} func - The function to invoke when the tool is called.\n * @param {ToolWrapperParams<SchemaT>} fields - An object containing the following properties:\n * @param {string} fields.name The name of the tool.\n * @param {string | undefined} fields.description The description of the tool. Defaults to either the description on the Zod schema, or `${fields.name} tool`.\n * @param {z.AnyZodObject | z.ZodString | undefined} fields.schema The Zod schema defining the input for the tool. If undefined, it will default to a Zod string schema.\n *\n * @returns {DynamicStructuredTool<SchemaT>} A new StructuredTool instance.\n */\nexport function tool<SchemaT extends ZodStringV3, ToolOutputT = ToolOutputType>(\n func: RunnableFunc<\n InferInteropZodOutput<SchemaT>,\n ToolOutputT,\n ToolRunnableConfig\n >,\n fields: ToolWrapperParams<SchemaT>\n): DynamicTool<ToolOutputT>;\n\nexport function tool<SchemaT extends ZodStringV4, ToolOutputT = ToolOutputType>(\n func: RunnableFunc<\n InferInteropZodOutput<SchemaT>,\n ToolOutputT,\n ToolRunnableConfig\n >,\n fields: ToolWrapperParams<SchemaT>\n): DynamicTool<ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodObjectV3,\n SchemaOutputT = InferInteropZodOutput<SchemaT>,\n SchemaInputT = InferInteropZodInput<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodObjectV4,\n SchemaOutputT = InferInteropZodOutput<SchemaT>,\n SchemaInputT = InferInteropZodInput<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends JSONSchema,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<\n Parameters<DynamicStructuredToolInput<SchemaT>[\"func\"]>[0],\n ToolOutputT,\n ToolRunnableConfig\n >,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends\n | InteropZodObject\n | InteropZodType<string>\n | JSONSchema = InteropZodObject,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType\n>(\n func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n fields: ToolWrapperParams<SchemaT>\n):\n | DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>\n | DynamicTool<ToolOutputT>;\n\n// Overloads with ToolRuntime as CallOptions\nexport function tool<\n SchemaT extends ZodStringV3,\n ToolOutputT = ToolOutputType,\n TState = unknown,\n TContext = unknown\n>(\n func: (\n input: InferInteropZodOutput<SchemaT>,\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicTool<ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodStringV4,\n ToolOutputT = ToolOutputType,\n TState = unknown,\n TContext = unknown\n>(\n func: (\n input: InferInteropZodOutput<SchemaT>,\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicTool<ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodObjectV3,\n SchemaOutputT = InferInteropZodOutput<SchemaT>,\n SchemaInputT = InferInteropZodInput<SchemaT>,\n ToolOutputT = ToolOutputType,\n TState = unknown,\n TContext = unknown\n>(\n func: (\n input: SchemaOutputT,\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends ZodObjectV4,\n SchemaOutputT = InferInteropZodOutput<SchemaT>,\n SchemaInputT = InferInteropZodInput<SchemaT>,\n ToolOutputT = ToolOutputType,\n TState = unknown,\n TContext = unknown\n>(\n func: (\n input: SchemaOutputT,\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends JSONSchema,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType,\n TState = unknown,\n TContext = unknown\n>(\n func: (\n input: Parameters<DynamicStructuredToolInput<SchemaT>[\"func\"]>[0],\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>,\n fields: ToolWrapperParams<SchemaT>\n): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;\n\nexport function tool<\n SchemaT extends\n | InteropZodObject\n | InteropZodType<string>\n | JSONSchema = InteropZodObject,\n SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n ToolOutputT = ToolOutputType,\n TState = unknown,\n TContext = unknown\n>(\n func: (\n input: SchemaOutputT,\n runtime: ToolRuntime<TState, TContext>\n ) => ToolOutputT | Promise<ToolOutputT>,\n fields: ToolWrapperParams<SchemaT>\n):\n | DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>\n | DynamicTool<ToolOutputT> {\n const isSimpleStringSchema = isSimpleStringZodSchema(fields.schema);\n const isStringJSONSchema = validatesOnlyStrings(fields.schema);\n\n // If the schema is not provided, or it's a simple string schema, create a DynamicTool\n if (!fields.schema || isSimpleStringSchema || isStringJSONSchema) {\n return new DynamicTool<ToolOutputT>({\n ...fields,\n description:\n fields.description ??\n (fields.schema as { description?: string } | undefined)?.description ??\n `${fields.name} tool`,\n func: async (input, runManager, config) => {\n return new Promise<ToolOutputT>((resolve, reject) => {\n const childConfig = patchConfig(config, {\n callbacks: runManager?.getChild(),\n });\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(childConfig),\n async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolve(func(input as any, childConfig as any));\n } catch (e) {\n reject(e);\n }\n }\n );\n });\n },\n });\n }\n\n const schema = fields.schema as InteropZodObject | JSONSchema;\n\n const description =\n fields.description ??\n (fields.schema as { description?: string }).description ??\n `${fields.name} tool`;\n\n return new DynamicStructuredTool<\n typeof schema,\n SchemaOutputT,\n SchemaInputT,\n ToolOutputT\n >({\n ...fields,\n description,\n schema,\n func: async (input, runManager, config) => {\n return new Promise<ToolOutputT>((resolve, reject) => {\n if (config?.signal) {\n config.signal.addEventListener(\"abort\", () => {\n return reject(getAbortSignalError(config.signal));\n });\n }\n\n const childConfig = patchConfig(config, {\n callbacks: runManager?.getChild(),\n });\n // eslint-disable-next-line no-void\n void AsyncLocalStorageProviderSingleton.runWithConfig(\n pickRunnableConfigKeys(childConfig),\n async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await func(input as any, childConfig as any);\n\n /**\n * If the signal is aborted, we don't want to resolve the promise\n * as the promise is already rejected.\n */\n if (config?.signal?.aborted) {\n return;\n }\n\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }\n );\n });\n },\n }) as DynamicStructuredTool<\n SchemaT,\n SchemaOutputT,\n SchemaInputT,\n ToolOutputT\n >;\n}\n\nfunction _formatToolOutput<TOutput extends ToolOutputType>(params: {\n content: TOutput;\n name: string;\n artifact?: unknown;\n toolCallId?: string;\n metadata?: Record<string, unknown>;\n}): ToolMessage | TOutput {\n const { content, artifact, toolCallId, metadata } = params;\n if (toolCallId && !isDirectToolOutput(content)) {\n if (\n typeof content === \"string\" ||\n (Array.isArray(content) &&\n content.every((item) => typeof item === \"object\"))\n ) {\n return new ToolMessage({\n status: \"success\",\n content,\n artifact,\n tool_call_id: toolCallId,\n name: params.name,\n metadata,\n });\n } else {\n return new ToolMessage({\n status: \"success\",\n content: _stringify(content),\n artifact,\n tool_call_id: toolCallId,\n name: params.name,\n metadata,\n });\n }\n } else {\n return content;\n }\n}\n\nfunction _stringify(content: unknown): string {\n try {\n return JSON.stringify(content, null, 2) ?? \"\";\n } catch (_noOp) {\n return `${content}`;\n }\n}\n\nexport type ServerTool = Record<string, unknown>;\nexport type ClientTool =\n | StructuredToolInterface\n | DynamicTool\n | RunnableToolLike;\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { ToolCall, ToolMessage } from "../messages/tool.cjs";
2
- import { InferInteropZodInput, InferInteropZodOutput, ZodObjectV3, ZodObjectV4, ZodStringV3, ZodStringV4 } from "../utils/types/zod.cjs";
2
+ import { InferInteropZodInput, InferInteropZodOutput, InteropZodObject, InteropZodType, ZodObjectV3, ZodObjectV4, ZodStringV3, ZodStringV4 } from "../utils/types/zod.cjs";
3
3
  import { CallbackManagerForToolRun } from "../callbacks/manager.cjs";
4
4
  import { RunnableConfig } from "../runnables/types.cjs";
5
- import { RunnableFunc } from "../runnables/base.cjs";
5
+ import { RunnableFunc, RunnableToolLike } from "../runnables/base.cjs";
6
6
  import { JsonSchema7Type } from "../utils/zod-to-json-schema/parseTypes.cjs";
7
7
  import { BaseLangChain } from "../language_models/base.cjs";
8
8
  import { ToolInputParsingException } from "./utils.cjs";
9
- import { BaseDynamicToolInput, ContentAndArtifact, DynamicStructuredToolInput, DynamicToolInput, ResponseFormat, StringInputToolSchema, StructuredToolCallInput, StructuredToolInterface, StructuredToolParams, ToolInputSchemaBase, ToolInputSchemaInputType, ToolInputSchemaOutputType, ToolInterface, ToolOutputType, ToolParams, ToolReturnType, ToolRunnableConfig, isLangChainTool, isRunnableToolLike, isStructuredTool, isStructuredToolParams } from "./types.cjs";
9
+ import { BaseDynamicToolInput, ContentAndArtifact, DynamicStructuredToolInput, DynamicToolInput, ResponseFormat, StringInputToolSchema, StructuredToolCallInput, StructuredToolInterface, StructuredToolParams, ToolInputSchemaBase, ToolInputSchemaInputType, ToolInputSchemaOutputType, ToolInterface, ToolOutputType, ToolParams, ToolReturnType, ToolRunnableConfig, ToolRuntime, isLangChainTool, isRunnableToolLike, isStructuredTool, isStructuredToolParams } from "./types.cjs";
10
10
  import { z } from "zod/v3";
11
11
 
12
12
  //#region src/tools/index.d.ts
@@ -204,6 +204,15 @@ declare function tool<SchemaT extends ZodStringV4, ToolOutputT = ToolOutputType>
204
204
  declare function tool<SchemaT extends ZodObjectV3, SchemaOutputT = InferInteropZodOutput<SchemaT>, SchemaInputT = InferInteropZodInput<SchemaT>, ToolOutputT = ToolOutputType>(func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;
205
205
  declare function tool<SchemaT extends ZodObjectV4, SchemaOutputT = InferInteropZodOutput<SchemaT>, SchemaInputT = InferInteropZodInput<SchemaT>, ToolOutputT = ToolOutputType>(func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;
206
206
  declare function tool<SchemaT extends JsonSchema7Type, SchemaOutputT = ToolInputSchemaOutputType<SchemaT>, SchemaInputT = ToolInputSchemaInputType<SchemaT>, ToolOutputT = ToolOutputType>(func: RunnableFunc<Parameters<DynamicStructuredToolInput<SchemaT>["func"]>[0], ToolOutputT, ToolRunnableConfig>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;
207
+ declare function tool<SchemaT extends InteropZodObject | InteropZodType<string> | JsonSchema7Type = InteropZodObject, SchemaOutputT = ToolInputSchemaOutputType<SchemaT>, SchemaInputT = ToolInputSchemaInputType<SchemaT>, ToolOutputT = ToolOutputType>(func: RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT> | DynamicTool<ToolOutputT>;
208
+ // Overloads with ToolRuntime as CallOptions
209
+ declare function tool<SchemaT extends ZodStringV3, ToolOutputT = ToolOutputType, TState = unknown, TContext = unknown>(func: (input: InferInteropZodOutput<SchemaT>, runtime: ToolRuntime<TState, TContext>) => ToolOutputT | Promise<ToolOutputT>, fields: ToolWrapperParams<SchemaT>): DynamicTool<ToolOutputT>;
210
+ declare function tool<SchemaT extends ZodStringV4, ToolOutputT = ToolOutputType, TState = unknown, TContext = unknown>(func: (input: InferInteropZodOutput<SchemaT>, runtime: ToolRuntime<TState, TContext>) => ToolOutputT | Promise<ToolOutputT>, fields: ToolWrapperParams<SchemaT>): DynamicTool<ToolOutputT>;
211
+ declare function tool<SchemaT extends ZodObjectV3, SchemaOutputT = InferInteropZodOutput<SchemaT>, SchemaInputT = InferInteropZodInput<SchemaT>, ToolOutputT = ToolOutputType, TState = unknown, TContext = unknown>(func: (input: SchemaOutputT, runtime: ToolRuntime<TState, TContext>) => ToolOutputT | Promise<ToolOutputT>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;
212
+ declare function tool<SchemaT extends ZodObjectV4, SchemaOutputT = InferInteropZodOutput<SchemaT>, SchemaInputT = InferInteropZodInput<SchemaT>, ToolOutputT = ToolOutputType, TState = unknown, TContext = unknown>(func: (input: SchemaOutputT, runtime: ToolRuntime<TState, TContext>) => ToolOutputT | Promise<ToolOutputT>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;
213
+ declare function tool<SchemaT extends JsonSchema7Type, SchemaOutputT = ToolInputSchemaOutputType<SchemaT>, SchemaInputT = ToolInputSchemaInputType<SchemaT>, ToolOutputT = ToolOutputType, TState = unknown, TContext = unknown>(func: (input: Parameters<DynamicStructuredToolInput<SchemaT>["func"]>[0], runtime: ToolRuntime<TState, TContext>) => ToolOutputT | Promise<ToolOutputT>, fields: ToolWrapperParams<SchemaT>): DynamicStructuredTool<SchemaT, SchemaOutputT, SchemaInputT, ToolOutputT>;
214
+ type ServerTool = Record<string, unknown>;
215
+ type ClientTool = StructuredToolInterface | DynamicTool | RunnableToolLike;
207
216
  //#endregion
208
- export { type BaseDynamicToolInput, BaseToolkit, type ContentAndArtifact, DynamicStructuredTool, type DynamicStructuredToolInput, DynamicTool, type DynamicToolInput, type ResponseFormat, StructuredTool, type StructuredToolCallInput, type StructuredToolInterface, type StructuredToolParams, Tool, ToolInputParsingException, type ToolInterface, type ToolParams, type ToolReturnType, type ToolRunnableConfig, type ToolInputSchemaBase as ToolSchemaBase, isLangChainTool, isRunnableToolLike, isStructuredTool, isStructuredToolParams, tool };
217
+ export { type BaseDynamicToolInput, BaseToolkit, ClientTool, type ContentAndArtifact, DynamicStructuredTool, type DynamicStructuredToolInput, DynamicTool, type DynamicToolInput, type ResponseFormat, ServerTool, StructuredTool, type StructuredToolCallInput, type StructuredToolInterface, type StructuredToolParams, Tool, ToolInputParsingException, type ToolInterface, type ToolParams, type ToolReturnType, type ToolRunnableConfig, type ToolRuntime, type ToolInputSchemaBase as ToolSchemaBase, isLangChainTool, isRunnableToolLike, isStructuredTool, isStructuredToolParams, tool };
209
218
  //# sourceMappingURL=index.d.cts.map