From 7c99e9ab508f5db89355c8b2e8238483bf4f52f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moura?= Date: Sat, 24 Feb 2024 03:13:17 -0300 Subject: [PATCH] preparing new verion and adding new tools --- src/crewai_tools/__init__.py | 1 + src/crewai_tools/tools/__init__.py | 1 + .../directory_read_tool.py | 33 +++++++++++++++++++ .../tools/file_read_tool/file_read_tool.py | 2 +- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/crewai_tools/tools/directory_read_tool/directory_read_tool.py diff --git a/src/crewai_tools/__init__.py b/src/crewai_tools/__init__.py index a6a269be6..e643bb829 100644 --- a/src/crewai_tools/__init__.py +++ b/src/crewai_tools/__init__.py @@ -4,6 +4,7 @@ from .tools import ( CSVSearchTool, DirectorySearchTool, DOCXSearchTool, + DirectoryReadTool, FileReadTool, GithubSearchTool, TXTSearchTool, diff --git a/src/crewai_tools/tools/__init__.py b/src/crewai_tools/tools/__init__.py index 2910185ec..e2382eb9b 100644 --- a/src/crewai_tools/tools/__init__.py +++ b/src/crewai_tools/tools/__init__.py @@ -1,6 +1,7 @@ from .code_docs_search_tool.code_docs_search_tool import CodeDocsSearchTool from .csv_search_tool.csv_search_tool import CSVSearchTool from .directory_search_tool.directory_search_tool import DirectorySearchTool +from .directory_read_tool.directory_read_tool import DirectoryReadTool from .docx_search_tool.docx_search_tool import DOCXSearchTool from .file_read_tool.file_read_tool import FileReadTool from .github_search_tool.github_search_tool import GithubSearchTool diff --git a/src/crewai_tools/tools/directory_read_tool/directory_read_tool.py b/src/crewai_tools/tools/directory_read_tool/directory_read_tool.py new file mode 100644 index 000000000..7dc6c1a5d --- /dev/null +++ b/src/crewai_tools/tools/directory_read_tool/directory_read_tool.py @@ -0,0 +1,33 @@ +import os +from typing import Optional, Type, Any +from pydantic.v1 import BaseModel, Field +from ..base_tool import BaseTool + +class FixedDirectoryReadToolSchema(BaseModel): + """Input for DirectoryReadTool.""" + pass + +class DirectoryReadToolSchema(FixedDirectoryReadToolSchema): + """Input for DirectoryReadTool.""" + directory: str = Field(..., description="Mandatory directory to list content") + +class DirectoryReadTool(BaseTool): + name: str = "List files in directory" + description: str = "A tool that can be used to recursively list a directory's content." + args_schema: Type[BaseModel] = DirectoryReadToolSchema + directory: Optional[str] = None + + def __init__(self, directory: Optional[str] = None, **kwargs): + super().__init__(**kwargs) + if directory is not None: + self.directory = directory + self.description = f"A tool that can be used to list {directory}'s content." + self.args_schema = FixedDirectoryReadToolSchema + + def _run( + self, + **kwargs: Any, + ) -> Any: + directory = kwargs.get('directory', self.directory) + return [(os.path.join(root, file).replace(directory, "").lstrip(os.path.sep)) for root, dirs, files in os.walk(directory) for file in files] + diff --git a/src/crewai_tools/tools/file_read_tool/file_read_tool.py b/src/crewai_tools/tools/file_read_tool/file_read_tool.py index 0721ec127..8c2e8dcca 100644 --- a/src/crewai_tools/tools/file_read_tool/file_read_tool.py +++ b/src/crewai_tools/tools/file_read_tool/file_read_tool.py @@ -8,7 +8,7 @@ class FixedFileReadToolSchema(BaseModel): class FileReadToolSchema(FixedFileReadToolSchema): """Input for FileReadTool.""" - file_path: str = Field(..., description="Mandatory file path to read the file") + file_path: str = Field(..., description="Mandatory file full path to read the file") class FileReadTool(BaseTool): name: str = "Read a file's content"