Skip to content

Commit 17a2d55

Browse files
committed
Allow vector=[[1,2],[3,4] in hybrid for multi-vector index search usages
1 parent a031ed8 commit 17a2d55

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

integration/test_named_vectors.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,20 @@ def test_colbert_vectors_byov(collection_factory: CollectionFactory) -> None:
835835
).objects
836836
assert len(objs) == 1
837837

838+
objs = collection.query.hybrid(
839+
None,
840+
vector=[1, 2],
841+
target_vector="regular",
842+
).objects
843+
assert len(objs) == 1
844+
845+
objs = collection.query.hybrid(
846+
None,
847+
vector=[[1, 2], [3, 4]],
848+
target_vector="colbert",
849+
).objects
850+
assert len(objs) == 1
851+
838852
objs = collection.query.hybrid(
839853
None,
840854
vector={"colbert": [[1, 2], [3, 4]]},

weaviate/collections/grpc/shared.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,13 +627,21 @@ def _parse_hybrid(
627627

628628
targets, target_vectors = self.__target_vector_to_grpc(target_vector)
629629

630-
near_text, near_vector, vector_bytes = None, None, None
630+
near_text, near_vector, vector_bytes, vectors = None, None, None, None
631631

632632
if vector is None:
633633
pass
634634
elif isinstance(vector, list) and len(vector) > 0 and isinstance(vector[0], float):
635635
# fast path for simple vector
636636
vector_bytes = struct.pack("{}f".format(len(vector)), *vector)
637+
elif _is_2d_vector(vector) and self._weaviate_version.is_at_least(1, 29, 0):
638+
# fast path for simple multi-vector
639+
vectors = [
640+
base_pb2.Vectors(
641+
vector_bytes=_Pack.multi(vector),
642+
type=base_pb2.Vectors.VECTOR_TYPE_MULTI_FP32,
643+
)
644+
]
637645
elif isinstance(vector, _HybridNearText):
638646
near_text = base_search_pb2.NearTextSearch(
639647
query=[vector.text] if isinstance(vector.text, str) else vector.text,
@@ -715,6 +723,7 @@ def _parse_hybrid(
715723
near_vector=near_vector,
716724
vector_bytes=vector_bytes,
717725
vector_distance=distance,
726+
vectors=vectors,
718727
)
719728
if query is not None or vector is not None
720729
else None

0 commit comments

Comments
 (0)