Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions chromadb/api/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
import struct
import math

_cached_protocol_signature = None

# Re-export types from chromadb.types
__all__ = [
"Metadata",
Expand Down Expand Up @@ -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(
Expand All @@ -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."""
Expand Down