I’m running into an issue with multi-vector setup and could use some help. I’m trying to implement a LongTermMemory class that stores objects with separate text_embedding and image_embedding vectors. These are external embeddings. I keep getting a 422 error:
weaviate.exceptions.UnexpectedStatusCodeError: Object was not added! Unexpected status code: 422, with response body: {'error': [{'message': 'invalid object: collection MemoryEvent is configured without multiple named vectors, but received named vectors: map[image_embedding:[...] text_embedding:[...]]'}]}.
from weaviate.classes.config import Property, DataType, Configure
def _initialize_schema(self):
"""Initializes the schema."""
if not self.client.collections.exists(self.class_name):
if Config.USE_SEPARATE_EMBEDDINGS_FOR_RETRIEVAL:
# Multi-vector configuration
self.client.collections.create(
name=self.class_name,
vectorizer_config=[
Configure.NamedVectors.none(name="text_embedding", vector_index_config=Configure.VectorIndex.hnsw()),
Configure.NamedVectors.none(name="image_embedding", vector_index_config=Configure.VectorIndex.hnsw())
],
properties=[
Property(name="metadata", data_type=DataType.TEXT),
Property(name="importance", data_type=DataType.NUMBER),
Property(name="timestamp", data_type=DataType.DATE),
Property(name="last_accessed", data_type=DataType.DATE),
Property(name="category", data_type=DataType.TEXT,
description="safety_critical/routine"),
Property(name="access_count", data_type=DataType.NUMBER)
]
)
else:
# Single-vector configuration
self.client.collections.create(
name=self.class_name,
vectorizer_config=Configure.Vectorizer.none(),
properties=[
Property(name="metadata", data_type=DataType.TEXT),
Property(name="importance", data_type=DataType.NUMBER),
Property(name="timestamp", data_type=DataType.DATE),
Property(name="last_accessed", data_type=DataType.DATE),
Property(name="category", data_type=DataType.TEXT,
description="safety_critical/routine"),
Property(name="access_count", data_type=DataType.NUMBER)
]
)
Here is how I add events:
def add(self, embedding, metadata, initial_importance=0.7):
"""
Stores an event.
"""
metadata_str = json.dumps(metadata)
collection = self.client.collections.get(self.class_name)
uuid = metadata.get("image_path", "").split("/")[-1].split(".")[0] or None
if Config.USE_SEPARATE_EMBEDDINGS_FOR_RETRIEVAL:
vectors = {
"text_embedding": metadata.get("embeddings", {}).get("text_embedding"),
"image_embedding": metadata.get("embeddings", {}).get("image_embedding")
}
else:
vectors = embedding
collection.data.insert(
properties={
"metadata": metadata_str,
"importance": initial_importance,
"timestamp": datetime.now().astimezone().isoformat(),
"last_accessed": datetime.now().astimezone().isoformat(),
"category": self._determine_category(metadata_str),
"access_count": 0
},
vector=vectors,
uuid=uuid
)
I have followed these documentations but I still cannot figure out the problem. Btw, I already delete the collection before running my agent. Also, my single vector setup works perfectly. I’m using Weaviate v4.11. Thank you!