From a94470772fbfad0e538858b8d245c89cfab1dde8 Mon Sep 17 00:00:00 2001 From: Carlos Souza Date: Thu, 28 Nov 2024 19:09:44 -0500 Subject: [PATCH 1/3] Fix pydantic related errors on FirecrawlScrapeWebsiteTool --- .../firecrawl_scrape_website_tool.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py b/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py index ee8e592ca..89478976d 100644 --- a/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py +++ b/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py @@ -1,6 +1,6 @@ from typing import TYPE_CHECKING, Any, Dict, Optional, Type -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, ConfigDict from crewai_tools.tools.base_tool import BaseTool @@ -24,6 +24,7 @@ class FirecrawlScrapeWebsiteToolSchema(BaseModel): class FirecrawlScrapeWebsiteTool(BaseTool): + model_config = ConfigDict(arbitrary_types_allowed=True) name: str = "Firecrawl web scrape tool" description: str = "Scrape webpages url using Firecrawl and return the contents" args_schema: Type[BaseModel] = FirecrawlScrapeWebsiteToolSchema @@ -61,3 +62,11 @@ class FirecrawlScrapeWebsiteTool(BaseTool): "timeout": timeout, } return self.firecrawl.scrape_url(url, options) + +try: + from firecrawl import FirecrawlApp + FirecrawlScrapeWebsiteTool.model_rebuild() +except ImportError: + raise ImportError( + "`firecrawl` package not found, please run `pip install firecrawl-py`" + ) \ No newline at end of file From 49ad43ff083c924e3ed510b84999efd3ba0144c8 Mon Sep 17 00:00:00 2001 From: Carlos Souza Date: Fri, 29 Nov 2024 05:51:55 -0500 Subject: [PATCH 2/3] Do not reraise exception Tool use is optional and missing dependency should not raise error --- .../firecrawl_scrape_website_tool.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py b/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py index 89478976d..cb00a46c6 100644 --- a/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py +++ b/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py @@ -65,8 +65,10 @@ class FirecrawlScrapeWebsiteTool(BaseTool): try: from firecrawl import FirecrawlApp + # Must rebuild model after class is defined FirecrawlScrapeWebsiteTool.model_rebuild() except ImportError: - raise ImportError( - "`firecrawl` package not found, please run `pip install firecrawl-py`" - ) \ No newline at end of file + """ + When this tool is not used, then exception can be ignored. + """ + pass \ No newline at end of file From e677a271e53afa265a55f5ad77f85b4cceba9ee4 Mon Sep 17 00:00:00 2001 From: Carlos Souza Date: Fri, 29 Nov 2024 05:57:09 -0500 Subject: [PATCH 3/3] More explicit model config --- .../firecrawl_scrape_website_tool.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py b/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py index cb00a46c6..84b61209b 100644 --- a/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py +++ b/src/crewai_tools/tools/firecrawl_scrape_website_tool/firecrawl_scrape_website_tool.py @@ -24,7 +24,11 @@ class FirecrawlScrapeWebsiteToolSchema(BaseModel): class FirecrawlScrapeWebsiteTool(BaseTool): - model_config = ConfigDict(arbitrary_types_allowed=True) + model_config = ConfigDict( + arbitrary_types_allowed=True, + validate_assignment=True, + frozen=False + ) name: str = "Firecrawl web scrape tool" description: str = "Scrape webpages url using Firecrawl and return the contents" args_schema: Type[BaseModel] = FirecrawlScrapeWebsiteToolSchema @@ -63,6 +67,7 @@ class FirecrawlScrapeWebsiteTool(BaseTool): } return self.firecrawl.scrape_url(url, options) + try: from firecrawl import FirecrawlApp # Must rebuild model after class is defined @@ -71,4 +76,4 @@ except ImportError: """ When this tool is not used, then exception can be ignored. """ - pass \ No newline at end of file + pass