def METHOD_NAME(self, name: str) -> Optional[Dict]:
    """Get the signature of a tool."""
    base_classes = ["Tool", "BaseTool"]
    fields = []
    params = []
    tool_params = {}
    # Raise error if name is not in tools
    if name not in self.type_to_loader_dict.keys():
        raise ValueError("Tool not found")
    tool_type: str = self.type_to_loader_dict[name]["type"]  # type: ignore
    # if tool_type in _BASE_TOOLS.keys():
    #     params = []
    if tool_type in _LLM_TOOLS.keys():
        params = ["llm"]
    elif tool_type in _EXTRA_LLM_TOOLS.keys():
        extra_keys = _EXTRA_LLM_TOOLS[tool_type][1]
        params = ["llm"] + extra_keys
    elif tool_type in _EXTRA_OPTIONAL_TOOLS.keys():
        extra_keys = _EXTRA_OPTIONAL_TOOLS[tool_type][1]
        params = extra_keys
    # elif tool_type == "Tool":
    #     params = ["name", "description", "func"]
    elif tool_type in CUSTOM_TOOLS:
        # Get custom tool params
        params = self.type_to_loader_dict[name]["params"]  # type: ignore
        base_classes = ["function"]
        if node := customs.get_custom_nodes("tools").get(tool_type):
            return node
    elif tool_type in FILE_TOOLS:
        params = self.type_to_loader_dict[name]["params"]  # type: ignore
        base_classes += [name]
    elif tool_type in OTHER_TOOLS:
        tool_dict = build_template_from_class(tool_type, OTHER_TOOLS)
        fields = tool_dict["template"]
        # Pop unnecessary fields and add name
        fields.pop("_type")  # type: ignore
        fields.pop("return_direct")  # type: ignore
        fields.pop("verbose")  # type: ignore
        tool_params = {
            "name": fields.pop("name")["value"],  # type: ignore
            "description": fields.pop("description")["value"],  # type: ignore
        }
        fields = [
            TemplateField(name=name, field_type=field["type"], **field)
            for name, field in fields.items()  # type: ignore
        ]
        base_classes += tool_dict["base_classes"]
    # Copy the field and add the name
    for param in params:
        field = TOOL_INPUTS.get(param, TOOL_INPUTS["str"]).copy()
        field.name = param
        field.advanced = False
        if param == "aiosession":
            field.show = False
            field.required = False
        fields.append(field)
    template = Template(fields=fields, type_name=tool_type)
    tool_params = {**tool_params, **self.type_to_loader_dict[name]["params"]}
    return {
        "template": util.format_dict(template.to_dict()),
        **tool_params,
        "base_classes": base_classes,
    }