diff --git a/chromadb/api/types.py b/chromadb/api/types.py index 9c45112809f..fa26915c0a3 100644 --- a/chromadb/api/types.py +++ b/chromadb/api/types.py @@ -53,6 +53,8 @@ import struct import math +_cached_protocol_signature = None + # Re-export types from chromadb.types __all__ = [ "Metadata", @@ -1480,10 +1482,10 @@ def validate_sparse_embedding_function( sparse_vector_function: SparseEmbeddingFunction[Embeddable], ) -> None: """Validate that a sparse vector function conforms to the SparseEmbeddingFunction protocol.""" - function_signature = signature( - sparse_vector_function.__class__.__call__ - ).parameters.keys() - protocol_signature = signature(SparseEmbeddingFunction.__call__).parameters.keys() + function_signature = tuple( + signature(sparse_vector_function.__class__.__call__).parameters.keys() + ) + protocol_signature = _get_protocol_signature() if not function_signature == protocol_signature: raise ValueError( @@ -1492,6 +1494,15 @@ def validate_sparse_embedding_function( ) +def _get_protocol_signature(): + global _cached_protocol_signature + if _cached_protocol_signature is None: + _cached_protocol_signature = tuple( + signature(SparseEmbeddingFunction.__call__).parameters.keys() + ) + return _cached_protocol_signature + + # Index Configuration Types for Collection Schema class FtsIndexConfig(BaseModel): """Configuration for Full-Text Search index. No parameters required."""