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

deepset-ai / haystack / 14267251262

04 Apr 2025 02:09PM UTC coverage: 90.114% (+0.02%) from 90.096%
14267251262

push

github

web-flow
feat: Add Toolset to tooling architecture  (#9161)

* Add Toolset abstraction

* Add reno note

* More pydoc improvements

* Update test

* Simplify, Toolset is a dataclass

* Wrap toolset instance with list

* Add example

* Toolset pydoc serde enhancement

* Toolset as init param

* Fix types

* Linting

* Minor updates

* PR feedback

* Add to pydoc config, minor import fixes

* Improve pydoc example

* Improve coverage for test_toolset.py

* Improve test_toolset.py, test custom toolset serde properly

* Update haystack/utils/misc.py

Co-authored-by: Stefano Fiorucci <stefanofiorucci@gmail.com>

* Rework Toolset pydoc

* Another minor pydoc improvement

* Prevent single Tool instantiating Toolset

* Reduce number of integration tests

* Remove some toolset tests from openai

* Rework tests

---------

Co-authored-by: Stefano Fiorucci <stefanofiorucci@gmail.com>

10637 of 11804 relevant lines covered (90.11%)

0.9 hits per line

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

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

5
from typing import Any, Dict, List, Union
1✔
6

7
from numpy import exp
1✔
8

9
from haystack.tools import Tool, Toolset
1✔
10

11

12
def expand_page_range(page_range: List[Union[str, int]]) -> List[int]:
1✔
13
    """
14
    Takes a list of page numbers and ranges and expands them into a list of page numbers.
15

16
    For example, given a page_range=['1-3', '5', '8', '10-12'] the function will return [1, 2, 3, 5, 8, 10, 11, 12]
17

18
    :param page_range: List of page numbers and ranges
19
    :returns:
20
        An expanded list of page integers
21

22
    """
23
    expanded_page_range = []
1✔
24

25
    for page in page_range:
1✔
26
        if isinstance(page, int):
1✔
27
            # check if it's a range wrongly passed as an integer expression
28
            if "-" in str(page):
×
29
                msg = "range must be a string in the format 'start-end'"
×
30
                raise ValueError(f"Invalid page range: {page} - {msg}")
×
31
            expanded_page_range.append(page)
×
32

33
        elif isinstance(page, str) and page.isdigit():
1✔
34
            expanded_page_range.append(int(page))
×
35

36
        elif isinstance(page, str) and "-" in page:
1✔
37
            start, end = page.split("-")
1✔
38
            expanded_page_range.extend(range(int(start), int(end) + 1))
1✔
39

40
        else:
41
            msg = "range must be a string in the format 'start-end' or an integer"
×
42
            raise ValueError(f"Invalid page range: {page} - {msg}")
×
43

44
    if not expanded_page_range:
1✔
45
        raise ValueError("No valid page numbers or ranges found in the input list")
×
46

47
    return expanded_page_range
1✔
48

49

50
def expit(x) -> float:
1✔
51
    """
52
    Compute logistic sigmoid function. Maps input values to a range between 0 and 1
53

54
    :param x: input value. Can be a scalar or a numpy array.
55
    """
56
    return 1 / (1 + exp(-x))
1✔
57

58

59
def serialize_tools_or_toolset(
1✔
60
    tools: Union[Toolset, List[Tool], None],
61
) -> Union[Dict[str, Any], List[Dict[str, Any]], None]:
62
    """
63
    Serialize a Toolset or a list of Tools to a dictionary or a list of tool dictionaries.
64

65
    :param tools: A Toolset, a list of Tools, or None
66
    :returns: A dictionary, a list of tool dictionaries, or None if tools is None
67
    """
68
    if tools is None:
1✔
69
        return None
1✔
70
    if isinstance(tools, Toolset):
1✔
71
        return tools.to_dict()
1✔
72
    return [tool.to_dict() for tool in tools]
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

© 2026 Coveralls, Inc