Coverage for haystack/tools/utils.py: 100%
29 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 13:53 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 13:53 +0000
1# SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
2#
3# SPDX-License-Identifier: Apache-2.0
5from typing import TYPE_CHECKING
7from haystack.tools.tool import Tool
8from haystack.tools.toolset import Toolset
10if TYPE_CHECKING:
11 from haystack.tools import ToolsType
14def warm_up_tools(tools: "ToolsType | None" = None) -> None:
15 """
16 Warm up tools from various formats (Tools, Toolsets, or mixed lists).
18 For Toolset objects, this delegates to Toolset.warm_up(), which by default
19 warms up all tools in the Toolset. Toolset subclasses can override warm_up()
20 to customize initialization behavior (e.g., setting up shared resources).
22 :param tools: A list of Tool and/or Toolset objects, a single Toolset, or None.
23 """
24 if tools is None:
25 return
27 # If tools is a single Toolset or Tool, warm it up
28 if isinstance(tools, (Toolset, Tool)):
29 if hasattr(tools, "warm_up"):
30 tools.warm_up()
31 return
33 # If tools is a list, warm up each item (Tool or Toolset)
34 if isinstance(tools, list):
35 for item in tools:
36 if hasattr(item, "warm_up"):
37 item.warm_up()
40def flatten_tools_or_toolsets(tools: "ToolsType | None") -> list[Tool]:
41 """
42 Flatten tools from various formats into a list of Tool instances.
44 :param tools: Tools in list[Union[Tool, Toolset]], Toolset, or None format.
45 :returns: A flat list of Tool instances.
46 """
47 if tools is None:
48 return []
50 if isinstance(tools, Toolset):
51 return list(tools)
53 if isinstance(tools, list):
54 flattened: list[Tool] = []
55 for item in tools:
56 if isinstance(item, Toolset):
57 flattened.extend(list(item))
58 elif isinstance(item, Tool):
59 flattened.append(item)
60 else:
61 raise TypeError("Items in the tools list must be Tool or Toolset instances.")
62 return flattened
64 raise TypeError("tools must be list[Union[Tool, Toolset]], Toolset, or None")