Metadata-Version: 2.4
Name: ai-parrot-tools
Version: 0.1.43
Summary: Tools and toolkits for AI-Parrot agents
Author-email: Jesus Lara <jesuslara@phenobarbital.info>
License-Expression: MIT
Project-URL: Homepage, https://github.com/phenobarbital/ai-parrot
Project-URL: Repository, https://github.com/phenobarbital/ai-parrot
Project-URL: Documentation, https://github.com/phenobarbital/ai-parrot/
Keywords: ai,agents,tools,toolkits,chatbot,asyncio
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: POSIX :: Linux
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Framework :: AsyncIO
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: ai-parrot>=0.24.45
Provides-Extra: pdf
Requires-Dist: weasyprint==68.0; extra == "pdf"
Requires-Dist: fpdf==1.7.2; extra == "pdf"
Requires-Dist: markdown>=3.5; extra == "pdf"
Requires-Dist: markdownify>=1.2.2; extra == "pdf"
Requires-Dist: python-docx==1.1.2; extra == "pdf"
Provides-Extra: msword
Requires-Dist: python-docx==1.1.2; extra == "msword"
Requires-Dist: mammoth>=1.8; extra == "msword"
Requires-Dist: markdown>=3.5; extra == "msword"
Requires-Dist: markdownify>=1.2.2; extra == "msword"
Requires-Dist: beautifulsoup4>=4.12; extra == "msword"
Requires-Dist: jinja2>=3.1; extra == "msword"
Provides-Extra: jira
Requires-Dist: jira>=3.10; extra == "jira"
Provides-Extra: slack
Requires-Dist: slack-sdk>=3.0; extra == "slack"
Provides-Extra: aws
Requires-Dist: boto3>=1.28; extra == "aws"
Provides-Extra: docker
Requires-Dist: docker>=7.1; extra == "docker"
Provides-Extra: git
Requires-Dist: gitpython>=3.1; extra == "git"
Provides-Extra: analysis
Requires-Dist: pandas>=2.0; extra == "analysis"
Requires-Dist: numpy>=1.26; extra == "analysis"
Requires-Dist: autoviz>=0.1; extra == "analysis"
Provides-Extra: excel
Requires-Dist: openpyxl>=3.1; extra == "excel"
Requires-Dist: odfpy>=1.4; extra == "excel"
Provides-Extra: sandbox
Requires-Dist: docker>=7.1; extra == "sandbox"
Provides-Extra: codeinterpreter
Requires-Dist: docker>=7.1; extra == "codeinterpreter"
Provides-Extra: pulumi
Requires-Dist: pulumi>=3.0; extra == "pulumi"
Provides-Extra: sitesearch
Requires-Dist: beautifulsoup4>=4.12; extra == "sitesearch"
Requires-Dist: html2text>=2024.0; extra == "sitesearch"
Requires-Dist: markitdown>=0.1.2; extra == "sitesearch"
Provides-Extra: office365
Requires-Dist: msgraph-sdk>=1.8; extra == "office365"
Requires-Dist: azure-identity>=1.18; extra == "office365"
Requires-Dist: microsoft-kiota-authentication-azure>=1.2; extra == "office365"
Provides-Extra: scraping
Requires-Dist: selenium>=4.35; extra == "scraping"
Requires-Dist: undetected-chromedriver>=3.5; extra == "scraping"
Requires-Dist: webdriver-manager>=4.0; extra == "scraping"
Provides-Extra: finance
Requires-Dist: ta-lib>=0.4.32; extra == "finance"
Requires-Dist: pandas-datareader>=0.10.0; extra == "finance"
Requires-Dist: yfinance>=0.2.54; extra == "finance"
Requires-Dist: alpaca-py>=0.43; extra == "finance"
Provides-Extra: db
Requires-Dist: querysource>=4.1.11; extra == "db"
Requires-Dist: psycopg-binary>=3.2; extra == "db"
Provides-Extra: flowtask
Requires-Dist: flowtask>=5.10.2; extra == "flowtask"
Provides-Extra: google
Requires-Dist: aiogoogle>=5.17; extra == "google"
Requires-Dist: google-api-python-client>=2.151; extra == "google"
Provides-Extra: arxiv
Requires-Dist: arxiv>=2.2; extra == "arxiv"
Provides-Extra: wikipedia
Requires-Dist: wikipedia>=1.4; extra == "wikipedia"
Requires-Dist: mediawikiapi>=1.2; extra == "wikipedia"
Provides-Extra: weather
Requires-Dist: pyowm>=3.3; extra == "weather"
Provides-Extra: messaging
Requires-Dist: gmqtt>=0.6; extra == "messaging"
Requires-Dist: aioimaplib>=1.1; extra == "messaging"
Provides-Extra: security
Provides-Extra: all
Requires-Dist: ai-parrot-tools[analysis,arxiv,aws,codeinterpreter,db,docker,excel,finance,flowtask,git,google,jira,messaging,msword,office365,pdf,pulumi,sandbox,scraping,security,sitesearch,slack,weather,wikipedia]; extra == "all"

# AI-Parrot Tools

**ai-parrot-tools** is a collection of tools and toolkits for [AI-Parrot](https://pypi.org/project/ai-parrot/) agents. Each tool wraps an external API or service behind a unified interface that agents can discover and invoke automatically.

## Installation

```bash
pip install ai-parrot-tools
```

Install only the extras you need:

```bash
# Individual extras
pip install ai-parrot-tools[aws]
pip install ai-parrot-tools[slack]
pip install ai-parrot-tools[jira]
pip install ai-parrot-tools[google]
pip install ai-parrot-tools[finance]
pip install ai-parrot-tools[db]

# Everything
pip install ai-parrot-tools[all]
```

## Available Extras

| Extra | Description |
|-------|-------------|
| `jira` | Jira issue tracking |
| `slack` | Slack messaging |
| `aws` | AWS services (EC2, S3, RDS, Lambda, ECS, IAM, etc.) |
| `docker` | Docker container management |
| `git` | Git repository operations |
| `analysis` | Data analysis with pandas, numpy, autoviz |
| `excel` | Excel and ODF spreadsheet support |
| `sandbox` | Sandboxed code execution via Docker |
| `codeinterpreter` | Interactive code interpreter |
| `pulumi` | Pulumi infrastructure-as-code |
| `sitesearch` | Website crawling and search |
| `office365` | Microsoft 365 / Graph API integration |
| `scraping` | Web scraping with Selenium |
| `finance` | Financial analysis (TA-Lib, yfinance, Alpaca) |
| `db` | Database querying via QuerySource |
| `flowtask` | FlowTask workflow integration |
| `google` | Google APIs (Search, Maps, Routes) |
| `arxiv` | arXiv paper search |
| `wikipedia` | Wikipedia lookups |
| `weather` | OpenWeatherMap |
| `messaging` | MQTT and IMAP messaging |

## Quick Start

```python
from parrot.bots import Agent

agent = Agent(
    name="assistant",
    instructions="You are a helpful assistant.",
    tools=["google_search", "weather", "calculator"],
)

response = await agent.chat("What's the weather in New York?")
```

Tools are registered by name. Pass a list of tool names to any AI-Parrot agent and they are loaded on demand.

## Creating Custom Tools

Use the `@tool` decorator for simple functions:

```python
from parrot.tools import tool

@tool
def get_stock_price(symbol: str) -> str:
    """Get the current stock price for a ticker symbol."""
    ...
```

Use `AbstractToolkit` for multi-tool collections:

```python
from parrot.tools import AbstractToolkit

class MyToolkit(AbstractToolkit):
    name = "my_toolkit"
    description = "A collection of related tools."

    def get_tools(self):
        ...
```

## Requirements

- Python >= 3.11
- [ai-parrot](https://pypi.org/project/ai-parrot/) >= 0.23.18

## License

MIT
