• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

deepset-ai / haystack / 18647136217

20 Oct 2025 08:52AM UTC coverage: 92.179% (-0.04%) from 92.22%
18647136217

Pull #9856

github

web-flow
Merge dc9eda57a into 1de94413c
Pull Request #9856: Add Tools warm_up

13425 of 14564 relevant lines covered (92.18%)

0.92 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.55
haystack/tools/utils.py
1
# SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
2
#
3
# SPDX-License-Identifier: Apache-2.0
4

5
from typing import TYPE_CHECKING, Optional
1✔
6

7
from haystack.tools.tool import Tool
1✔
8
from haystack.tools.toolset import Toolset
1✔
9

10
if TYPE_CHECKING:
11
    from haystack.tools import ToolsType
12

13

14
def warm_up_tools(tools: "Optional[ToolsType]" = None) -> None:
1✔
15
    """
16
    Warm up tools from various formats (Tools, Toolsets, or mixed lists).
17

18
    :param tools: A list of Tool and/or Toolset objects, a single Toolset, or None.
19
    """
20
    if tools is None:
1✔
21
        return
×
22

23
    # If tools is a single Toolset, warm up the toolset itself
24
    if isinstance(tools, Toolset):
1✔
25
        if hasattr(tools, "warm_up"):
1✔
26
            tools.warm_up()
1✔
27
        return
1✔
28

29
    # If tools is a list, warm up each item (Tool or Toolset)
30
    if isinstance(tools, list):
1✔
31
        for item in tools:
1✔
32
            if isinstance(item, (Toolset, Tool)) and hasattr(item, "warm_up"):
1✔
33
                item.warm_up()
1✔
34

35

36
def flatten_tools_or_toolsets(tools: "Optional[ToolsType]") -> list[Tool]:
1✔
37
    """
38
    Flatten tools from various formats into a list of Tool instances.
39

40
    :param tools: Tools in list[Union[Tool, Toolset]], Toolset, or None format.
41
    :returns: A flat list of Tool instances.
42
    """
43
    if tools is None:
1✔
44
        return []
1✔
45

46
    if isinstance(tools, Toolset):
1✔
47
        return list(tools)
1✔
48

49
    if isinstance(tools, list):
1✔
50
        flattened: list[Tool] = []
1✔
51
        for item in tools:
1✔
52
            if isinstance(item, Toolset):
1✔
53
                flattened.extend(list(item))
1✔
54
            elif isinstance(item, Tool):
1✔
55
                flattened.append(item)
1✔
56
            else:
57
                raise TypeError("Items in the tools list must be Tool or Toolset instances.")
1✔
58
        return flattened
1✔
59

60
    raise TypeError("tools must be list[Union[Tool, Toolset]], Toolset, or None")
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc