import { AgentMiddleware } from "./types.js"; import { ClientTool, ServerTool, StructuredToolInterface } from "@langchain/core/tools"; //#region src/agents/middleware/providerToolSearch.d.ts type ToolName = string; type ToolIdentifier = ToolName | StructuredToolInterface; type ProviderToolSearchMiddlewareConfig = { /** * Which tools are deferred; withheld from the model until its tool search surfaces them. * * Tools already constructed with `extras.defer_loading === true` are deferred * regardless of this option; if `searchableTools` is omitted, only those pre-marked * tools are deferred. */ searchableTools?: ToolIdentifier[]; }; /** * Provider-side tool search middleware. * * Leverages server-side tool search: the full client tool catalog is forwarded * to the provider, with deferred tools marked `defer_loading` so the provider * discloses them on demand via its own search. A tool is deferred when it is * named in `searchableTools` or built with `extras.defer_loading: true`. * * Requires a model with server-side tool search support: OpenAI gpt-5.4+ or Anthropic * Claude Sonnet 4+/Opus 4+/Haiku 4.5+. Non-Anthropic/OpenAI providers throw; an * in-family model that is too old surfaces the provider's own API error rather * than being gated here. * * @example * ```ts * import { createAgent, providerToolSearchMiddleware } from "langchain"; * import { ChatAnthropic } from "@langchain/anthropic"; * * const agent = createAgent({ * model: new ChatAnthropic({ model: "claude-sonnet-4-5" }), * tools: [getWeather, ...nicheTools], * middleware: [ * // Defer the niche tools behind the provider's tool search; the model * // discovers them on demand instead of receiving every schema up front. * providerToolSearchMiddleware({ searchableTools: nicheTools }), * ], * }); * ``` * * @example * ```ts * import { tool } from "@langchain/core/tools"; * import { createAgent, providerToolSearchMiddleware } from "langchain"; * import { ChatAnthropic } from "@langchain/anthropic"; * * // A tool marked `defer_loading` at construction is deferred on its own — * // no need to list it in `searchableTools`; the middleware honors the flag. * const sendEmail = tool(sendEmailFn, { * name: "send_email", * description: "Send an email", * schema: sendEmailSchema, * extras: { defer_loading: true }, * }); * * const agent = createAgent({ * model: new ChatAnthropic({ model: "claude-sonnet-4-5" }), * tools: [getWeather, sendEmail], * middleware: [providerToolSearchMiddleware()], * }); * ``` * * @param config - Configuration options for the middleware * @param config.searchableTools - Tools to defer behind tool search * @returns A middleware instance that can be used with `createAgent` */ declare function providerToolSearchMiddleware(config?: ProviderToolSearchMiddlewareConfig): AgentMiddleware; //#endregion export { ProviderToolSearchMiddlewareConfig, providerToolSearchMiddleware }; //# sourceMappingURL=providerToolSearch.d.ts.map