diff --git a/src/crewai/memory/storage/mem0_storage.py b/src/crewai/memory/storage/mem0_storage.py index 5d601ac1f..4fe75e3f5 100644 --- a/src/crewai/memory/storage/mem0_storage.py +++ b/src/crewai/memory/storage/mem0_storage.py @@ -4,6 +4,9 @@ from typing import Any, Dict, List from mem0 import Memory, MemoryClient from crewai.memory.storage.interface import Storage +from crewai.utilities.chromadb import sanitize_collection_name + +MAX_AGENT_ID_LENGTH_MEM0 = 255 class Mem0Storage(Storage): @@ -134,7 +137,7 @@ class Mem0Storage(Storage): agents = self.crew.agents agents = [self._sanitize_role(agent.role) for agent in agents] agents = "_".join(agents) - return agents + return sanitize_collection_name(name=agents,max_collection_length=MAX_AGENT_ID_LENGTH_MEM0) def _get_config(self) -> Dict[str, Any]: return self.config or getattr(self, "memory_config", {}).get("config", {}) or {} diff --git a/src/crewai/utilities/chromadb.py b/src/crewai/utilities/chromadb.py index d993a5896..4e7a7b1f4 100644 --- a/src/crewai/utilities/chromadb.py +++ b/src/crewai/utilities/chromadb.py @@ -23,7 +23,7 @@ def is_ipv4_pattern(name: str) -> bool: return bool(IPV4_PATTERN.match(name)) -def sanitize_collection_name(name: Optional[str]) -> str: +def sanitize_collection_name(name: Optional[str], max_collection_length: int = MAX_COLLECTION_LENGTH) -> str: """ Sanitize a collection name to meet ChromaDB requirements: 1. 3-63 characters long @@ -54,8 +54,8 @@ def sanitize_collection_name(name: Optional[str]) -> str: if len(sanitized) < MIN_COLLECTION_LENGTH: sanitized = sanitized + "x" * (MIN_COLLECTION_LENGTH - len(sanitized)) - if len(sanitized) > MAX_COLLECTION_LENGTH: - sanitized = sanitized[:MAX_COLLECTION_LENGTH] + if len(sanitized) > max_collection_length: + sanitized = sanitized[:max_collection_length] if not sanitized[-1].isalnum(): sanitized = sanitized[:-1] + "z"