Spaces:
Sleeping
Sleeping
from langchain_community.tools.tavily_search import TavilySearchResults | |
from langgraph.prebuilt import ToolNode | |
from typing import List, Any | |
class ToolManager: | |
"""Manages tools for the chatbot, allowing dynamic addition of multiple tools.""" | |
def __init__(self, tools: List[Any] = None): | |
""" | |
Initialize the ToolManager with an optional list of tools. | |
Args: | |
tools (List[Any], optional): A list of initial tools. Defaults to None. | |
""" | |
self.tools: List[Any] = tools if tools else [] | |
def add_tool(self, tool: Any) -> None: | |
""" | |
Add a single tool to the tool list. | |
Args: | |
tool (Any): A tool instance that implements the required API. | |
""" | |
if tool is not None: | |
self.tools.append(tool) | |
else: | |
raise ValueError("Tool cannot be None.") | |
def add_tools(self, *new_tools: Any) -> None: | |
""" | |
Add multiple tools at once. | |
Args: | |
*new_tools (Any): Variable-length argument list of tools. | |
""" | |
if not new_tools: | |
raise ValueError("No tools provided. Please add at least one tool.") | |
self.tools.extend(new_tools) | |
def get_tools(self) -> List[Any]: | |
""" | |
Retrieve the list of registered tools. | |
Returns: | |
List[Any]: A list of initialized tool instances. | |
""" | |
return self.tools | |
def create_tool_node(self) -> ToolNode: | |
""" | |
Creates and returns a ToolNode for the graph using registered tools. | |
Returns: | |
ToolNode: A LangGraph ToolNode containing all registered tools. | |
""" | |
if not self.tools: | |
raise ValueError("No tools registered. Please add tools before creating a ToolNode.") | |
return ToolNode(tools=self.tools) | |