From cb4c642361461e8d122dc6bcf78e0ebf09d2977a Mon Sep 17 00:00:00 2001 From: eleliauk <2831336720@qq.com> Date: Tue, 9 Sep 2025 09:20:16 +0800 Subject: [PATCH 1/2] refactor: migrate Tavily search tool to @langchain/tavily - replaced deprecated @langchain/community TavilySearchResults with @langchain/tavily - updated package.json dependencies - ensured TAVILY_API_KEY env config remains compatible --- examples/agent_executor/base.ipynb | 7 +++---- .../base.ipynb | 6 +++--- examples/quickstart.ipynb | 10 +++++----- examples/rag/langgraph_adaptive_rag_local.ipynb | 7 +++---- examples/rag/langgraph_crag_mistral.ipynb | 6 +++--- examples/rewoo/rewoo.ipynb | 6 +++--- libs/langgraph/src/tests/tracing.int.test.ts | 10 +++++----- 7 files changed, 25 insertions(+), 27 deletions(-) diff --git a/examples/agent_executor/base.ipynb b/examples/agent_executor/base.ipynb index 7eeddb4d1..e20904084 100644 --- a/examples/agent_executor/base.ipynb +++ b/examples/agent_executor/base.ipynb @@ -97,16 +97,15 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "25789946", "metadata": {}, "outputs": [], "source": [ - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "import { ToolNode } from \"@langchain/langgraph/prebuilt\";\n", "\n", - "const tools = [new TavilySearchResults({ maxResults: 1 })];\n", - "\n", + "const tools = [new TavilySearch({ maxResults: 1 })];\n", "const toolNode = new ToolNode(tools);" ] }, diff --git a/examples/chat_agent_executor_with_function_calling/base.ipynb b/examples/chat_agent_executor_with_function_calling/base.ipynb index 28e195e27..94d4f1b78 100644 --- a/examples/chat_agent_executor_with_function_calling/base.ipynb +++ b/examples/chat_agent_executor_with_function_calling/base.ipynb @@ -71,15 +71,15 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "5cf3331e-ccb3-41c8-aeb9-a840a94d41e7", "metadata": {}, "outputs": [], "source": [ "import { ToolExecutor } from \"@langchain/langgraph/prebuilt\";\n", - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "\n", - "const tools = [new TavilySearchResults({ maxResults: 1 })];\n", + "const agentTools = [new TavilySearch({ maxResults: 3 })];\n", "\n", "const toolExecutor = new ToolExecutor({\n", " tools,\n", diff --git a/examples/quickstart.ipynb b/examples/quickstart.ipynb index 0d3c8e202..fc6970ef3 100644 --- a/examples/quickstart.ipynb +++ b/examples/quickstart.ipynb @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -120,14 +120,14 @@ "process.env.OPENAI_API_KEY = \"sk-...\";\n", "process.env.TAVILY_API_KEY = \"tvly-...\";\n", "\n", - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "import { ChatOpenAI } from \"@langchain/openai\";\n", "import { MemorySaver } from \"@langchain/langgraph\";\n", "import { HumanMessage } from \"@langchain/core/messages\";\n", "import { createReactAgent } from \"@langchain/langgraph/prebuilt\";\n", "\n", "// Define the tools for the agent to use\n", - "const agentTools = [new TavilySearchResults({ maxResults: 3 })];\n", + "const agentTools = [new TavilySearch({ maxResults: 3 })];\n", "const agentModel = new ChatOpenAI({ temperature: 0 });\n", "\n", "// Initialize memory to persist state between graph runs\n", @@ -246,14 +246,14 @@ "process.env.OPENAI_API_KEY = \"sk-...\";\n", "process.env.TAVILY_API_KEY = \"tvly-...\";\n", "\n", - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "import { ChatOpenAI } from \"@langchain/openai\";\n", "import { HumanMessage, AIMessage } from \"@langchain/core/messages\";\n", "import { ToolNode } from \"@langchain/langgraph/prebuilt\";\n", "import { StateGraph, MessagesAnnotation } from \"@langchain/langgraph\";\n", "\n", "// Define the tools for the agent to use\n", - "const tools = [new TavilySearchResults({ maxResults: 3 })];\n", + "const agentTools = [new TavilySearch({ maxResults: 3 })];\n", "const toolNode = new ToolNode(tools);\n", "\n", "// Create a model and give it access to the tools\n", diff --git a/examples/rag/langgraph_adaptive_rag_local.ipynb b/examples/rag/langgraph_adaptive_rag_local.ipynb index a5b1bcda6..2d0e121a3 100644 --- a/examples/rag/langgraph_adaptive_rag_local.ipynb +++ b/examples/rag/langgraph_adaptive_rag_local.ipynb @@ -556,7 +556,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "6c3c1c70-ff84-41e8-bf72-738ed52f2dde", "metadata": {}, "outputs": [ @@ -569,10 +569,9 @@ } ], "source": [ - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", - "\n", - "const webSearchTool = new TavilySearchResults({ maxResults: 3 });\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "\n", + "const webSearchTool = [new TavilySearch({ maxResults: 3 })];\n", "await webSearchTool.invoke(\"red robin\");" ] }, diff --git a/examples/rag/langgraph_crag_mistral.ipynb b/examples/rag/langgraph_crag_mistral.ipynb index 0f9f8e76a..f47b8e221 100644 --- a/examples/rag/langgraph_crag_mistral.ipynb +++ b/examples/rag/langgraph_crag_mistral.ipynb @@ -299,11 +299,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "import { Document, DocumentInterface } from \"@langchain/core/documents\";\n", "import { z } from \"zod\";\n", "import { ChatPromptTemplate } from \"@langchain/core/prompts\";\n", @@ -543,7 +543,7 @@ " const question = stateObject.question;\n", " const documents = stateObject.documents;\n", "\n", - " const tool = new TavilySearchResults();\n", + " const tool = new TavilySearch();\n", " const docs = await tool.invoke(question);\n", " const webResults = new Document({ pageContent: docs });\n", " const newDocs = documents.concat(webResults);\n", diff --git a/examples/rewoo/rewoo.ipynb b/examples/rewoo/rewoo.ipynb index 0b53e215f..a1b576d38 100644 --- a/examples/rewoo/rewoo.ipynb +++ b/examples/rewoo/rewoo.ipynb @@ -308,14 +308,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "91a33c89", "metadata": {}, "outputs": [], "source": [ - "import { TavilySearchResults } from \"@langchain/community/tools/tavily_search\";\n", + "import { TavilySearch } from \"@langchain/tavily\";\n", "\n", - "const search = new TavilySearchResults();\n" + "const search = new TavilySearch();\n" ] }, { diff --git a/libs/langgraph/src/tests/tracing.int.test.ts b/libs/langgraph/src/tests/tracing.int.test.ts index b6edc86d0..d0b9993e2 100644 --- a/libs/langgraph/src/tests/tracing.int.test.ts +++ b/libs/langgraph/src/tests/tracing.int.test.ts @@ -4,7 +4,7 @@ import { test } from "vitest"; import { pull } from "langchain/hub"; import { ChatOpenAI } from "@langchain/openai"; -import { TavilySearchResults } from "@langchain/community/tools/tavily_search"; +import { TavilySearch } from "@langchain/tavily"; import { ChatPromptTemplate, MessagesPlaceholder, @@ -30,7 +30,7 @@ import { createAgentExecutor } from "../prebuilt/agent_executor.js"; import { StateGraph, END, START } from "../index.js"; test.skip("Can invoke with tracing", async () => { - const tools = [new TavilySearchResults({ maxResults: 1 })]; + const tools = [new TavilySearch({ maxResults: 1 })]; // Get the prompt to use - you can modify this! const prompt = await pull( @@ -138,7 +138,7 @@ test.skip("Can invoke with tracing", async () => { }); test.skip("Can nest an agent executor", async () => { - const tools = [new TavilySearchResults({ maxResults: 3 })]; + const tools = [new TavilySearch({ maxResults: 3 })]; const llm = new ChatOpenAI({ modelName: "gpt-4-1106-preview", temperature: 0, @@ -258,7 +258,7 @@ test.skip("Can nest an agent executor", async () => { }); test.skip("Can nest a graph within a graph", async () => { - const tools = [new TavilySearchResults({ maxResults: 3 })]; + const tools = [new TavilySearch({ maxResults: 3 })]; const llm = new ChatOpenAI({ modelName: "gpt-4-1106-preview", temperature: 0, @@ -376,7 +376,7 @@ test.skip("Can nest a graph within a graph", async () => { }); test.skip("Should trace plan and execute flow", async () => { - const tools = [new TavilySearchResults({ maxResults: 3 })]; + const tools = [new TavilySearch({ maxResults: 3 })]; // Get the prompt to use - you can modify this! const prompt = await pull( "hwchase17/openai-functions-agent" From c82fb4d5adbb560f6653ef2b4774dfc02676ea6c Mon Sep 17 00:00:00 2001 From: Tat Dat Duong Date: Thu, 11 Sep 2025 12:13:51 +0200 Subject: [PATCH 2/2] Fix typo --- examples/chat_agent_executor_with_function_calling/base.ipynb | 2 +- examples/quickstart.ipynb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/chat_agent_executor_with_function_calling/base.ipynb b/examples/chat_agent_executor_with_function_calling/base.ipynb index 94d4f1b78..3f38b5f84 100644 --- a/examples/chat_agent_executor_with_function_calling/base.ipynb +++ b/examples/chat_agent_executor_with_function_calling/base.ipynb @@ -79,7 +79,7 @@ "import { ToolExecutor } from \"@langchain/langgraph/prebuilt\";\n", "import { TavilySearch } from \"@langchain/tavily\";\n", "\n", - "const agentTools = [new TavilySearch({ maxResults: 3 })];\n", + "const tools = [new TavilySearch({ maxResults: 1 })];\n", "\n", "const toolExecutor = new ToolExecutor({\n", " tools,\n", diff --git a/examples/quickstart.ipynb b/examples/quickstart.ipynb index fc6970ef3..7899b16b0 100644 --- a/examples/quickstart.ipynb +++ b/examples/quickstart.ipynb @@ -253,7 +253,7 @@ "import { StateGraph, MessagesAnnotation } from \"@langchain/langgraph\";\n", "\n", "// Define the tools for the agent to use\n", - "const agentTools = [new TavilySearch({ maxResults: 3 })];\n", + "const tools = [new TavilySearch({ maxResults: 3 })];\n", "const toolNode = new ToolNode(tools);\n", "\n", "// Create a model and give it access to the tools\n",