{"version":3,"sources":["../../../src/adapters/langchain/tools.ts"],"names":["LangChainTool","Tool","tool","serializedSchemaKey","emitter","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 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\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 as Record<string, any>, {\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"]}