Skip to main content

Tools Module

The tools module provides a comprehensive system for creating and using tools with agents. It includes built-in tools, a decorator for creating custom tools, and a plugin system for extensibility.

Installation

pip install praisonaiagents

# For full tools support
pip install "praisonai[tools]"

Quick Start

Using the @tool Decorator

from praisonaiagents import Agent, tool

@tool
def search_web(query: str) -> str:
    """Search the web for information."""
    return f"Results for: {query}"

agent = Agent(
    name="Researcher",
    tools=[search_web]
)

Using Built-in Tools

from praisonaiagents import Agent
from praisonaiagents import duckduckgo, wikipedia_tools

agent = Agent(
    name="Researcher",
    tools=[duckduckgo, wikipedia_tools]
)

Classes

BaseTool

Abstract base class for creating custom tools.
from praisonaiagents import BaseTool

class MyTool(BaseTool):
    name = "my_tool"
    description = "Does something useful"
    
    def run(self, query: str) -> str:
        return f"Result for {query}"

Attributes

AttributeTypeDescription
namestrUnique identifier for the tool
descriptionstrHuman-readable description (used by LLM)
versionstrTool version string (default: “1.0.0”)
parametersdictJSON Schema for parameters (auto-generated if not provided)

Methods

MethodDescription
run(**kwargs)Execute the tool (must be implemented)
get_schema()Get OpenAI-compatible function schema
validate()Validate tool configuration

FunctionTool

A BaseTool wrapper for plain functions, created automatically by the @tool decorator.
from praisonaiagents import FunctionTool

tool_instance = FunctionTool(
    func=my_function,
    name="custom_name",
    description="Custom description"
)

ToolResult

Wrapper for tool execution results.
from praisonaiagents import ToolResult

result = ToolResult(
    output="Success data",
    success=True,
    error=None,
    metadata={"execution_time": 0.5}
)

Attributes

AttributeTypeDescription
outputAnyThe tool’s output
successboolWhether execution succeeded
errorstr | NoneError message if failed
metadatadictAdditional metadata

ToolValidationError

Exception raised when a tool fails validation.
from praisonaiagents import ToolValidationError

raise ToolValidationError("Invalid tool configuration")

Decorators

@tool

Convert a function into a tool.
from praisonaiagents import tool

# Simple usage
@tool
def my_func(x: str) -> str:
    """Does something."""
    return x

# With parameters
@tool(name="custom_name", description="Custom description")
def my_func(x: str) -> str:
    return x

Parameters

ParameterTypeDescription
namestrOverride the tool name (default: function name)
descriptionstrOverride description (default: function docstring)
versionstrTool version (default: “1.0.0”)

Built-in Tools

Search Tools

ToolDescriptionAPI Key Required
duckduckgoDuckDuckGo web searchNo
tavily_searchTavily AI searchTAVILY_API_KEY
exa_searchExa semantic searchEXA_API_KEY
ydc_searchYou.com searchYDC_API_KEY
searxng_searchSearXNG searchNo
search_webUnified search (auto-fallback)Varies

Knowledge Tools

ToolDescription
wiki_searchWikipedia search
wiki_summaryWikipedia summaries
search_arxivarXiv paper search
get_arxiv_paperGet arXiv paper details

Web Crawling Tools

ToolDescription
crawl4aiAsync web crawling
scrape_pageScrape web pages
extract_linksExtract links from pages
get_articleExtract article content

File Tools

ToolDescription
read_fileRead file contents
write_fileWrite to files
list_filesList directory contents
read_csvRead CSV files
write_csvWrite CSV files
read_jsonRead JSON files
write_jsonWrite JSON files
read_yamlRead YAML files
read_xmlRead XML files
read_excelRead Excel files

Data Tools

ToolDescription
queryDuckDB SQL queries
filter_dataPandas data filtering
get_summaryData summaries
pivot_tableCreate pivot tables

Calculator Tools

ToolDescription
evaluateEvaluate math expressions
solve_equationSolve equations
convert_unitsUnit conversion
calculate_statisticsStatistical calculations

Shell Tools

ToolDescription
execute_commandExecute shell commands
list_processesList running processes
get_system_infoGet system information

Code Tools

ToolDescription
execute_codeExecute Python code
analyze_codeAnalyze code structure
format_codeFormat Python code
lint_codeLint Python code

Usage Examples

Creating Custom Tools

from praisonaiagents import Agent, BaseTool, tool

# Method 1: Using @tool decorator
@tool
def get_weather(city: str) -> str:
    """Get current weather for a city."""
    return f"Weather in {city}: Sunny, 22°C"

# Method 2: Subclassing BaseTool
class StockPriceTool(BaseTool):
    name = "get_stock_price"
    description = "Get current stock price for a symbol"
    
    def run(self, symbol: str) -> dict:
        return {"symbol": symbol, "price": 150.00}

# Use with agent
agent = Agent(
    name="Assistant",
    tools=[get_weather, StockPriceTool()]
)

Using Multiple Built-in Tools

from praisonaiagents import Agent
from praisonaiagents import (
    duckduckgo,
    wiki_search,
    read_file,
    execute_command
)

agent = Agent(
    name="Research Assistant",
    tools=[duckduckgo, wiki_search, read_file, execute_command]
)

Tool Registry

from praisonaiagents import get_registry, register_tool, get_tool

# Get the global registry
registry = get_registry()

# Register a tool
@tool
def my_tool(x: str) -> str:
    return x

register_tool(my_tool)

# Retrieve a tool
tool = get_tool("my_tool")

Tool Validation

from praisonaiagents import BaseTool, validate_tool, ToolValidationError

class MyTool(BaseTool):
    name = "my_tool"
    description = "My custom tool"
    
    def run(self, query: str) -> str:
        return query

# Validate the tool
try:
    validate_tool(MyTool())
    print("Tool is valid!")
except ToolValidationError as e:
    print(f"Validation failed: {e}")
  • Agent - Using tools with agents
  • Task - Task configuration