diff --git a/agentstack/generation/tool_generation.py b/agentstack/generation/tool_generation.py index 52df7c83..c50c48b8 100644 --- a/agentstack/generation/tool_generation.py +++ b/agentstack/generation/tool_generation.py @@ -21,7 +21,7 @@ def add_tool(tool_name: str, path: Optional[str] = None): with importlib.resources.path(f'agentstack.templates.{framework}.tools', f"{tool_name}_tool.py") as tool_file_path: os.system(tool_data['package']) # Install package - shutil.copy(tool_file_path, f'{path + "/" if path else ""}src/tools/{tool_name}.py') # Move tool from package to project + shutil.copy(tool_file_path, f'{path + "/" if path else ""}src/tools/{tool_name}_tool.py') # Move tool from package to project add_tool_to_tools_init(tool_data, path) # Export tool from tools dir add_tool_to_agent_definition(framework, tool_data, path) insert_code_after_tag(f'{path + "/" if path else ""}.env', '# Tools', [tool_data['env']], next_line=True) # Add env var @@ -44,7 +44,7 @@ def add_tool_to_tools_init(tool_data: dict, path: Optional[str] = None): file_path = f'{path + "/" if path else ""}src/tools/__init__.py' tag = '# tool import' code_to_insert = [ - f"from {tool_data['name']}_tool import {', '.join([tool_name for tool_name in tool_data['tools']])}" + f"from .{tool_data['name']}_tool import {', '.join([tool_name for tool_name in tool_data['tools']])}" ] insert_code_after_tag(file_path, tag, code_to_insert, next_line=True) @@ -59,7 +59,7 @@ def add_tool_to_agent_definition(framework: str, tool_data: dict, path: Optional with fileinput.input(files=filename, inplace=True) as f: for line in f: - print(line.replace('tools=[', f'tools=[tools.{", tools.".join([tool_name for tool_name in tool_data["tools"]])}, '), end='') + print(line.replace('tools=[', f'tools=[{"*" if tool_data.get("tools_bundled") else ""}tools.{", tools.".join([tool_name for tool_name in tool_data["tools"]])}, '), end='') def assert_tool_exists(tool_name: str, tools: dict): diff --git a/agentstack/templates/crewai/tools/code_interpreter_tool.py b/agentstack/templates/crewai/tools/code_interpreter_tool.py new file mode 100644 index 00000000..f56f6497 --- /dev/null +++ b/agentstack/templates/crewai/tools/code_interpreter_tool.py @@ -0,0 +1,3 @@ +from crewai_tools import CodeInterpreterTool + +code_interpreter = CodeInterpreterTool() \ No newline at end of file diff --git a/agentstack/templates/crewai/tools/composio_tool.py b/agentstack/templates/crewai/tools/composio_tool.py new file mode 100644 index 00000000..197c7e00 --- /dev/null +++ b/agentstack/templates/crewai/tools/composio_tool.py @@ -0,0 +1,6 @@ +from composio_crewai import ComposioToolSet, App + +composio_tools = ComposioToolSet().get_tools(apps=[App.CODEINTERPRETER]) + +# change App.CODEINTERPRETER to be the app you want to use +# For more info on tool selection, see https://docs.agentstack.sh/tools/tool/composio diff --git a/agentstack/templates/crewai/tools/vision_tool.py b/agentstack/templates/crewai/tools/vision_tool.py new file mode 100644 index 00000000..927ca440 --- /dev/null +++ b/agentstack/templates/crewai/tools/vision_tool.py @@ -0,0 +1,3 @@ +from crewai_tools import VisionTool + +vision_tool = VisionTool() \ No newline at end of file diff --git a/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/pyproject.toml b/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/pyproject.toml index d75c6caa..f436ef4a 100644 --- a/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/pyproject.toml +++ b/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/pyproject.toml @@ -10,6 +10,7 @@ python = ">=3.10,<=3.13" agentops = "^0.3.12" crewai = "^0.63.6" crewai-tools= "0.12.1" +python-dotenv="1.0.1" [project.scripts] {{cookiecutter.project_metadata.project_name}} = "{{cookiecutter.project_metadata.project_name}}.main:run" diff --git a/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/src/main.py b/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/src/main.py index 6dba77f7..76bd059e 100644 --- a/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/src/main.py +++ b/agentstack/templates/crewai/{{cookiecutter.project_metadata.project_slug}}/src/main.py @@ -2,6 +2,8 @@ import sys from crew import {{cookiecutter.project_metadata.project_name|replace('-', '')|replace('_', '')|capitalize}}Crew import agentops +from dotenv import load_dotenv +load_dotenv() agentops.init() diff --git a/agentstack/tools/code_interpreter.json b/agentstack/tools/code_interpreter.json new file mode 100644 index 00000000..26b6f6a6 --- /dev/null +++ b/agentstack/tools/code_interpreter.json @@ -0,0 +1,6 @@ +{ + "name": "code_interpreter_tool", + "package": "poetry add 'crewai[tools]'", + "env": "", + "tools": ["code_interpreter"] +} \ No newline at end of file diff --git a/agentstack/tools/composio.json b/agentstack/tools/composio.json new file mode 100644 index 00000000..2a80bc67 --- /dev/null +++ b/agentstack/tools/composio.json @@ -0,0 +1,8 @@ +{ + "name": "composio", + "package": "poetry add composio-crewai", + "env": "COMPOSIO_API_KEY=...", + "tools": ["composio_tools"], + "tools_bundled": true, + "cta": "!!! Composio provides 150+ tools. Additional setup is required in src/tools/composio_tool.py" +} \ No newline at end of file diff --git a/agentstack/tools/tools.json b/agentstack/tools/tools.json index 89c7af00..e8216e48 100644 --- a/agentstack/tools/tools.json +++ b/agentstack/tools/tools.json @@ -15,9 +15,12 @@ "name": "mem0", "url": "https://github.com/mem0ai/mem0" }], - "code-gen": [{ + "code-execution": [{ "name": "open_interpreter", "url": "https://github.com/OpenInterpreter/open-interpreter" + },{ + "name": "code_interpreter", + "url": "AgentStack default tool" }], "computer-control": [{ "name": "directory_search", @@ -27,10 +30,18 @@ "url": "https://github.com/crewAIInc/crewAI-tools/tree/main/crewai_tools/tools/file_read_tool" },{ "name": "ftp", - "url": "AgentStack custom tool" + "url": "AgentStack default tool" }], "network-protocols": [{ "name": "agent_connect", "url": "https://github.com/chgaowei/AgentConnect" + }], + "unified-apis": [{ + "name": "composio", + "url": "https://composio.dev/" + }], + "vision": [{ + "name": "vision", + "url": "AgentStack default tool" }] } diff --git a/agentstack/tools/vision.json b/agentstack/tools/vision.json new file mode 100644 index 00000000..2ddd0b9f --- /dev/null +++ b/agentstack/tools/vision.json @@ -0,0 +1,6 @@ +{ + "name": "vision", + "package": "poetry add 'crewai[tools]'", + "env": "", + "tools": ["vision_tool"] +} \ No newline at end of file diff --git a/agentstack/utils.py b/agentstack/utils.py index 20ce480d..822208d5 100644 --- a/agentstack/utils.py +++ b/agentstack/utils.py @@ -1,17 +1,15 @@ from typing import Optional -import toml import os import sys import json import re +from importlib.metadata import version def get_version(): try: - with open('../pyproject.toml', 'r') as f: - pyproject_data = toml.load(f) - return pyproject_data['project']['version'] + return version('agentstack') except (KeyError, FileNotFoundError) as e: print(e) return "Unknown version" diff --git a/pyproject.toml b/pyproject.toml index cf3a58cc..fb91407e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "agentstack" -version = "0.1.6" +version = "0.1.7" description = "The fastest way to build robust AI agents" authors = [ { name="Braelyn Boynton", email="bboynton97@gmail.com" } @@ -25,9 +25,6 @@ dependencies = [ [tool.setuptools.package-data] agentstack = ["templates/**/*"] -[project.urls] -"Homepage" = "https://github.com/AgentOps-AI/AgentStack" - [project.scripts] agentstack = "agentstack.main:main"