Move Chroma lockfile to db/ (#3342)

This commit fixes an issue where using Chroma would spam lockfiles over
the root path of the crew.
This commit is contained in:
Vini Brasil
2025-08-18 11:00:50 -07:00
committed by GitHub
parent 1d3d7ebf5e
commit 2fdf3f3a6a

View File

@@ -1,9 +1,10 @@
import os
import re import re
import portalocker import portalocker
from chromadb import PersistentClient from chromadb import PersistentClient
from hashlib import md5 from hashlib import md5
from typing import Optional from typing import Optional
from crewai.utilities.paths import db_storage_path
MIN_COLLECTION_LENGTH = 3 MIN_COLLECTION_LENGTH = 3
MAX_COLLECTION_LENGTH = 63 MAX_COLLECTION_LENGTH = 63
@@ -27,7 +28,9 @@ def is_ipv4_pattern(name: str) -> bool:
return bool(IPV4_PATTERN.match(name)) return bool(IPV4_PATTERN.match(name))
def sanitize_collection_name(name: Optional[str], max_collection_length: int = MAX_COLLECTION_LENGTH) -> str: def sanitize_collection_name(
name: Optional[str], max_collection_length: int = MAX_COLLECTION_LENGTH
) -> str:
""" """
Sanitize a collection name to meet ChromaDB requirements: Sanitize a collection name to meet ChromaDB requirements:
1. 3-63 characters long 1. 3-63 characters long
@@ -72,7 +75,8 @@ def create_persistent_client(path: str, **kwargs):
concurrent creations. Works for both multi-threads and multi-processes concurrent creations. Works for both multi-threads and multi-processes
environments. environments.
""" """
lockfile = f"chromadb-{md5(path.encode(), usedforsecurity=False).hexdigest()}.lock" lock_id = md5(path.encode(), usedforsecurity=False).hexdigest()
lockfile = os.path.join(db_storage_path(), f"chromadb-{lock_id}.lock")
with portalocker.Lock(lockfile): with portalocker.Lock(lockfile):
client = PersistentClient(path=path, **kwargs) client = PersistentClient(path=path, **kwargs)