From 1fa9c7ba450941d54acbcf4865cfae6cddb9788f Mon Sep 17 00:00:00 2001 From: George Panchuk Date: Fri, 12 Jan 2024 17:16:57 +0100 Subject: [PATCH] fix: do not allow insert unnamed vectors into a collection with named vectors --- qdrant_client/local/local_collection.py | 6 ++++++ tests/congruence_tests/test_updates.py | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/qdrant_client/local/local_collection.py b/qdrant_client/local/local_collection.py index 20ba56cd..71bf48eb 100644 --- a/qdrant_client/local/local_collection.py +++ b/qdrant_client/local/local_collection.py @@ -1073,6 +1073,12 @@ def _upsert_point(self, point: models.PointStruct) -> None: updated_sparse_vectors[vector_name] = sort(vector) # update point.vector with the modified values after iteration point.vector.update(updated_sparse_vectors) + else: + vector_names = list(self.vectors.keys()) + if vector_names != [""]: + raise ValueError( + f"Wrong input: Unnamed vectors are not allowed when a collection has named vectors: {vector_names}" + ) if point.id in self.ids: self._update_point(point) diff --git a/tests/congruence_tests/test_updates.py b/tests/congruence_tests/test_updates.py index 65451145..d4612cec 100644 --- a/tests/congruence_tests/test_updates.py +++ b/tests/congruence_tests/test_updates.py @@ -302,7 +302,7 @@ def test_upload_wrong_vectors(): local_client = init_local() remote_client = init_remote() - vector_size = 5 + vector_size = 2 wrong_vectors_collection = "test_collection" vectors_config = { "text": models.VectorParams(size=vector_size, distance=models.Distance.COSINE) @@ -315,7 +315,7 @@ def test_upload_wrong_vectors(): ) remote_client.recreate_collection( collection_name=wrong_vectors_collection, - vectors_config=models.VectorParams(size=vector_size, distance=models.Distance.COSINE), + vectors_config=vectors_config, sparse_vectors_config=sparse_vectors_config, ) @@ -358,3 +358,15 @@ def test_upload_wrong_vectors(): local_client.upload_records( wrong_vectors_collection, records=[models.Record(id=3, vector=dense_vector)] ) + + unnamed_vector = [0.1, 0.3] + with pytest.raises(qdrant_client.http.exceptions.UnexpectedResponse): + remote_client.upsert( + wrong_vectors_collection, + points=[models.PointStruct(id=1, vector=unnamed_vector)], + ) + with pytest.raises(ValueError): + local_client.upsert( + wrong_vectors_collection, + points=[models.PointStruct(id=1, vector=unnamed_vector)], + )