Skip to content
Merged
Show file tree
Hide file tree
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
14 changes: 14 additions & 0 deletions integration/test_named_vectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,20 @@ def test_colbert_vectors_byov(collection_factory: CollectionFactory) -> None:
).objects
assert len(objs) == 1

objs = collection.query.hybrid(
None,
vector=[1, 2],
target_vector="regular",
).objects
assert len(objs) == 1

objs = collection.query.hybrid(
None,
vector=[[1, 2], [3, 4]],
target_vector="colbert",
).objects
assert len(objs) == 1

objs = collection.query.hybrid(
None,
vector={"colbert": [[1, 2], [3, 4]]},
Expand Down
11 changes: 10 additions & 1 deletion weaviate/collections/grpc/shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -627,13 +627,21 @@ def _parse_hybrid(

targets, target_vectors = self.__target_vector_to_grpc(target_vector)

near_text, near_vector, vector_bytes = None, None, None
near_text, near_vector, vector_bytes, vectors = None, None, None, None

if vector is None:
pass
elif isinstance(vector, list) and len(vector) > 0 and isinstance(vector[0], float):
# fast path for simple vector
vector_bytes = struct.pack("{}f".format(len(vector)), *vector)
elif _is_2d_vector(vector) and self._weaviate_version.is_at_least(1, 29, 0):
# fast path for simple multi-vector
vectors = [
base_pb2.Vectors(
vector_bytes=_Pack.multi(vector),
type=base_pb2.Vectors.VECTOR_TYPE_MULTI_FP32,
)
]
elif isinstance(vector, _HybridNearText):
near_text = base_search_pb2.NearTextSearch(
query=[vector.text] if isinstance(vector.text, str) else vector.text,
Expand Down Expand Up @@ -715,6 +723,7 @@ def _parse_hybrid(
near_vector=near_vector,
vector_bytes=vector_bytes,
vector_distance=distance,
vectors=vectors,
)
if query is not None or vector is not None
else None
Expand Down