tyr-agent


Nametyr-agent JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryBiblioteca para criação de agentes LLM com suporte a Gemini e GPT, histórico persistente, execução de funções e roteamento entre múltiplos agentes.
upload_time2025-07-21 00:39:15
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords llm agent gemini openai function-calling multi-agent memory orchestration
VCS
bugtrack_url
requirements google-genai openai python-dotenv
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🤖 Tyr Agent

[![PyPI version](https://badge.fury.io/py/tyr-agent.svg)](https://pypi.org/project/tyr-agent/)
[![Python version](https://img.shields.io/badge/python-3.9%2B-blue)](https://www.python.org/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)

TyrAgent é uma biblioteca para criação de agentes inteligentes com histórico, function-calling, suporte a arquivos e orquestração de múltiplos agentes. Compatível com os modelos **Gemini** (Google) e **GPT** (OpenAI), com integração nativa para ambos.

- 💬 Conversas com ou sem `streaming`
- 🧠 `Memória` persistente de interações (por agente), com controle total de uso e armazenamento
- 📊 Sistema de `score` por interação para qualificar e filtrar o histórico
- ⚙️ Execução de funções Python com suporte a `function calling`
- 🧑🏻‍💼 `Orquestração` de múltiplos agentes com roteamento automático de mensagens
- 🖼️ Suporte a múltiplos tipos de `arquivo`
- 🧩 Estrutura modular e extensível

---

## 📦 Instalação via PyPI

```bash
pip install tyr-agent
```

> 🔐 É necessário definir as variáveis de ambiente:
> - `GEMINI_KEY` para uso com modelos Gemini
> - `OPENAI_API_KEY` para uso com modelos GPT (OpenAI)

---

## 💡 Exemplos de uso

### 📘 SimpleAgent

```python
from tyr_agent import SimpleAgent, GeminiModel, GPTModel
import asyncio

agent = SimpleAgent(
    prompt_build="Você é um agente especializado em ações brasileiras.",
    agent_name="FinanceAgent",
    model=GeminiModel("gemini-2.5-flash"),  # ou GPTModel("modelo_desejado")
    use_storage=True,
    use_history=True,
    use_score=True,
)

response = asyncio.run(agent.chat("Me fale sobre a WEGE3.", save_history=True))
print(response)
```

### ⚙️ ComplexAgent com funções

```python
from tyr_agent import ComplexAgent, GeminiModel, GPTModel
from typing import List
import asyncio

def somar(nums: List[float]) -> float: return sum(nums)
def subtrair(nums: List[float]) -> float: return nums[0] - sum(nums[1:])

agent = ComplexAgent(
    prompt_build="Você faz cálculos precisos com base nas funções disponíveis.",
    agent_name="MathAgent",
    model=GeminiModel("gemini-2.5-flash"),  # ou GPTModel("modelo_desejado")
    functions=[somar, subtrair],
    use_storage=True,
    use_history=True,
    use_score=True,
)

response = asyncio.run(agent.chat("Quanto é 14+18+24 e 18-6-2?", save_history=True))
print(response)
```

### 🧑🏻‍💼 ManagerAgent (Orquestrador)

```python
from tyr_agent import SimpleAgent, ComplexAgent, ManagerAgent, GPTModel, GeminiModel
import asyncio

def get_clima(cidade: str) -> str: return f"O clima na cidade {cidade} é de 25ºC e esta ensolarado."

finance_agent = SimpleAgent(
    prompt_build="Você é um agente especializado em ações brasileiras.",
    agent_name="FinanceAgent",
    model=GeminiModel("gemini-2.5-flash"),  # ou GPTModel("modelo_desejado")
    use_storage=True,
    use_history=True,
    use_score=True,
)

weather_agent = ComplexAgent(
    prompt_build="Você é um agente do clima.",
    agent_name="WeatherAgent",
    model=GPTModel("gpt-4o"),  # ou GeminiModel("modelo_desejado")
    functions=[get_clima],
)

manager = ManagerAgent(
    agent_name="Manager",
    model=GPTModel("quality"),
    agents=[finance_agent, weather_agent],
    use_history=True
)

response = asyncio.run(manager.chat("Quanto é 10+10? E o clima no Rio?", save_history=True))
print(response)
```

### 📎 Envio de arquivos

```python
from tyr_agent import SimpleAgent, GeminiModel, GPTModel
import asyncio

agent = SimpleAgent(
    prompt_build="Você é um agente especializado em leitura de documentos.",
    agent_name="FileAgent",
    model=GeminiModel("gemini-2.5-flash"),  # ou GPTModel("modelo_desejado")
    use_storage=True,
    use_history=True,
    use_score=True,
)

files_info = [
    {
        "file": "D:\\caminho\\para\\meu_arquivo1.png",  # Pode ser um path, base64 ou BytesIO
        "file_name": "Documento1.png"
    },
    {
        "file": "D:\\caminho\\para\\meu_arquivo2.png",  # Pode ser um path, base64 ou BytesIO
        "file_name": "Documento2.png"
    },
]

response = asyncio.run(agent.chat("Sobre o que é esses documentos?", save_history=True, files=files_info))
print(response)
```

---

## 🔧 Modelos disponíveis

- `GeminiModel(model_name: str, temperature=0.4, max_tokens=600)`
- `GPTModel(model_name: str, temperature=0.4, max_tokens=600)`
- `GPTModel("economy")` → usa `gpt-3.5-turbo`
- `GPTModel("quality")` → usa `gpt-4o`
- Ambos assumem as chaves das variáveis `GEMINI_KEY` ou `OPENAI_API_KEY` automaticamente.

---

## 🧠 Principais recursos

- `SimpleAgent`: Respostas simples com ou sem histórico
- `ComplexAgent`: Permite execução de funções e resposta final combinada
- `ManagerAgent`: Gerencia e delega perguntas entre múltiplos agentes
- Suporte completo a arquivos (path, base64, BytesIO)
- Sistema de notas (score 0 a 5) para filtrar interações úteis
- Histórico persistente e controlável por agente

---

## 📄 Licença

Este repositório está licenciado sob os termos da MIT License.

---

## 📬 Contato

Criado por **Witor Oliveira**  
🔗 [LinkedIn](https://www.linkedin.com/in/witoroliveira/)  
📫 [Contato por e-mail](mailto:witoredson@gmail.com)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tyr-agent",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "llm, agent, gemini, openai, function-calling, multi-agent, memory, orchestration",
    "author": null,
    "author_email": "Witor Oliveira <witoredson@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/a7/ea/4d5b19f142be6d256d6fc6734bd788bfbdf8e74d690d3e9080372a9b72d1/tyr_agent-1.0.0.tar.gz",
    "platform": null,
    "description": "# \ud83e\udd16 Tyr Agent\r\n\r\n[![PyPI version](https://badge.fury.io/py/tyr-agent.svg)](https://pypi.org/project/tyr-agent/)\r\n[![Python version](https://img.shields.io/badge/python-3.9%2B-blue)](https://www.python.org/)\r\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\r\n\r\nTyrAgent \u00e9 uma biblioteca para cria\u00e7\u00e3o de agentes inteligentes com hist\u00f3rico, function-calling, suporte a arquivos e orquestra\u00e7\u00e3o de m\u00faltiplos agentes. Compat\u00edvel com os modelos **Gemini** (Google) e **GPT** (OpenAI), com integra\u00e7\u00e3o nativa para ambos.\r\n\r\n- \ud83d\udcac Conversas com ou sem `streaming`\r\n- \ud83e\udde0 `Mem\u00f3ria` persistente de intera\u00e7\u00f5es (por agente), com controle total de uso e armazenamento\r\n- \ud83d\udcca Sistema de `score` por intera\u00e7\u00e3o para qualificar e filtrar o hist\u00f3rico\r\n- \u2699\ufe0f Execu\u00e7\u00e3o de fun\u00e7\u00f5es Python com suporte a `function calling`\r\n- \ud83e\uddd1\ud83c\udffb\u200d\ud83d\udcbc `Orquestra\u00e7\u00e3o` de m\u00faltiplos agentes com roteamento autom\u00e1tico de mensagens\r\n- \ud83d\uddbc\ufe0f Suporte a m\u00faltiplos tipos de `arquivo`\r\n- \ud83e\udde9 Estrutura modular e extens\u00edvel\r\n\r\n---\r\n\r\n## \ud83d\udce6 Instala\u00e7\u00e3o via PyPI\r\n\r\n```bash\r\npip install tyr-agent\r\n```\r\n\r\n> \ud83d\udd10 \u00c9 necess\u00e1rio definir as vari\u00e1veis de ambiente:\r\n> - `GEMINI_KEY` para uso com modelos Gemini\r\n> - `OPENAI_API_KEY` para uso com modelos GPT (OpenAI)\r\n\r\n---\r\n\r\n## \ud83d\udca1 Exemplos de uso\r\n\r\n### \ud83d\udcd8 SimpleAgent\r\n\r\n```python\r\nfrom tyr_agent import SimpleAgent, GeminiModel, GPTModel\r\nimport asyncio\r\n\r\nagent = SimpleAgent(\r\n    prompt_build=\"Voc\u00ea \u00e9 um agente especializado em a\u00e7\u00f5es brasileiras.\",\r\n    agent_name=\"FinanceAgent\",\r\n    model=GeminiModel(\"gemini-2.5-flash\"),  # ou GPTModel(\"modelo_desejado\")\r\n    use_storage=True,\r\n    use_history=True,\r\n    use_score=True,\r\n)\r\n\r\nresponse = asyncio.run(agent.chat(\"Me fale sobre a WEGE3.\", save_history=True))\r\nprint(response)\r\n```\r\n\r\n### \u2699\ufe0f ComplexAgent com fun\u00e7\u00f5es\r\n\r\n```python\r\nfrom tyr_agent import ComplexAgent, GeminiModel, GPTModel\r\nfrom typing import List\r\nimport asyncio\r\n\r\ndef somar(nums: List[float]) -> float: return sum(nums)\r\ndef subtrair(nums: List[float]) -> float: return nums[0] - sum(nums[1:])\r\n\r\nagent = ComplexAgent(\r\n    prompt_build=\"Voc\u00ea faz c\u00e1lculos precisos com base nas fun\u00e7\u00f5es dispon\u00edveis.\",\r\n    agent_name=\"MathAgent\",\r\n    model=GeminiModel(\"gemini-2.5-flash\"),  # ou GPTModel(\"modelo_desejado\")\r\n    functions=[somar, subtrair],\r\n    use_storage=True,\r\n    use_history=True,\r\n    use_score=True,\r\n)\r\n\r\nresponse = asyncio.run(agent.chat(\"Quanto \u00e9 14+18+24 e 18-6-2?\", save_history=True))\r\nprint(response)\r\n```\r\n\r\n### \ud83e\uddd1\ud83c\udffb\u200d\ud83d\udcbc ManagerAgent (Orquestrador)\r\n\r\n```python\r\nfrom tyr_agent import SimpleAgent, ComplexAgent, ManagerAgent, GPTModel, GeminiModel\r\nimport asyncio\r\n\r\ndef get_clima(cidade: str) -> str: return f\"O clima na cidade {cidade} \u00e9 de 25\u00baC e esta ensolarado.\"\r\n\r\nfinance_agent = SimpleAgent(\r\n    prompt_build=\"Voc\u00ea \u00e9 um agente especializado em a\u00e7\u00f5es brasileiras.\",\r\n    agent_name=\"FinanceAgent\",\r\n    model=GeminiModel(\"gemini-2.5-flash\"),  # ou GPTModel(\"modelo_desejado\")\r\n    use_storage=True,\r\n    use_history=True,\r\n    use_score=True,\r\n)\r\n\r\nweather_agent = ComplexAgent(\r\n    prompt_build=\"Voc\u00ea \u00e9 um agente do clima.\",\r\n    agent_name=\"WeatherAgent\",\r\n    model=GPTModel(\"gpt-4o\"),  # ou GeminiModel(\"modelo_desejado\")\r\n    functions=[get_clima],\r\n)\r\n\r\nmanager = ManagerAgent(\r\n    agent_name=\"Manager\",\r\n    model=GPTModel(\"quality\"),\r\n    agents=[finance_agent, weather_agent],\r\n    use_history=True\r\n)\r\n\r\nresponse = asyncio.run(manager.chat(\"Quanto \u00e9 10+10? E o clima no Rio?\", save_history=True))\r\nprint(response)\r\n```\r\n\r\n### \ud83d\udcce Envio de arquivos\r\n\r\n```python\r\nfrom tyr_agent import SimpleAgent, GeminiModel, GPTModel\r\nimport asyncio\r\n\r\nagent = SimpleAgent(\r\n    prompt_build=\"Voc\u00ea \u00e9 um agente especializado em leitura de documentos.\",\r\n    agent_name=\"FileAgent\",\r\n    model=GeminiModel(\"gemini-2.5-flash\"),  # ou GPTModel(\"modelo_desejado\")\r\n    use_storage=True,\r\n    use_history=True,\r\n    use_score=True,\r\n)\r\n\r\nfiles_info = [\r\n    {\r\n        \"file\": \"D:\\\\caminho\\\\para\\\\meu_arquivo1.png\",  # Pode ser um path, base64 ou BytesIO\r\n        \"file_name\": \"Documento1.png\"\r\n    },\r\n    {\r\n        \"file\": \"D:\\\\caminho\\\\para\\\\meu_arquivo2.png\",  # Pode ser um path, base64 ou BytesIO\r\n        \"file_name\": \"Documento2.png\"\r\n    },\r\n]\r\n\r\nresponse = asyncio.run(agent.chat(\"Sobre o que \u00e9 esses documentos?\", save_history=True, files=files_info))\r\nprint(response)\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udd27 Modelos dispon\u00edveis\r\n\r\n- `GeminiModel(model_name: str, temperature=0.4, max_tokens=600)`\r\n- `GPTModel(model_name: str, temperature=0.4, max_tokens=600)`\r\n- `GPTModel(\"economy\")` \u2192 usa `gpt-3.5-turbo`\r\n- `GPTModel(\"quality\")` \u2192 usa `gpt-4o`\r\n- Ambos assumem as chaves das vari\u00e1veis `GEMINI_KEY` ou `OPENAI_API_KEY` automaticamente.\r\n\r\n---\r\n\r\n## \ud83e\udde0 Principais recursos\r\n\r\n- `SimpleAgent`: Respostas simples com ou sem hist\u00f3rico\r\n- `ComplexAgent`: Permite execu\u00e7\u00e3o de fun\u00e7\u00f5es e resposta final combinada\r\n- `ManagerAgent`: Gerencia e delega perguntas entre m\u00faltiplos agentes\r\n- Suporte completo a arquivos (path, base64, BytesIO)\r\n- Sistema de notas (score 0 a 5) para filtrar intera\u00e7\u00f5es \u00fateis\r\n- Hist\u00f3rico persistente e control\u00e1vel por agente\r\n\r\n---\r\n\r\n## \ud83d\udcc4 Licen\u00e7a\r\n\r\nEste reposit\u00f3rio est\u00e1 licenciado sob os termos da MIT License.\r\n\r\n---\r\n\r\n## \ud83d\udcec Contato\r\n\r\nCriado por **Witor Oliveira**  \r\n\ud83d\udd17 [LinkedIn](https://www.linkedin.com/in/witoroliveira/)  \r\n\ud83d\udceb [Contato por e-mail](mailto:witoredson@gmail.com)\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Biblioteca para cria\u00e7\u00e3o de agentes LLM com suporte a Gemini e GPT, hist\u00f3rico persistente, execu\u00e7\u00e3o de fun\u00e7\u00f5es e roteamento entre m\u00faltiplos agentes.",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/Drarlian/tyr-agent",
        "Issues": "https://github.com/Drarlian/tyr-agent/issues",
        "Source": "https://github.com/Drarlian/tyr-agent"
    },
    "split_keywords": [
        "llm",
        " agent",
        " gemini",
        " openai",
        " function-calling",
        " multi-agent",
        " memory",
        " orchestration"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9bf13f8742cd41d37f69ccd16f661fd2580a5ecb74ac2bb85e4def26e0e6bd58",
                "md5": "ea9a1662035ea579d389ecb4e1ee78e1",
                "sha256": "cad33fc0129272c10b687b43393c68fe5384f2fd48e3776cde8f4cdaf533aa02"
            },
            "downloads": -1,
            "filename": "tyr_agent-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ea9a1662035ea579d389ecb4e1ee78e1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 20938,
            "upload_time": "2025-07-21T00:39:13",
            "upload_time_iso_8601": "2025-07-21T00:39:13.820592Z",
            "url": "https://files.pythonhosted.org/packages/9b/f1/3f8742cd41d37f69ccd16f661fd2580a5ecb74ac2bb85e4def26e0e6bd58/tyr_agent-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a7ea4d5b19f142be6d256d6fc6734bd788bfbdf8e74d690d3e9080372a9b72d1",
                "md5": "4e2fb148f3b6d42bca38e13343e728b9",
                "sha256": "a1d2ad4852ca4e1b4b8dbf1825cc20c71cbfeb3496e5c6224f6e1db7bb78304f"
            },
            "downloads": -1,
            "filename": "tyr_agent-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "4e2fb148f3b6d42bca38e13343e728b9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 18465,
            "upload_time": "2025-07-21T00:39:15",
            "upload_time_iso_8601": "2025-07-21T00:39:15.017271Z",
            "url": "https://files.pythonhosted.org/packages/a7/ea/4d5b19f142be6d256d6fc6734bd788bfbdf8e74d690d3e9080372a9b72d1/tyr_agent-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-21 00:39:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Drarlian",
    "github_project": "tyr-agent",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "google-genai",
            "specs": [
                [
                    "~=",
                    "1.20.0"
                ]
            ]
        },
        {
            "name": "openai",
            "specs": [
                [
                    "~=",
                    "1.84.0"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    "==",
                    "1.1.0"
                ]
            ]
        }
    ],
    "lcname": "tyr-agent"
}
        
Elapsed time: 1.60857s