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

1# SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai> 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4 

5from typing import TYPE_CHECKING 

6 

7from haystack.tools.tool import Tool 

8from haystack.tools.toolset import Toolset 

9 

10if TYPE_CHECKING: 

11 from haystack.tools import ToolsType 

12 

13 

14def warm_up_tools(tools: "ToolsType | None" = None) -> None: 

15 """ 

16 Warm up tools from various formats (Tools, Toolsets, or mixed lists). 

17 

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). 

21 

22 :param tools: A list of Tool and/or Toolset objects, a single Toolset, or None. 

23 """ 

24 if tools is None: 

25 return 

26 

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 

32 

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() 

38 

39 

40def flatten_tools_or_toolsets(tools: "ToolsType | None") -> list[Tool]: 

41 """ 

42 Flatten tools from various formats into a list of Tool instances. 

43 

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 [] 

49 

50 if isinstance(tools, Toolset): 

51 return list(tools) 

52 

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 

63 

64 raise TypeError("tools must be list[Union[Tool, Toolset]], Toolset, or None")