{"version":3,"sources":["../../../src/adapters/langchain/tools.ts"],"names":["LangChainTool","Tool","tool","serializedSchemaKey","emitter","constructor","options","name","description","Emitter","root","child","namespace","toCamelCase","creator","register","Class","LCTools","DynamicTool","DynamicStructuredTool","Serializer","toPlain","instance","pickBy","pick","schema","ZodEffects","toJsonSchema","sourceType","isTruthy","fromPlain","metadata","inputSchema","getProp","_run","arg","run","outputClass","JSONToolOutput","raw","invoke","signal","createSnapshot","loadSnapshot","snapshot"],"mappings":"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","file":"tools.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  BaseToolOptions,\n  BaseToolRunOptions,\n  ToolEmitter,\n  JSONToolOutput,\n  Tool,\n  ToolEvents,\n  ToolInput,\n} from \"@/tools/base.js\";\nimport type { GetRunContext } from \"@/context.js\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { ZodEffects } from \"zod\";\nimport * as LCTools from \"@langchain/core/tools\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { isTruthy, pick, pickBy, toCamelCase } from \"remeda\";\nimport { toJsonSchema } from \"@/internals/helpers/schema.js\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport { ClassConstructor } from \"@/internals/types.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport type LangChainToolRunOptions = RunnableConfig & BaseToolRunOptions;\nexport type LangChainToolOptions<TOutput = any> = BaseToolOptions & {\n  outputClass?: typeof JSONToolOutput<TOutput>;\n};\n\nexport class LangChainTool<T extends LCTools.StructuredTool, TOutput = any> extends Tool<\n  JSONToolOutput<TOutput>,\n  LangChainToolOptions<TOutput>,\n  LangChainToolRunOptions\n> {\n  declare name: string;\n  declare description: string;\n\n  protected readonly tool: T;\n  public static serializedSchemaKey = \"_internalJsonSchema\" as const;\n\n  public readonly emitter: ToolEmitter<ToolEvents<T>, JSONToolOutput<TOutput>>;\n\n  constructor({\n    tool,\n    ...options\n  }: LangChainToolOptions<TOutput> & {\n    tool: T;\n  }) {\n    super(options);\n\n    this.tool = tool;\n    this.name = tool.name;\n    this.description = tool.description;\n    this.emitter = Emitter.root.child({\n      namespace: [\"tool\", \"langchain\", toCamelCase(this.name)],\n      creator: this,\n    });\n  }\n\n  static {\n    this.register();\n\n    for (const Class of [LCTools.DynamicTool, LCTools.DynamicStructuredTool] as ClassConstructor<\n      LCTools.DynamicStructuredTool | LCTools.DynamicTool\n    >[]) {\n      Serializer.register(Class, {\n        toPlain: (instance) => ({\n          options: pickBy(\n            {\n              ...pick(instance, [\n                \"name\",\n                \"description\",\n                \"metadata\",\n                \"responseFormat\",\n                \"returnDirect\",\n                \"func\",\n              ]),\n              schema:\n                instance.schema instanceof ZodEffects\n                  ? toJsonSchema(instance.schema.sourceType())\n                  : toJsonSchema(instance.schema),\n            },\n            isTruthy,\n          ),\n        }),\n        fromPlain: ({ options }) => {\n          return new Class({\n            ...options,\n            metadata: { ...options?.metadata, [LangChainTool.serializedSchemaKey]: options.schema },\n          });\n        },\n      });\n    }\n  }\n\n  inputSchema(): T[\"schema\"] {\n    const { schema, metadata = {} } = this.tool;\n\n    return getProp(\n      metadata,\n      [LangChainTool.serializedSchemaKey],\n      schema instanceof ZodEffects ? schema.sourceType() : schema,\n    );\n  }\n\n  protected async _run(\n    arg: ToolInput<this>,\n    options: Partial<LangChainToolRunOptions>,\n    run: GetRunContext<this>,\n  ): Promise<JSONToolOutput<TOutput>> {\n    const { outputClass = JSONToolOutput } = this.options;\n    const raw = await this.tool.invoke(arg, {\n      ...options,\n      signal: run.signal,\n    });\n    return new outputClass(raw);\n  }\n\n  createSnapshot() {\n    return {\n      ...super.createSnapshot(),\n      tool: this.tool,\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    super.loadSnapshot(snapshot);\n  }\n}\n"]}