From 1782388547919c8f8f118b62148d12978b7a8bf5 Mon Sep 17 00:00:00 2001 From: Christian Bromann Date: Fri, 14 Nov 2025 00:10:59 -0800 Subject: [PATCH] feat(anthropic): support websearch tool --- examples/src/provider/anthropic/websearch.ts | 21 ++++++++++ libs/langchain/tsconfig.json | 5 ++- .../langchain-anthropic/src/tools/index.ts | 2 + .../src/tools/websearch.ts | 38 +++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 examples/src/provider/anthropic/websearch.ts create mode 100644 libs/providers/langchain-anthropic/src/tools/websearch.ts diff --git a/examples/src/provider/anthropic/websearch.ts b/examples/src/provider/anthropic/websearch.ts new file mode 100644 index 000000000000..c6fe80e77cfc --- /dev/null +++ b/examples/src/provider/anthropic/websearch.ts @@ -0,0 +1,21 @@ +import { createAgent, HumanMessage } from "langchain"; +import { ChatAnthropic, tools } from "@langchain/anthropic"; + +const model = new ChatAnthropic({ + model: "claude-sonnet-4-5-20250929", +}); + +const agent = createAgent({ + model, + tools: [ + tools.webSearch_20250305({ + maxUses: 5, + }), + ], +}); + +const result = await agent.invoke({ + messages: [new HumanMessage("What's the weather in NYC?")], +}); + +console.log(result); diff --git a/libs/langchain/tsconfig.json b/libs/langchain/tsconfig.json index 8c69a82c22c2..e9b3a2f2bf90 100644 --- a/libs/langchain/tsconfig.json +++ b/libs/langchain/tsconfig.json @@ -18,6 +18,9 @@ "allowJs": true, "strict": true }, - "include": ["src/**/*"], + "include": [ + "src/**/*", + "../providers/langchain-anthropic/src/tools/utils/FileData.ts" + ], "exclude": ["node_modules", "dist", "docs"] } diff --git a/libs/providers/langchain-anthropic/src/tools/index.ts b/libs/providers/langchain-anthropic/src/tools/index.ts index de9cd54bd038..9c15c493fd83 100644 --- a/libs/providers/langchain-anthropic/src/tools/index.ts +++ b/libs/providers/langchain-anthropic/src/tools/index.ts @@ -1,4 +1,5 @@ import { memory, memory_20250818 } from "./memory.js"; +import { webSearch_20250305 } from "./websearch.js"; export type { FileSystem } from "./utils/FileSystem.js"; export { StateFileSystem } from "./utils/StateFileSystem.js"; @@ -6,4 +7,5 @@ export { StateFileSystem } from "./utils/StateFileSystem.js"; export const tools = { memory_20250818, memory, + webSearch_20250305, }; diff --git a/libs/providers/langchain-anthropic/src/tools/websearch.ts b/libs/providers/langchain-anthropic/src/tools/websearch.ts new file mode 100644 index 000000000000..ef500c885bd7 --- /dev/null +++ b/libs/providers/langchain-anthropic/src/tools/websearch.ts @@ -0,0 +1,38 @@ +import Anthropic from "@anthropic-ai/sdk"; + +import { tool, type DynamicStructuredTool } from "@langchain/core/tools"; + +interface WebSearchOptions { + maxUses?: number; + allowedDomains?: string[]; + blockedDomains?: string[]; + userLocation?: Anthropic.Beta.BetaWebSearchTool20250305.UserLocation; +} + +export function webSearch_20250305( + options?: WebSearchOptions +): DynamicStructuredTool { + const webSearchTool = tool( + () => { + // not implemented + }, + { + name: "web_search", + description: "Web search tool", + schema: {}, + } + ); + + webSearchTool.metadata = { + providerToolDefinition: { + type: "web_search_20250305", + name: "web_search", + max_uses: options?.maxUses, + allowed_domains: options?.allowedDomains, + blocked_domains: options?.blockedDomains, + user_location: options?.userLocation, + }, + }; + + return webSearchTool; +}