microsoft/semantic-kernel · error · VectorStoreModelValidationError
Chroma only supports one vector field, but {len(self.definit
Error message
Chroma only supports one vector field, but {len(self.definition.vector_fields)} were provided. What it means
A VectorStoreModelValidationError raised in _validate_data_model() when the collection definition declares more than one vector field. Chroma only supports a single embedding space per collection, so this is a hard constraint enforced during model validation (called at collection init / bind time).
Source
Thrown at python/semantic_kernel/connectors/chroma.py:197
self.client.create_collection(name=self.collection_name, embedding_function=self.embedding_func, **kwargs)
@override
async def ensure_collection_deleted(self, **kwargs: Any) -> None:
"""Delete the collection."""
try:
self.client.delete_collection(name=self.collection_name)
except ValueError:
logger.info(f"Collection {self.collection_name} could not be deleted because it doesn't exist.")
except Exception as e:
raise VectorStoreOperationException(
f"Failed to delete collection {self.collection_name} with error: {e}"
) from e
def _validate_data_model(self):
super()._validate_data_model()
if len(self.definition.vector_fields) > 1:
raise VectorStoreModelValidationError(
f"Chroma only supports one vector field, but {len(self.definition.vector_fields)} were provided."
)
@override
def _serialize_dicts_to_store_models(self, records: Sequence[dict[str, Any]], **kwargs: Any) -> Sequence[Any]:
vector_field = self.definition.vector_fields[0]
id_field_name = self.definition.key_name
store_models = []
for record in records:
store_model = {
"id": record[id_field_name],
"metadata": {
k: v
for k, v in record.items()
if k not in [id_field_name, vector_field.storage_name or vector_field.name]
},
}
if self.embedding_func:View on GitHub (pinned to c028a0c7dc)
Solutions
- Reduce the data model to a single VectorStoreRecordVectorField for use with Chroma.
- If you need multiple vectors per record, split records across separate Chroma collections (one per vector) keyed by the same id, or use a connector that supports multiple vector fields.
Example fix
// before
@vectorstoremodel
class Doc:
id: str
dense: VectorStoreRecordVectorField(dimensions=1536)
sparse: VectorStoreRecordVectorField(dimensions=300)
// after
# keep only one vector field for Chroma
@vectorstoremodel
class Doc:
id: str
dense: VectorStoreRecordVectorField(dimensions=1536) Defensive patterns
Strategy: validation
Validate before calling
assert len(definition.vector_fields) <= 1, (
f"Chroma supports 1 vector field, got {len(definition.vector_fields)}"
) Type guard
def has_single_vector_field(definition) -> bool:
return len(definition.vector_fields) == 1 Try / catch
from semantic_kernel.exceptions.vector_store_exceptions import VectorStoreModelValidationError
try:
ChromaCollection(record_type=Doc, ...)
except VectorStoreModelValidationError as e:
if "only supports one vector field" in str(e):
# split the model across collections
... Prevention
- Design Chroma models with exactly one VectorStoreRecordVectorField.
- For multi-vector needs, use one collection per vector keyed by the same id.
When it happens
Trigger: Defining a VectorStoreCollectionDefinition or record model with two or more VectorStoreRecordVectorField entries and instantiating a ChromaCollection bound to it.
Common situations: Multi-vector schemas (e.g. storing a dense and a sparse vector, or embeddings from two models) that work in the in-memory connector but are ported to Chroma; merging two record definitions during refactoring.
Related errors
- Vector field '{options.vector_property_name}' not found in t
- Field '{node.attr}' not in data model (storage property name
- Field '{node.id}' not in data model (storage property names
- Field name '{IN_MEMORY_SCORE_KEY}' is reserved for internal
- The option keys 'asset_identifiers' and 'asset_type' are req
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/a460f2600e15c262.
Report an issue: GitHub.