{"version":3,"file":"index.cjs","names":["BaseLangChain","ensureConfig","mergeConfigs","_isToolCall","isInteropZodSchema","interopParseAsync","isInteropZodError","z4","ToolInputParsingException","parseCallbackConfigArg","CallbackManager","_configHasToolCallId","isAsyncGenerator","consumeAsyncGenerator","z","isSimpleStringZodSchema","validatesOnlyStrings","patchConfig","AsyncLocalStorageProviderSingleton","pickRunnableConfigKeys","getAbortSignalError","isDirectToolOutput","ToolMessage"],"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  isInteropZodError,\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  ToolEventType,\n  InferToolEventFromFunc,\n  InferToolOutputFromFunc,\n} from \"./types.js\";\nimport { type JSONSchema, validatesOnlyStrings } from \"../utils/json_schema.js\";\nimport { consumeAsyncGenerator, isAsyncGenerator } from \"../runnables/iter.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  ToolEventT = ToolEventType,\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   * Optional provider-specific extra fields for the tool.\n   *\n   * This is used to pass provider-specific configuration that doesn't fit into\n   * standard tool fields.\n   */\n  extras?: Record<string, unknown>;\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    this.extras = fields?.extras ?? this.extras;\n  }\n\n  protected abstract _call(\n    arg: SchemaOutputT,\n    runManager?: CallbackManagerForToolRun,\n    parentConfig?: ToolRunnableConfig\n  ): Promise<ToolOutputT> | AsyncGenerator<ToolEventT, 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        if (isInteropZodError(e)) {\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\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 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      toolCallId\n    );\n    delete config.runId;\n\n    let result;\n    try {\n      const raw = await this._call(parsed, runManager, config);\n      result = isAsyncGenerator(raw)\n        ? await consumeAsyncGenerator(raw, async (chunk) => {\n            try {\n              await runManager?.handleToolEvent(chunk);\n            } catch (streamError) {\n              await runManager?.handleToolError(streamError);\n            }\n          })\n        : raw;\n    } catch (e) {\n      await runManager?.handleToolError(e);\n      throw e;\n    }\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    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<\n  ToolOutputT = ToolOutputType,\n  ToolEventT = ToolEventType,\n>\n  extends StructuredTool<\n    StringInputToolSchema,\n    ToolInputSchemaOutputType<StringInputToolSchema>,\n    ToolInputSchemaInputType<StringInputToolSchema>,\n    ToolOutputT,\n    ToolEventT\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  ToolEventT = ToolEventType,\n> extends Tool<ToolOutputT, ToolEventT> {\n  static lc_name() {\n    return \"DynamicTool\";\n  }\n\n  name: string;\n\n  description: string;\n\n  func: DynamicToolInput<ToolOutputT, ToolEventT>[\"func\"];\n\n  constructor(fields: DynamicToolInput<ToolOutputT, ToolEventT>) {\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  _call(\n    input: string, // DynamicTool's _call specifically expects a string after schema transformation\n    runManager?: CallbackManagerForToolRun,\n    parentConfig?: ToolRunnableConfig\n  ): Promise<ToolOutputT> | AsyncGenerator<ToolEventT, 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 *\n * @template SchemaT The input schema type for the tool (Zod schema or JSON schema). Defaults to `ToolInputSchemaBase`.\n * @template SchemaOutputT The output type derived from the schema after parsing/validation. Defaults to `ToolInputSchemaOutputType<SchemaT>`.\n * @template SchemaInputT The input type derived from the schema before parsing. Defaults to `ToolInputSchemaInputType<SchemaT>`.\n * @template ToolOutputT The return type of the tool's function. Defaults to `ToolOutputType`.\n * @template NameT The literal type of the tool name (for discriminated union support). Defaults to `string`.\n */\nexport class DynamicStructuredTool<\n  SchemaT = ToolInputSchemaBase,\n  SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n  SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n  ToolOutputT = ToolOutputType,\n  ToolEventT = ToolEventType,\n  NameT extends string = string,\n> extends StructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  ToolOutputT,\n  ToolEventT\n> {\n  static lc_name() {\n    return \"DynamicStructuredTool\";\n  }\n\n  declare name: NameT;\n\n  description: string;\n\n  func: DynamicStructuredToolInput<\n    SchemaT,\n    SchemaOutputT,\n    ToolOutputT,\n    ToolEventT\n  >[\"func\"];\n\n  schema: SchemaT;\n\n  constructor(\n    fields: DynamicStructuredToolInput<\n      SchemaT,\n      SchemaOutputT,\n      ToolOutputT,\n      ToolEventT\n    > & {\n      name: NameT;\n    }\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<\n        SchemaT,\n        SchemaOutputT,\n        ToolOutputT,\n        ToolEventT\n      >[\"func\"]\n    >[0],\n    runManager?: CallbackManagerForToolRun,\n    parentConfig?: RunnableConfig\n  ): Promise<ToolOutputT> | AsyncGenerator<ToolEventT, 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 * @template {string} NameT The literal name type for discriminated union support.\n */\nexport interface ToolWrapperParams<\n  RunInput = ToolInputSchemaBase | undefined,\n  NameT extends string = string,\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: NameT;\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<\n  SchemaT extends ZodStringV3,\n  ToolOutputT = ToolOutputType,\n  FuncT extends RunnableFunc<\n    InferInteropZodOutput<SchemaT>,\n    ToolOutputT,\n    ToolRunnableConfig\n  > = RunnableFunc<\n    InferInteropZodOutput<SchemaT>,\n    ToolOutputT,\n    ToolRunnableConfig\n  >,\n>(\n  func: FuncT,\n  fields: ToolWrapperParams<SchemaT>\n): DynamicTool<InferToolOutputFromFunc<FuncT>, InferToolEventFromFunc<FuncT>>;\n\nexport function tool<\n  SchemaT extends ZodStringV4,\n  ToolOutputT = ToolOutputType,\n  FuncT extends RunnableFunc<\n    InferInteropZodOutput<SchemaT>,\n    ToolOutputT,\n    ToolRunnableConfig\n  > = RunnableFunc<\n    InferInteropZodOutput<SchemaT>,\n    ToolOutputT,\n    ToolRunnableConfig\n  >,\n>(\n  func: FuncT,\n  fields: ToolWrapperParams<SchemaT>\n): DynamicTool<InferToolOutputFromFunc<FuncT>, InferToolEventFromFunc<FuncT>>;\n\nexport function tool<\n  SchemaT extends ZodObjectV3,\n  NameT extends string,\n  SchemaOutputT = InferInteropZodOutput<SchemaT>,\n  SchemaInputT = InferInteropZodInput<SchemaT>,\n  ToolOutputT = ToolOutputType,\n  FuncT extends RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig> =\n    RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n>(\n  func: FuncT,\n  fields: ToolWrapperParams<SchemaT, NameT>\n): DynamicStructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  InferToolOutputFromFunc<FuncT>,\n  InferToolEventFromFunc<FuncT>,\n  NameT\n>;\n\nexport function tool<\n  SchemaT extends ZodObjectV4,\n  NameT extends string,\n  SchemaOutputT = InferInteropZodOutput<SchemaT>,\n  SchemaInputT = InferInteropZodInput<SchemaT>,\n  ToolOutputT = ToolOutputType,\n  FuncT extends RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig> =\n    RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n>(\n  func: FuncT,\n  fields: ToolWrapperParams<SchemaT, NameT>\n): DynamicStructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  InferToolOutputFromFunc<FuncT>,\n  InferToolEventFromFunc<FuncT>,\n  NameT\n>;\n\nexport function tool<\n  SchemaT extends JSONSchema,\n  NameT extends string,\n  SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n  SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n  ToolOutputT = ToolOutputType,\n  FuncT extends RunnableFunc<\n    Parameters<DynamicStructuredToolInput<SchemaT>[\"func\"]>[0],\n    ToolOutputT,\n    ToolRunnableConfig\n  > = RunnableFunc<\n    Parameters<DynamicStructuredToolInput<SchemaT>[\"func\"]>[0],\n    ToolOutputT,\n    ToolRunnableConfig\n  >,\n>(\n  func: FuncT,\n  fields: ToolWrapperParams<SchemaT, NameT>\n): DynamicStructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  InferToolOutputFromFunc<FuncT>,\n  InferToolEventFromFunc<FuncT>,\n  NameT\n>;\n\nexport function tool<\n  SchemaT extends InteropZodObject | InteropZodType<string> | JSONSchema =\n    InteropZodObject,\n  NameT extends string = string,\n  SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n  SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n  ToolOutputT = ToolOutputType,\n  FuncT extends RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig> =\n    RunnableFunc<SchemaOutputT, ToolOutputT, ToolRunnableConfig>,\n>(\n  func: FuncT,\n  fields: ToolWrapperParams<SchemaT, NameT>\n):\n  | DynamicStructuredTool<\n      SchemaT,\n      SchemaOutputT,\n      SchemaInputT,\n      InferToolOutputFromFunc<FuncT>,\n      InferToolEventFromFunc<FuncT>,\n      NameT\n    >\n  | DynamicTool<InferToolOutputFromFunc<FuncT>, InferToolEventFromFunc<FuncT>>;\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  NameT extends string,\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, NameT>\n): DynamicStructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  ToolOutputT,\n  ToolEventType,\n  NameT\n>;\n\nexport function tool<\n  SchemaT extends ZodObjectV4,\n  NameT extends string,\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, NameT>\n): DynamicStructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  ToolOutputT,\n  ToolEventType,\n  NameT\n>;\n\nexport function tool<\n  SchemaT extends JSONSchema,\n  NameT extends string,\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, NameT>\n): DynamicStructuredTool<\n  SchemaT,\n  SchemaOutputT,\n  SchemaInputT,\n  ToolOutputT,\n  ToolEventType,\n  NameT\n>;\n\nexport function tool<\n  SchemaT extends InteropZodObject | InteropZodType<string> | JSONSchema =\n    InteropZodObject,\n  NameT extends string = string,\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, NameT>\n):\n  | DynamicStructuredTool<\n      SchemaT,\n      SchemaOutputT,\n      SchemaInputT,\n      ToolOutputT,\n      ToolEventType,\n      NameT\n    >\n  | DynamicTool<ToolOutputT>;\n\nexport function tool<\n  SchemaT extends InteropZodObject | InteropZodType<string> | JSONSchema =\n    InteropZodObject,\n  NameT extends string = string,\n  SchemaOutputT = ToolInputSchemaOutputType<SchemaT>,\n  SchemaInputT = ToolInputSchemaInputType<SchemaT>,\n  ToolOutputT = ToolOutputType,\n  ToolEventT = ToolEventType,\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, NameT>\n):\n  | DynamicStructuredTool<\n      SchemaT,\n      SchemaOutputT,\n      SchemaInputT,\n      ToolOutputT,\n      ToolEventT,\n      NameT\n    >\n  | DynamicTool<ToolOutputT, ToolEventT> {\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, ToolEventT>({\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          // oxlint-disable-next-line no-void\n          void AsyncLocalStorageProviderSingleton.runWithConfig(\n            pickRunnableConfigKeys(childConfig),\n            async () => {\n              try {\n                // oxlint-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    ToolEventT,\n    NameT\n  >({\n    ...fields,\n    description,\n    schema,\n    func: async (input, runManager, config) => {\n      return new Promise<ToolOutputT>((resolve, reject) => {\n        let listener: (() => void) | undefined;\n        const cleanup = () => {\n          if (config?.signal && listener) {\n            config.signal.removeEventListener(\"abort\", listener);\n          }\n        };\n\n        if (config?.signal) {\n          listener = () => {\n            cleanup();\n            reject(getAbortSignalError(config.signal));\n          };\n          config.signal.addEventListener(\"abort\", listener, { once: true });\n        }\n\n        const childConfig = patchConfig(config, {\n          callbacks: runManager?.getChild(),\n        });\n        // oxlint-disable-next-line no-void\n        void AsyncLocalStorageProviderSingleton.runWithConfig(\n          pickRunnableConfigKeys(childConfig),\n          async () => {\n            try {\n              // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n              const result = await func(input as any, childConfig as any);\n              if (isAsyncGenerator(result)) {\n                // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n                resolve(result as any);\n                return;\n              }\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                cleanup();\n                return;\n              }\n\n              cleanup();\n              resolve(result);\n            } catch (e) {\n              cleanup();\n              reject(e);\n            }\n          }\n        );\n      });\n    },\n  }) as DynamicStructuredTool<\n    SchemaT,\n    SchemaOutputT,\n    SchemaInputT,\n    ToolOutputT,\n    ToolEventT,\n    NameT\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) ?? \"\";\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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"}