From b8bd3000c6ec613782c173f362b2c9e5f89697ff Mon Sep 17 00:00:00 2001 From: Vini Brasil Date: Mon, 28 Jul 2025 17:09:53 -0300 Subject: [PATCH] Make `RagTool` processs-safe (#399) This commit adds a file lock to `RagTool`. As it uses Embedchain and Chroma internally, this tool was not process-safe. --- src/crewai_tools/tools/rag/rag_tool.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/crewai_tools/tools/rag/rag_tool.py b/src/crewai_tools/tools/rag/rag_tool.py index 900a6ef36..f7e785bd7 100644 --- a/src/crewai_tools/tools/rag/rag_tool.py +++ b/src/crewai_tools/tools/rag/rag_tool.py @@ -1,8 +1,10 @@ +import portalocker + from abc import ABC, abstractmethod from typing import Any +from pydantic import BaseModel, ConfigDict, Field, model_validator from crewai.tools import BaseTool -from pydantic import BaseModel, ConfigDict, Field, model_validator class Adapter(BaseModel, ABC): @@ -39,10 +41,11 @@ class RagTool(BaseTool): def _set_default_adapter(self): if isinstance(self.adapter, RagTool._AdapterPlaceholder): from embedchain import App - from crewai_tools.adapters.embedchain_adapter import EmbedchainAdapter - app = App.from_config(config=self.config) if self.config else App() + with portalocker.Lock("crewai-rag-tool.lock", timeout=10): + app = App.from_config(config=self.config) if self.config else App() + self.adapter = EmbedchainAdapter( embedchain_app=app, summarize=self.summarize )