{"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 _isMessageContentBlockShaped(item: unknown) {\n  return typeof item === \"object\" && item !== null && \"type\" in item;\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) && content.every(_isMessageContentBlockShaped))\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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"}