Skip to content

tool_discovery

Class info

🛈 DocStrings

Functions to discover available tools.

get_tools

get_tools(
    source: ToolSource, include_descriptions: bool = False
) -> dict[str, str | None]

Get available tools from specified source.

Parameters:

Name Type Description Default
source ToolSource

Which tool source to query

required
include_descriptions bool

Whether to include tool descriptions

False

Returns:

Type Description
dict[str, str | None]

Dict mapping tool names to descriptions (or None if descriptions disabled)

Source code in src/llmling_agent/tools/tool_discovery.py
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
def get_tools(
    source: ToolSource,
    include_descriptions: bool = False,
) -> dict[str, str | None]:
    """Get available tools from specified source.

    Args:
        source: Which tool source to query
        include_descriptions: Whether to include tool descriptions

    Returns:
        Dict mapping tool names to descriptions (or None if descriptions disabled)
    """
    tools = {}

    match source:
        case "crewai":
            import crewai_tools as module  # pyright: ignore

            # Look for all classes in single module
            for _, cls in getmembers(module, isclass):
                if hasattr(cls, "model_fields"):
                    fields = cls.model_fields
                    if "name" in fields and "description" in fields:
                        name = fields["name"].default
                        description = fields["description"].default
                        if name:
                            tools[name] = description

        case "langchain":
            # Need to import each tool module separately
            from langchain_community.tools import _module_lookup  # pyright: ignore

            for cls_name, module_path in _module_lookup.items():
                try:
                    module = importlib.import_module(module_path)
                    cls = getattr(module, cls_name)
                    if hasattr(cls, "model_fields"):
                        fields = cls.model_fields
                        if "name" in fields and "description" in fields:
                            name = fields["name"].default
                            description = fields["description"].default
                            if name:
                                tools[name] = description
                except (ImportError, AttributeError):
                    # Skip tools we can't import or that don't match our pattern
                    continue

    return tools