diff --git a/qdrant_client/conversions/conversion.py b/qdrant_client/conversions/conversion.py index ce73ff3d..23790251 100644 --- a/qdrant_client/conversions/conversion.py +++ b/qdrant_client/conversions/conversion.py @@ -141,7 +141,7 @@ class GrpcToRest: def convert_condition(cls, model: grpc.Condition) -> rest.Condition: name = model.WhichOneof("condition_one_of") if name is None: - raise ValueError(f"invalid Condition model: {model}") + raise ValueError(f"invalid Condition model: {model}") # pragma: no cover val = getattr(model, name) if name == "field": @@ -490,7 +490,7 @@ def convert_create_alias(cls, model: grpc.CreateAlias) -> rest.CreateAlias: def convert_order_value(cls, model: grpc.OrderValue) -> rest.OrderValue: name = model.WhichOneof("variant") if name is None: - raise ValueError(f"invalid OrderValue model: {model}") + raise ValueError(f"invalid OrderValue model: {model}") # pragma: no cover val = getattr(model, name) if name == "int": @@ -508,7 +508,9 @@ def convert_scored_point(cls, model: grpc.ScoredPoint) -> rest.ScoredPoint: id=cls.convert_point_id(model.id), payload=cls.convert_payload(model.payload) if has_field(model, "payload") else None, score=model.score, - vector=cls.convert_vectors(model.vectors) if model.HasField("vectors") else None, + vector=cls.convert_vectors_output(model.vectors) + if model.HasField("vectors") + else None, version=model.version, shard_key=( cls.convert_shard_key(model.shard_key) if model.HasField("shard_key") else None @@ -587,7 +589,7 @@ def convert_field_condition(cls, model: grpc.FieldCondition) -> rest.FieldCondit def convert_match(cls, model: grpc.Match) -> rest.Match: name = model.WhichOneof("match_value") if name is None: - raise ValueError(f"invalid Match model: {model}") + raise ValueError(f"invalid Match model: {model}") # pragma: no cover val = getattr(model, name) if name == "integer": @@ -722,7 +724,7 @@ def convert_geo_point(cls, model: grpc.GeoPoint) -> rest.GeoPoint: def convert_alias_operations(cls, model: grpc.AliasOperations) -> rest.AliasOperations: name = model.WhichOneof("action") if name is None: - raise ValueError(f"invalid AliasOperations model: {model}") + raise ValueError(f"invalid AliasOperations model: {model}") # pragma: no cover val = getattr(model, name) if name == "rename_alias": @@ -747,7 +749,7 @@ def convert_points_selector( ) -> rest.PointsSelector: name = model.WhichOneof("points_selector_one_of") if name is None: - raise ValueError(f"invalid PointsSelector model: {model}") + raise ValueError(f"invalid PointsSelector model: {model}") # pragma: no cover val = getattr(model, name) if name == "points": @@ -768,7 +770,7 @@ def convert_with_payload_selector( ) -> rest.WithPayloadInterface: name = model.WhichOneof("selector_options") if name is None: - raise ValueError(f"invalid WithPayloadSelector model: {model}") + raise ValueError(f"invalid WithPayloadSelector model: {model}") # pragma: no cover val = getattr(model, name) if name == "enable": @@ -791,7 +793,9 @@ def convert_retrieved_point(cls, model: grpc.RetrievedPoint) -> rest.Record: return rest.Record( id=cls.convert_point_id(model.id), payload=cls.convert_payload(model.payload), - vector=cls.convert_vectors(model.vectors) if model.HasField("vectors") else None, + vector=cls.convert_vectors_output(model.vectors) + if model.HasField("vectors") + else None, shard_key=( cls.convert_shard_key(model.shard_key) if model.HasField("shard_key") else None ), @@ -833,7 +837,7 @@ def convert_datatype(cls, model: grpc.Datatype) -> rest.Datatype: elif model == grpc.Datatype.Float16: return rest.Datatype.FLOAT16 else: - raise ValueError(f"invalid Datatype model: {model}") + raise ValueError(f"invalid Datatype model: {model}") # pragma: no cover @classmethod def convert_vector_params(cls, model: grpc.VectorParams) -> rest.VectorParams: @@ -878,7 +882,7 @@ def convert_multivector_comparator( def convert_vectors_config(cls, model: grpc.VectorsConfig) -> rest.VectorsConfig: name = model.WhichOneof("config") if name is None: - raise ValueError(f"invalid VectorsConfig model: {model}") + raise ValueError(f"invalid VectorsConfig model: {model}") # pragma: no cover val = getattr(model, name) if name == "params": @@ -889,18 +893,88 @@ def convert_vectors_config(cls, model: grpc.VectorsConfig) -> rest.VectorsConfig ) raise ValueError(f"invalid VectorsConfig model: {model}") # pragma: no cover + @classmethod + def _convert_vector( + cls, model: Union[grpc.Vector, grpc.VectorOutput] + ) -> Tuple[ + Optional[str], + Union[ + List[float], + List[List[float]], + rest.SparseVector, + grpc.Document, + grpc.Image, + grpc.InferenceObject, + ], + ]: + """Parse common parts of vector structs + + Args: + model: Vector or VectorOutput + + Returns: + Tuple of name and value, name is None if the struct was parsed and returned with the converted value, + otherwise it's propagated for further processing along with the raw value + """ + name = model.WhichOneof("vector") + if name is None: + if model.HasField("indices"): + return None, rest.SparseVector(indices=model.indices.data[:], values=model.data[:]) + if model.HasField("vectors_count"): + vectors_count = model.vectors_count + vectors = model.data + step = len(vectors) // vectors_count + return None, [vectors[i : i + step] for i in range(0, len(vectors), step)] + + return None, model.data[:] + + val = getattr(model, name) + if name == "dense": + return None, cls.convert_dense_vector(val) + + if name == "sparse": + return None, cls.convert_sparse_vector(val) + + if name == "multi_dense": + return None, cls.convert_multi_dense_vector(val) + + return name, val + @classmethod def convert_vector( cls, model: grpc.Vector + ) -> Union[ + List[float], + List[List[float]], + rest.SparseVector, + rest.Document, + rest.Image, + rest.InferenceObject, + ]: + name, val = cls._convert_vector(model) + + if name is None: + return val + + if name == "document": + return cls.convert_document(val) + + if name == "image": + return cls.convert_image(val) + + if name == "object": + return cls.convert_inference_object(val) + + raise ValueError(f"invalid Vector model: {model}") # pragma: no cover + + @classmethod + def convert_vector_output( + cls, model: grpc.VectorOutput ) -> Union[List[float], List[List[float]], rest.SparseVector]: - if model.HasField("indices"): - return rest.SparseVector(indices=model.indices.data[:], values=model.data[:]) - if model.HasField("vectors_count"): - vectors_count = model.vectors_count - vectors = model.data - step = len(vectors) // vectors_count - return [vectors[i : i + step] for i in range(0, len(vectors), step)] - return model.data[:] + name, val = cls._convert_vector(model) + if name is None: + return val + raise ValueError(f"invalid Vector model: {model}") # pragma: no cover @classmethod def convert_named_vectors(cls, model: grpc.NamedVectors) -> Dict[str, rest.Vector]: @@ -910,11 +984,21 @@ def convert_named_vectors(cls, model: grpc.NamedVectors) -> Dict[str, rest.Vecto return vectors + @classmethod + def convert_named_vectors_output( + cls, model: grpc.NamedVectorsOutput + ) -> Dict[str, rest.VectorOutput]: + vectors = {} + for name, vector in model.vectors.items(): + vectors[name] = cls.convert_vector_output(vector) + + return vectors + @classmethod def convert_vectors(cls, model: grpc.Vectors) -> rest.VectorStruct: name = model.WhichOneof("vectors_options") if name is None: - raise ValueError(f"invalid Vectors model: {model}") + raise ValueError(f"invalid Vectors model: {model}") # pragma: no cover val = getattr(model, name) if name == "vector": @@ -923,6 +1007,19 @@ def convert_vectors(cls, model: grpc.Vectors) -> rest.VectorStruct: return cls.convert_named_vectors(val) raise ValueError(f"invalid Vectors model: {model}") # pragma: no cover + @classmethod + def convert_vectors_output(cls, model: grpc.VectorsOutput) -> rest.VectorStructOutput: + name = model.WhichOneof("vectors_options") + if name is None: + raise ValueError(f"invalid VectorsOutput model: {model}") # pragma: no cover + val = getattr(model, name) + + if name == "vector": + return cls.convert_vector_output(val) + if name == "vectors": + return cls.convert_named_vectors_output(val) + raise ValueError(f"invalid VectorsOutput model: {model}") # pragma: no cover + @classmethod def convert_dense_vector(cls, model: grpc.DenseVector) -> List[float]: return model.data[:] @@ -935,11 +1032,35 @@ def convert_sparse_vector(cls, model: grpc.SparseVector) -> rest.SparseVector: def convert_multi_dense_vector(cls, model: grpc.MultiDenseVector) -> List[List[float]]: return [cls.convert_dense_vector(vector) for vector in model.vectors] + @classmethod + def convert_document(cls, model: grpc.Document) -> rest.Document: + return rest.Document( + text=model.text, + model=model.model if model.HasField("model") else None, + options=grpc_to_payload(model.options), + ) + + @classmethod + def convert_image(cls, model: grpc.Image) -> rest.Image: + return rest.Image( + image=model.image, + model=model.model if model.HasField("model") else None, + options=grpc_to_payload(model.options), + ) + + @classmethod + def convert_inference_object(cls, model: grpc.InferenceObject) -> rest.InferenceObject: + return rest.InferenceObject( + object=model.object, + model=model.model if model.HasField("model") else None, + options=grpc_to_payload(model.options), + ) + @classmethod def convert_vector_input(cls, model: grpc.VectorInput) -> rest.VectorInput: name = model.WhichOneof("variant") if name is None: - raise ValueError(f"invalid VectorInput model: {model}") + raise ValueError(f"invalid VectorInput model: {model}") # pragma: no cover val = getattr(model, name) if name == "id": @@ -950,7 +1071,13 @@ def convert_vector_input(cls, model: grpc.VectorInput) -> rest.VectorInput: return cls.convert_sparse_vector(val) if name == "multi_dense": return cls.convert_multi_dense_vector(val) - raise ValueError(f"invalid VectorInput model: {model}") + if name == "document": + return cls.convert_document(val) + if name == "image": + return cls.convert_image(val) + if name == "object": + return cls.convert_inference_object(val) + raise ValueError(f"invalid VectorInput model: {model}") # pragma: no cover @classmethod def convert_recommend_input(cls, model: grpc.RecommendInput) -> rest.RecommendInput: @@ -1001,7 +1128,7 @@ def convert_sample(cls, model: grpc.Sample) -> rest.Sample: def convert_query(cls, model: grpc.Query) -> rest.Query: name = model.WhichOneof("variant") if name is None: - raise ValueError(f"invalid Query model: {model}") + raise ValueError(f"invalid Query model: {model}") # pragma: no cover val = getattr(model, name) if name == "nearest": @@ -1025,7 +1152,7 @@ def convert_query(cls, model: grpc.Query) -> rest.Query: if name == "sample": return rest.SampleQuery(sample=cls.convert_sample(val)) - raise ValueError(f"invalid Query model: {model}") + raise ValueError(f"invalid Query model: {model}") # pragma: no cover @classmethod def convert_prefetch_query(cls, model: grpc.PrefetchQuery) -> rest.Prefetch: @@ -1052,7 +1179,7 @@ def convert_vectors_selector(cls, model: grpc.VectorsSelector) -> List[str]: def convert_with_vectors_selector(cls, model: grpc.WithVectorsSelector) -> rest.WithVector: name = model.WhichOneof("selector_options") if name is None: - raise ValueError(f"invalid WithVectorsSelector model: {model}") + raise ValueError(f"invalid WithVectorsSelector model: {model}") # pragma: no cover val = getattr(model, name) if name == "enable": @@ -1063,8 +1190,20 @@ def convert_with_vectors_selector(cls, model: grpc.WithVectorsSelector) -> rest. @classmethod def convert_search_points(cls, model: grpc.SearchPoints) -> rest.SearchRequest: + vector = ( + rest.NamedVector(name=model.vector_name, vector=model.vector[:]) + if not model.HasField("sparse_indices") + else ( + rest.NamedSparseVector( + name=model.vector_name, + vector=rest.SparseVector( + indices=model.sparse_indices.data[:], values=model.vector[:] + ), + ) + ) + ) return rest.SearchRequest( - vector=rest.NamedVector(name=model.vector_name, vector=model.vector[:]), + vector=vector, filter=cls.convert_filter(model.filter) if model.HasField("filter") else None, limit=model.limit, with_payload=( @@ -1348,7 +1487,7 @@ def convert_write_ordering(cls, model: grpc.WriteOrdering) -> rest.WriteOrdering def convert_read_consistency(cls, model: grpc.ReadConsistency) -> rest.ReadConsistency: name = model.WhichOneof("value") if name is None: - raise ValueError(f"invalid ReadConsistency model: {model}") + raise ValueError(f"invalid ReadConsistency model: {model}") # pragma: no cover val = getattr(model, name) if name == "factor": return val @@ -1415,7 +1554,7 @@ def convert_quantization_config( ) -> rest.QuantizationConfig: name = model.WhichOneof("quantization") if name is None: - raise ValueError(f"invalid QuantizationConfig model: {model}") + raise ValueError(f"invalid QuantizationConfig model: {model}") # pragma: no cover val = getattr(model, name) if name == "scalar": return rest.ScalarQuantization(scalar=cls.convert_scalar_quantization_config(val)) @@ -1460,7 +1599,7 @@ def convert_point_group(cls, model: grpc.PointGroup) -> rest.PointGroup: def convert_group_id(cls, model: grpc.GroupId) -> rest.GroupId: name = model.WhichOneof("kind") if name is None: - raise ValueError(f"invalid GroupId model: {model}") + raise ValueError(f"invalid GroupId model: {model}") # pragma: no cover val = getattr(model, name) return val @@ -1486,7 +1625,7 @@ def convert_quantization_config_diff( ) -> rest.QuantizationConfigDiff: name = model.WhichOneof("quantization") if name is None: - raise ValueError(f"invalid QuantizationConfigDiff model: {model}") + raise ValueError(f"invalid QuantizationConfigDiff model: {model}") # pragma: no cover val = getattr(model, name) if name == "scalar": return rest.ScalarQuantization(scalar=cls.convert_scalar_quantization_config(val)) @@ -1518,7 +1657,7 @@ def convert_vector_params_diff(cls, model: grpc.VectorParamsDiff) -> rest.Vector def convert_vectors_config_diff(cls, model: grpc.VectorsConfigDiff) -> rest.VectorsConfigDiff: name = model.WhichOneof("config") if name is None: - raise ValueError(f"invalid VectorsConfigDiff model: {model}") + raise ValueError(f"invalid VectorsConfigDiff model: {model}") # pragma: no cover val = getattr(model, name) if name == "params": @@ -1536,7 +1675,7 @@ def convert_points_update_operation( ) -> rest.UpdateOperation: name = model.WhichOneof("operation") if name is None: - raise ValueError(f"invalid PointsUpdateOperation model: {model}") + raise ValueError(f"invalid PointsUpdateOperation model: {model}") # pragma: no cover val = getattr(model, name) if name == "upsert": @@ -1712,7 +1851,7 @@ def convert_modifier(cls, model: grpc.Modifier) -> rest.Modifier: return rest.Modifier.IDF if model == getattr(grpc.Modifier, "None"): return rest.Modifier.NONE - raise ValueError(f"invalid Modifier model: {model}") + raise ValueError(f"invalid Modifier model: {model}") # pragma: no cover @classmethod def convert_sparse_vector_params( @@ -1739,7 +1878,7 @@ def convert_sparse_vector_config( def convert_shard_key(cls, model: grpc.ShardKey) -> rest.ShardKey: name = model.WhichOneof("key") if name is None: - raise ValueError(f"invalid ShardKey model: {model}") + raise ValueError(f"invalid ShardKey model: {model}") # pragma: no cover val = getattr(model, name) return val @@ -1793,7 +1932,7 @@ def convert_order_by(cls, model: grpc.OrderBy) -> rest.OrderBy: def convert_facet_value(cls, model: grpc.FacetValue) -> rest.FacetValue: name = model.WhichOneof("variant") if name is None: - raise ValueError(f"invalid FacetValue model: {model}") + raise ValueError(f"invalid FacetValue model: {model}") # pragma: no cover val = getattr(model, name) return val @@ -2099,7 +2238,9 @@ def convert_scored_point(cls, model: rest.ScoredPoint) -> grpc.ScoredPoint: id=cls.convert_extended_point_id(model.id), payload=cls.convert_payload(model.payload) if model.payload is not None else None, score=model.score, - vectors=cls.convert_vector_struct(model.vector) if model.vector is not None else None, + vectors=cls.convert_vector_struct_output(model.vector) + if model.vector is not None + else None, version=model.version, shard_key=cls.convert_shard_key(model.shard_key) if model.shard_key else None, order_value=cls.convert_order_value(model.order_value) if model.order_value else None, @@ -2416,6 +2557,13 @@ def convert_sparse_vector_to_vector(cls, model: rest.SparseVector) -> grpc.Vecto indices=grpc.SparseIndices(data=model.indices), ) + @classmethod + def convert_sparse_vector_to_vector_output(cls, model: rest.SparseVector) -> grpc.VectorOutput: + return grpc.VectorOutput( + data=model.values, + indices=grpc.SparseIndices(data=model.indices), + ) + @classmethod def convert_target_vector(cls, model: rest.RecommendExample) -> grpc.TargetVector: return grpc.TargetVector(single=cls.convert_recommend_example(model)) @@ -2519,7 +2667,7 @@ def convert_direction(cls, model: rest.Direction) -> grpc.Direction: return grpc.Direction.Asc if model == rest.Direction.DESC: return grpc.Direction.Desc - raise ValueError(f"invalid Direction model: {model}") + raise ValueError(f"invalid Direction model: {model}") # pragma: no cover @classmethod def convert_order_by(cls, model: rest.OrderBy) -> grpc.OrderBy: @@ -2534,15 +2682,13 @@ def convert_order_by(cls, model: rest.OrderBy) -> grpc.OrderBy: ) @classmethod - def convert_order_by_interface( - cls, model: rest.OrderByInterface - ) -> grpc.OrderBy: # pragma: no cover + def convert_order_by_interface(cls, model: rest.OrderByInterface) -> grpc.OrderBy: # using no cover because there is no OrderByInterface in grpc if isinstance(model, str): return grpc.OrderBy(key=model) if isinstance(model, rest.OrderBy): return cls.convert_order_by(model) - raise ValueError(f"invalid OrderByInterface model: {model}") + raise ValueError(f"invalid OrderByInterface model: {model}") # pragma: no cover @classmethod def convert_facet_value(cls, model: rest.FacetValue) -> grpc.FacetValue: @@ -2551,7 +2697,7 @@ def convert_facet_value(cls, model: rest.FacetValue) -> grpc.FacetValue: if isinstance(model, int): return grpc.FacetValue(integer_value=model) - raise ValueError(f"invalid FacetValue model: {model}") + raise ValueError(f"invalid FacetValue model: {model}") # pragma: no cover @classmethod def convert_facet_value_hit(cls, model: rest.FacetValueHit) -> grpc.FacetHit: @@ -2565,7 +2711,9 @@ def convert_record(cls, model: rest.Record) -> grpc.RetrievedPoint: return grpc.RetrievedPoint( id=cls.convert_extended_point_id(model.id), payload=cls.convert_payload(model.payload), - vectors=cls.convert_vector_struct(model.vector) if model.vector is not None else None, + vectors=cls.convert_vector_struct_output(model.vector) + if model.vector is not None + else None, shard_key=cls.convert_shard_key(model.shard_key) if model.shard_key else None, order_value=cls.convert_order_value(model.order_value) if model.order_value else None, ) @@ -2678,10 +2826,51 @@ def convert_vector(vector: Union[List[float], List[List[float]]]) -> grpc.Vector vectors.update({key: convert_vector(val)}) elif isinstance(val, rest.SparseVector): vectors.update({key: cls.convert_sparse_vector_to_vector(val)}) + elif isinstance(val, rest.Document): + vectors.update({key: grpc.Vector(document=cls.convert_document(val))}) + elif isinstance(val, rest.Image): + vectors.update({key: grpc.Vector(image=cls.convert_image(val))}) + elif isinstance(val, rest.InferenceObject): + vectors.update({key: grpc.Vector(object=cls.convert_inference_object(val))}) return grpc.Vectors(vectors=grpc.NamedVectors(vectors=vectors)) + elif isinstance(model, rest.Document): + return grpc.Vectors(vector=grpc.Vector(document=cls.convert_document(model))) + elif isinstance(model, rest.Image): + return grpc.Vectors(vector=grpc.Vector(image=cls.convert_image(model))) + elif isinstance(model, rest.InferenceObject): + return grpc.Vectors(vector=grpc.Vector(object=cls.convert_inference_object(model))) else: raise ValueError(f"invalid VectorStruct model: {model}") # pragma: no cover + @classmethod + def convert_vector_struct_output(cls, model: rest.VectorStructOutput) -> grpc.VectorsOutput: + def convert_vector(vector: Union[List[float], List[List[float]]]) -> grpc.VectorOutput: + if len(vector) != 0 and isinstance( + vector[0], list + ): # we can't say whether it is an empty dense or multi-dense vector + return grpc.VectorOutput( + data=[ + inner_vector + for multi_vector in vector + for inner_vector in multi_vector # type: ignore + ], + vectors_count=len(vector), + ) + return grpc.VectorOutput(data=vector) + + if isinstance(model, list): + return grpc.VectorsOutput(vector=convert_vector(model)) + elif isinstance(model, dict): + vectors: Dict = {} + for key, val in model.items(): + if isinstance(val, list): + vectors.update({key: convert_vector(val)}) + elif isinstance(val, rest.SparseVector): + vectors.update({key: cls.convert_sparse_vector_to_vector_output(val)}) + return grpc.VectorsOutput(vectors=grpc.NamedVectorsOutput(vectors=vectors)) + else: + raise ValueError(f"invalid VectorStructOutput model: {model}") # pragma: no cover + @classmethod def convert_with_vectors(cls, model: rest.WithVector) -> grpc.WithVectorsSelector: if isinstance(model, bool): @@ -2733,6 +2922,24 @@ def convert_multi_dense_vector(cls, model: List[List[float]]) -> grpc.MultiDense vectors=[cls.convert_dense_vector(vector) for vector in model] ) + @classmethod + def convert_document(cls, model: rest.Document) -> grpc.Document: + return grpc.Document( + text=model.text, model=model.model, options=payload_to_grpc(model.options) + ) + + @classmethod + def convert_image(cls, model: rest.Image) -> grpc.Image: + return grpc.Image( + image=model.image, model=model.model, options=payload_to_grpc(model.options) + ) + + @classmethod + def convert_inference_object(cls, model: rest.InferenceObject) -> grpc.InferenceObject: + return grpc.InferenceObject( + object=model.object, model=model.model, options=payload_to_grpc(model.options) + ) + @classmethod def convert_vector_input(cls, model: rest.VectorInput) -> grpc.VectorInput: if isinstance(model, list): @@ -2745,6 +2952,12 @@ def convert_vector_input(cls, model: rest.VectorInput) -> grpc.VectorInput: return grpc.VectorInput(sparse=cls.convert_sparse_vector(model)) if isinstance(model, get_args_subscribed(rest.ExtendedPointId)): return grpc.VectorInput(id=cls.convert_extended_point_id(model)) + if isinstance(model, rest.Document): + return grpc.VectorInput(document=cls.convert_document(model)) + if isinstance(model, rest.Image): + return grpc.VectorInput(image=cls.convert_image(model)) + if isinstance(model, rest.InferenceObject): + return grpc.VectorInput(object=cls.convert_inference_object(model)) raise ValueError(f"invalid VectorInput model: {model}") # pragma: no cover @@ -2795,14 +3008,14 @@ def convert_fusion(cls, model: rest.Fusion) -> grpc.Fusion: if model == rest.Fusion.DBSF: return grpc.Fusion.DBSF - raise ValueError(f"invalid Fusion model: {model}") + raise ValueError(f"invalid Fusion model: {model}") # pragma: no cover @classmethod def convert_sample(cls, model: rest.Sample) -> grpc.Sample: if model == rest.Sample.RANDOM: return grpc.Sample.Random - raise ValueError(f"invalid Sample model: {model}") + raise ValueError(f"invalid Sample model: {model}") # pragma: no cover @classmethod def convert_query(cls, model: rest.Query) -> grpc.Query: @@ -3562,7 +3775,7 @@ def convert_modifier(cls, model: rest.Modifier) -> grpc.Modifier: elif model == rest.Modifier.NONE: return getattr(grpc.Modifier, "None") else: - raise ValueError(f"invalid Modifier model: {model}") + raise ValueError(f"invalid Modifier model: {model}") # pragma: no cover @classmethod def convert_sparse_vector_params( diff --git a/qdrant_client/grpc/points_pb2.py b/qdrant_client/grpc/points_pb2.py index d96a9efa..bd8ff4dc 100644 --- a/qdrant_client/grpc/points_pb2.py +++ b/qdrant_client/grpc/points_pb2.py @@ -18,7 +18,7 @@ from . import json_with_int_pb2 as json__with__int__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cpoints.proto\x12\x06qdrant\x1a\x11\x63ollections.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x13json_with_int.proto\"8\n\rWriteOrdering\x12\'\n\x04type\x18\x01 \x01(\x0e\x32\x19.qdrant.WriteOrderingType\"Y\n\x0fReadConsistency\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1b.qdrant.ReadConsistencyTypeH\x00\x12\x10\n\x06\x66\x61\x63tor\x18\x02 \x01(\x04H\x00\x42\x07\n\x05value\"<\n\x07PointId\x12\r\n\x03num\x18\x01 \x01(\x04H\x00\x12\x0e\n\x04uuid\x18\x02 \x01(\tH\x00\x42\x12\n\x10point_id_options\"\x1d\n\rSparseIndices\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\r\"}\n\x06Vector\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\x12+\n\x07indices\x18\x02 \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x00\x88\x01\x01\x12\x1a\n\rvectors_count\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\n\n\x08_indicesB\x10\n\x0e_vectors_count\"\x1b\n\x0b\x44\x65nseVector\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\"/\n\x0cSparseVector\x12\x0e\n\x06values\x18\x01 \x03(\x02\x12\x0f\n\x07indices\x18\x02 \x03(\r\"8\n\x10MultiDenseVector\x12$\n\x07vectors\x18\x01 \x03(\x0b\x32\x13.qdrant.DenseVector\"\xb6\x01\n\x0bVectorInput\x12\x1d\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x12$\n\x05\x64\x65nse\x18\x02 \x01(\x0b\x32\x13.qdrant.DenseVectorH\x00\x12&\n\x06sparse\x18\x03 \x01(\x0b\x32\x14.qdrant.SparseVectorH\x00\x12/\n\x0bmulti_dense\x18\x04 \x01(\x0b\x32\x18.qdrant.MultiDenseVectorH\x00\x42\t\n\x07variant\"8\n\x10ShardKeySelector\x12$\n\nshard_keys\x18\x01 \x03(\x0b\x32\x10.qdrant.ShardKey\"\xf5\x01\n\x0cUpsertPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12#\n\x06points\x18\x03 \x03(\x0b\x32\x13.qdrant.PointStruct\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\xf8\x01\n\x0c\x44\x65letePoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12&\n\x06points\x18\x03 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\x85\x03\n\tGetPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x1c\n\x03ids\x18\x02 \x03(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x0cwith_payload\x18\x04 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12\x36\n\x0cwith_vectors\x18\x05 \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x00\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x06 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x07 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x12\x14\n\x07timeout\x18\x08 \x01(\x04H\x03\x88\x01\x01\x42\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\n\n\x08_timeoutJ\x04\x08\x03\x10\x04\"\xfc\x01\n\x12UpdatePointVectors\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12$\n\x06points\x18\x03 \x03(\x0b\x32\x14.qdrant.PointVectors\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"M\n\x0cPointVectors\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12 \n\x07vectors\x18\x02 \x01(\x0b\x32\x0f.qdrant.Vectors\"\xb1\x02\n\x12\x44\x65letePointVectors\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12/\n\x0fpoints_selector\x18\x03 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12(\n\x07vectors\x18\x04 \x01(\x0b\x32\x17.qdrant.VectorsSelector\x12,\n\x08ordering\x18\x05 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x06 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\xb5\x03\n\x10SetPayloadPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x36\n\x07payload\x18\x03 \x03(\x0b\x32%.qdrant.SetPayloadPoints.PayloadEntry\x12\x34\n\x0fpoints_selector\x18\x05 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x01\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x02\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x07 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x03\x88\x01\x01\x12\x10\n\x03key\x18\x08 \x01(\tH\x04\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x07\n\x05_waitB\x12\n\x10_points_selectorB\x0b\n\t_orderingB\x15\n\x13_shard_key_selectorB\x06\n\x04_keyJ\x04\x08\x04\x10\x05\"\xb5\x02\n\x13\x44\x65letePayloadPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x03 \x03(\t\x12\x34\n\x0fpoints_selector\x18\x05 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x01\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x02\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x07 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x03\x88\x01\x01\x42\x07\n\x05_waitB\x12\n\x10_points_selectorB\x0b\n\t_orderingB\x15\n\x13_shard_key_selectorJ\x04\x08\x04\x10\x05\"\xfe\x01\n\x12\x43learPayloadPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12&\n\x06points\x18\x03 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\xaf\x02\n\x1a\x43reateFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12*\n\nfield_type\x18\x04 \x01(\x0e\x32\x11.qdrant.FieldTypeH\x01\x88\x01\x01\x12;\n\x12\x66ield_index_params\x18\x05 \x01(\x0b\x32\x1a.qdrant.PayloadIndexParamsH\x02\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x03\x88\x01\x01\x42\x07\n\x05_waitB\r\n\x0b_field_typeB\x15\n\x13_field_index_paramsB\x0b\n\t_ordering\"\xa0\x01\n\x1a\x44\x65leteFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_ordering\"(\n\x16PayloadIncludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"(\n\x16PayloadExcludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"\xa1\x01\n\x13WithPayloadSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12\x31\n\x07include\x18\x02 \x01(\x0b\x32\x1e.qdrant.PayloadIncludeSelectorH\x00\x12\x31\n\x07\x65xclude\x18\x03 \x01(\x0b\x32\x1e.qdrant.PayloadExcludeSelectorH\x00\x42\x12\n\x10selector_options\"\x82\x01\n\x0cNamedVectors\x12\x32\n\x07vectors\x18\x01 \x03(\x0b\x32!.qdrant.NamedVectors.VectorsEntry\x1a>\n\x0cVectorsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.qdrant.Vector:\x02\x38\x01\"g\n\x07Vectors\x12 \n\x06vector\x18\x01 \x01(\x0b\x32\x0e.qdrant.VectorH\x00\x12\'\n\x07vectors\x18\x02 \x01(\x0b\x32\x14.qdrant.NamedVectorsH\x00\x42\x11\n\x0fvectors_options\" \n\x0fVectorsSelector\x12\r\n\x05names\x18\x01 \x03(\t\"g\n\x13WithVectorsSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12*\n\x07include\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelectorH\x00\x42\x12\n\x10selector_options\"\x88\x01\n\x18QuantizationSearchParams\x12\x13\n\x06ignore\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07rescore\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x19\n\x0coversampling\x18\x03 \x01(\x01H\x02\x88\x01\x01\x42\t\n\x07_ignoreB\n\n\x08_rescoreB\x0f\n\r_oversampling\"\xc8\x01\n\x0cSearchParams\x12\x14\n\x07hnsw_ef\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\x05\x65xact\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12;\n\x0cquantization\x18\x03 \x01(\x0b\x32 .qdrant.QuantizationSearchParamsH\x02\x88\x01\x01\x12\x19\n\x0cindexed_only\x18\x04 \x01(\x08H\x03\x88\x01\x01\x42\n\n\x08_hnsw_efB\x08\n\x06_exactB\x0f\n\r_quantizationB\x0f\n\r_indexed_only\"\x92\x05\n\x0cSearchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\x1e\n\x06\x66ilter\x18\x03 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x04 \x01(\x04\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x07 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\x08 \x01(\x02H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\t \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0bvector_name\x18\n \x01(\tH\x02\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\x0b \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x03\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\r \x01(\x04H\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x0e \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x12\x32\n\x0esparse_indices\x18\x0f \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x07\x88\x01\x01\x42\x12\n\x10_score_thresholdB\t\n\x07_offsetB\x0e\n\x0c_vector_nameB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selectorB\x11\n\x0f_sparse_indicesJ\x04\x08\x05\x10\x06\"\xc8\x01\n\x11SearchBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12+\n\rsearch_points\x18\x02 \x03(\x0b\x32\x14.qdrant.SearchPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\xb2\x01\n\nWithLookup\x12\x12\n\ncollection\x18\x01 \x01(\t\x12\x36\n\x0cwith_payload\x18\x02 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelectorH\x00\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\x03 \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x01\x88\x01\x01\x42\x0f\n\r_with_payloadB\x0f\n\r_with_vectors\"\xd5\x05\n\x11SearchPointGroups\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\x1e\n\x06\x66ilter\x18\x03 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x04 \x01(\r\x12\x31\n\x0cwith_payload\x18\x05 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x06 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\x07 \x01(\x02H\x00\x88\x01\x01\x12\x18\n\x0bvector_name\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\t \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x10\n\x08group_by\x18\n \x01(\t\x12\x12\n\ngroup_size\x18\x0b \x01(\r\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x03\x88\x01\x01\x12,\n\x0bwith_lookup\x18\r \x01(\x0b\x32\x12.qdrant.WithLookupH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x0e \x01(\x04H\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x0f \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x12\x32\n\x0esparse_indices\x18\x10 \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x07\x88\x01\x01\x42\x12\n\x10_score_thresholdB\x0e\n\x0c_vector_nameB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\x0e\n\x0c_with_lookupB\n\n\x08_timeoutB\x15\n\x13_shard_key_selectorB\x11\n\x0f_sparse_indices\"}\n\tStartFrom\x12\x0f\n\x05\x66loat\x18\x01 \x01(\x01H\x00\x12\x11\n\x07integer\x18\x02 \x01(\x03H\x00\x12/\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x12\n\x08\x64\x61tetime\x18\x04 \x01(\tH\x00\x42\x07\n\x05value\"\x8a\x01\n\x07OrderBy\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\tdirection\x18\x02 \x01(\x0e\x32\x11.qdrant.DirectionH\x00\x88\x01\x01\x12*\n\nstart_from\x18\x03 \x01(\x0b\x32\x11.qdrant.StartFromH\x01\x88\x01\x01\x42\x0c\n\n_directionB\r\n\x0b_start_from\"\x8e\x04\n\x0cScrollPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x1e\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.Filter\x12$\n\x06offset\x18\x03 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12\x36\n\x0cwith_vectors\x18\x07 \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x08 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x03\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\t \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x04\x88\x01\x01\x12&\n\x08order_by\x18\n \x01(\x0b\x32\x0f.qdrant.OrderByH\x05\x88\x01\x01\x12\x14\n\x07timeout\x18\x0b \x01(\x04H\x06\x88\x01\x01\x42\t\n\x07_offsetB\x08\n\x06_limitB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\x0b\n\t_order_byB\n\n\x08_timeoutJ\x04\x08\x05\x10\x06\"\xa5\x01\n\x0eLookupLocation\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x18\n\x0bvector_name\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x42\x0e\n\x0c_vector_nameB\x15\n\x13_shard_key_selector\"\xcd\x06\n\x0fRecommendPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12!\n\x08positive\x18\x02 \x03(\x0b\x32\x0f.qdrant.PointId\x12!\n\x08negative\x18\x03 \x03(\x0b\x32\x0f.qdrant.PointId\x12\x1e\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x05 \x01(\x04\x12\x31\n\x0cwith_payload\x18\x07 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x08 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\t \x01(\x02H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\n \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05using\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\x0c \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x03\x88\x01\x01\x12\x30\n\x0blookup_from\x18\r \x01(\x0b\x32\x16.qdrant.LookupLocationH\x04\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0e \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x05\x88\x01\x01\x12\x30\n\x08strategy\x18\x10 \x01(\x0e\x32\x19.qdrant.RecommendStrategyH\x06\x88\x01\x01\x12(\n\x10positive_vectors\x18\x11 \x03(\x0b\x32\x0e.qdrant.Vector\x12(\n\x10negative_vectors\x18\x12 \x03(\x0b\x32\x0e.qdrant.Vector\x12\x14\n\x07timeout\x18\x13 \x01(\x04H\x07\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x14 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x08\x88\x01\x01\x42\x12\n\x10_score_thresholdB\t\n\x07_offsetB\x08\n\x06_usingB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x13\n\x11_read_consistencyB\x0b\n\t_strategyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selectorJ\x04\x08\x06\x10\x07\"\xd1\x01\n\x14RecommendBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x31\n\x10recommend_points\x18\x02 \x03(\x0b\x32\x17.qdrant.RecommendPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\x90\x07\n\x14RecommendPointGroups\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12!\n\x08positive\x18\x02 \x03(\x0b\x32\x0f.qdrant.PointId\x12!\n\x08negative\x18\x03 \x03(\x0b\x32\x0f.qdrant.PointId\x12\x1e\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x05 \x01(\r\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x07 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\x08 \x01(\x02H\x00\x88\x01\x01\x12\x12\n\x05using\x18\t \x01(\tH\x01\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\n \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x0b \x01(\x0b\x32\x16.qdrant.LookupLocationH\x03\x88\x01\x01\x12\x10\n\x08group_by\x18\x0c \x01(\t\x12\x12\n\ngroup_size\x18\r \x01(\r\x12\x36\n\x10read_consistency\x18\x0e \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12,\n\x0bwith_lookup\x18\x0f \x01(\x0b\x32\x12.qdrant.WithLookupH\x05\x88\x01\x01\x12\x30\n\x08strategy\x18\x11 \x01(\x0e\x32\x19.qdrant.RecommendStrategyH\x06\x88\x01\x01\x12(\n\x10positive_vectors\x18\x12 \x03(\x0b\x32\x0e.qdrant.Vector\x12(\n\x10negative_vectors\x18\x13 \x03(\x0b\x32\x0e.qdrant.Vector\x12\x14\n\x07timeout\x18\x14 \x01(\x04H\x07\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x15 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x08\x88\x01\x01\x42\x12\n\x10_score_thresholdB\x08\n\x06_usingB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x13\n\x11_read_consistencyB\x0e\n\x0c_with_lookupB\x0b\n\t_strategyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selector\"A\n\x0cTargetVector\x12\'\n\x06single\x18\x01 \x01(\x0b\x32\x15.qdrant.VectorExampleH\x00\x42\x08\n\x06target\"[\n\rVectorExample\x12\x1d\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x12 \n\x06vector\x18\x02 \x01(\x0b\x32\x0e.qdrant.VectorH\x00\x42\t\n\x07\x65xample\"f\n\x12\x43ontextExamplePair\x12\'\n\x08positive\x18\x01 \x01(\x0b\x32\x15.qdrant.VectorExample\x12\'\n\x08negative\x18\x02 \x01(\x0b\x32\x15.qdrant.VectorExample\"\x8e\x05\n\x0e\x44iscoverPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12$\n\x06target\x18\x02 \x01(\x0b\x32\x14.qdrant.TargetVector\x12+\n\x07\x63ontext\x18\x03 \x03(\x0b\x32\x1a.qdrant.ContextExamplePair\x12\x1e\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x05 \x01(\x04\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x07 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x13\n\x06offset\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\x05using\x18\t \x01(\tH\x01\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\n \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x0b \x01(\x0b\x32\x16.qdrant.LookupLocationH\x03\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\r \x01(\x04H\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x0e \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x42\t\n\x07_offsetB\x08\n\x06_usingB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x13\n\x11_read_consistencyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selector\"\xce\x01\n\x13\x44iscoverBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12/\n\x0f\x64iscover_points\x18\x02 \x03(\x0b\x32\x16.qdrant.DiscoverPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\xa5\x02\n\x0b\x43ountPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x1e\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.Filter\x12\x12\n\x05\x65xact\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x04 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x03\x88\x01\x01\x42\x08\n\x06_exactB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\n\n\x08_timeout\"\x9d\x01\n\x0eRecommendInput\x12%\n\x08positive\x18\x01 \x03(\x0b\x32\x13.qdrant.VectorInput\x12%\n\x08negative\x18\x02 \x03(\x0b\x32\x13.qdrant.VectorInput\x12\x30\n\x08strategy\x18\x03 \x01(\x0e\x32\x19.qdrant.RecommendStrategyH\x00\x88\x01\x01\x42\x0b\n\t_strategy\"`\n\x10\x43ontextInputPair\x12%\n\x08positive\x18\x01 \x01(\x0b\x32\x13.qdrant.VectorInput\x12%\n\x08negative\x18\x02 \x01(\x0b\x32\x13.qdrant.VectorInput\"[\n\rDiscoverInput\x12#\n\x06target\x18\x01 \x01(\x0b\x32\x13.qdrant.VectorInput\x12%\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x14.qdrant.ContextInput\"7\n\x0c\x43ontextInput\x12\'\n\x05pairs\x18\x01 \x03(\x0b\x32\x18.qdrant.ContextInputPair\"\xa4\x02\n\x05Query\x12&\n\x07nearest\x18\x01 \x01(\x0b\x32\x13.qdrant.VectorInputH\x00\x12+\n\trecommend\x18\x02 \x01(\x0b\x32\x16.qdrant.RecommendInputH\x00\x12)\n\x08\x64iscover\x18\x03 \x01(\x0b\x32\x15.qdrant.DiscoverInputH\x00\x12\'\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x14.qdrant.ContextInputH\x00\x12#\n\x08order_by\x18\x05 \x01(\x0b\x32\x0f.qdrant.OrderByH\x00\x12 \n\x06\x66usion\x18\x06 \x01(\x0e\x32\x0e.qdrant.FusionH\x00\x12 \n\x06sample\x18\x07 \x01(\x0e\x32\x0e.qdrant.SampleH\x00\x42\t\n\x07variant\"\xfb\x02\n\rPrefetchQuery\x12\'\n\x08prefetch\x18\x01 \x03(\x0b\x32\x15.qdrant.PrefetchQuery\x12!\n\x05query\x18\x02 \x01(\x0b\x32\r.qdrant.QueryH\x00\x88\x01\x01\x12\x12\n\x05using\x18\x03 \x01(\tH\x01\x88\x01\x01\x12#\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.FilterH\x02\x88\x01\x01\x12)\n\x06params\x18\x05 \x01(\x0b\x32\x14.qdrant.SearchParamsH\x03\x88\x01\x01\x12\x1c\n\x0fscore_threshold\x18\x06 \x01(\x02H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\x04H\x05\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x08 \x01(\x0b\x32\x16.qdrant.LookupLocationH\x06\x88\x01\x01\x42\x08\n\x06_queryB\x08\n\x06_usingB\t\n\x07_filterB\t\n\x07_paramsB\x12\n\x10_score_thresholdB\x08\n\x06_limitB\x0e\n\x0c_lookup_from\"\x85\x06\n\x0bQueryPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x08prefetch\x18\x02 \x03(\x0b\x32\x15.qdrant.PrefetchQuery\x12!\n\x05query\x18\x03 \x01(\x0b\x32\r.qdrant.QueryH\x00\x88\x01\x01\x12\x12\n\x05using\x18\x04 \x01(\tH\x01\x88\x01\x01\x12#\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x0e.qdrant.FilterH\x02\x88\x01\x01\x12)\n\x06params\x18\x06 \x01(\x0b\x32\x14.qdrant.SearchParamsH\x03\x88\x01\x01\x12\x1c\n\x0fscore_threshold\x18\x07 \x01(\x02H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x08 \x01(\x04H\x05\x88\x01\x01\x12\x13\n\x06offset\x18\t \x01(\x04H\x06\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\n \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x07\x88\x01\x01\x12\x36\n\x0cwith_payload\x18\x0b \x01(\x0b\x32\x1b.qdrant.WithPayloadSelectorH\x08\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\t\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\r \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\n\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x0e \x01(\x0b\x32\x16.qdrant.LookupLocationH\x0b\x88\x01\x01\x12\x14\n\x07timeout\x18\x0f \x01(\x04H\x0c\x88\x01\x01\x42\x08\n\x06_queryB\x08\n\x06_usingB\t\n\x07_filterB\t\n\x07_paramsB\x12\n\x10_score_thresholdB\x08\n\x06_limitB\t\n\x07_offsetB\x0f\n\r_with_vectorsB\x0f\n\r_with_payloadB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\x0e\n\x0c_lookup_fromB\n\n\x08_timeout\"\xc5\x01\n\x10QueryBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12)\n\x0cquery_points\x18\x02 \x03(\x0b\x32\x13.qdrant.QueryPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\xcc\x06\n\x10QueryPointGroups\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x08prefetch\x18\x02 \x03(\x0b\x32\x15.qdrant.PrefetchQuery\x12!\n\x05query\x18\x03 \x01(\x0b\x32\r.qdrant.QueryH\x00\x88\x01\x01\x12\x12\n\x05using\x18\x04 \x01(\tH\x01\x88\x01\x01\x12#\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x0e.qdrant.FilterH\x02\x88\x01\x01\x12)\n\x06params\x18\x06 \x01(\x0b\x32\x14.qdrant.SearchParamsH\x03\x88\x01\x01\x12\x1c\n\x0fscore_threshold\x18\x07 \x01(\x02H\x04\x88\x01\x01\x12\x31\n\x0cwith_payload\x18\x08 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12\x36\n\x0cwith_vectors\x18\t \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x05\x88\x01\x01\x12\x30\n\x0blookup_from\x18\n \x01(\x0b\x32\x16.qdrant.LookupLocationH\x06\x88\x01\x01\x12\x12\n\x05limit\x18\x0b \x01(\x04H\x07\x88\x01\x01\x12\x17\n\ngroup_size\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x10\n\x08group_by\x18\r \x01(\t\x12\x36\n\x10read_consistency\x18\x0e \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\t\x88\x01\x01\x12,\n\x0bwith_lookup\x18\x0f \x01(\x0b\x32\x12.qdrant.WithLookupH\n\x88\x01\x01\x12\x14\n\x07timeout\x18\x10 \x01(\x04H\x0b\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x11 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x0c\x88\x01\x01\x42\x08\n\x06_queryB\x08\n\x06_usingB\t\n\x07_filterB\t\n\x07_paramsB\x12\n\x10_score_thresholdB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x08\n\x06_limitB\r\n\x0b_group_sizeB\x13\n\x11_read_consistencyB\x0e\n\x0c_with_lookupB\n\n\x08_timeoutB\x15\n\x13_shard_key_selector\"\xe0\x02\n\x0b\x46\x61\x63\x65tCounts\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x06\x66ilter\x18\x03 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05\x65xact\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x03\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x07 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x08 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x05\x88\x01\x01\x42\t\n\x07_filterB\x08\n\x06_limitB\x08\n\x06_exactB\n\n\x08_timeoutB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selector\"^\n\nFacetValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x17\n\rinteger_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\t\n\x07variant\"<\n\x08\x46\x61\x63\x65tHit\x12!\n\x05value\x18\x01 \x01(\x0b\x32\x12.qdrant.FacetValue\x12\r\n\x05\x63ount\x18\x02 \x01(\x04\"\xfa\x02\n\x12SearchMatrixPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12#\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x88\x01\x01\x12\x13\n\x06sample\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05using\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x07 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x08 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x42\t\n\x07_filterB\t\n\x07_sampleB\x08\n\x06_limitB\x08\n\x06_usingB\n\n\x08_timeoutB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selector\"<\n\x11SearchMatrixPairs\x12\'\n\x05pairs\x18\x01 \x03(\x0b\x32\x18.qdrant.SearchMatrixPair\"Y\n\x10SearchMatrixPair\x12\x1a\n\x01\x61\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x1a\n\x01\x62\x18\x02 \x01(\x0b\x32\x0f.qdrant.PointId\x12\r\n\x05score\x18\x03 \x01(\x02\"m\n\x13SearchMatrixOffsets\x12\x13\n\x0boffsets_row\x18\x01 \x03(\x04\x12\x13\n\x0boffsets_col\x18\x02 \x03(\x04\x12\x0e\n\x06scores\x18\x03 \x03(\x02\x12\x1c\n\x03ids\x18\x04 \x03(\x0b\x32\x0f.qdrant.PointId\"\x95\x12\n\x15PointsUpdateOperation\x12?\n\x06upsert\x18\x01 \x01(\x0b\x32-.qdrant.PointsUpdateOperation.PointStructListH\x00\x12\x37\n\x11\x64\x65lete_deprecated\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorB\x02\x18\x01H\x00\x12?\n\x0bset_payload\x18\x03 \x01(\x0b\x32(.qdrant.PointsUpdateOperation.SetPayloadH\x00\x12K\n\x11overwrite_payload\x18\x04 \x01(\x0b\x32..qdrant.PointsUpdateOperation.OverwritePayloadH\x00\x12\x45\n\x0e\x64\x65lete_payload\x18\x05 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.DeletePayloadH\x00\x12>\n\x18\x63lear_payload_deprecated\x18\x06 \x01(\x0b\x32\x16.qdrant.PointsSelectorB\x02\x18\x01H\x00\x12\x45\n\x0eupdate_vectors\x18\x07 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.UpdateVectorsH\x00\x12\x45\n\x0e\x64\x65lete_vectors\x18\x08 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.DeleteVectorsH\x00\x12\x43\n\rdelete_points\x18\t \x01(\x0b\x32*.qdrant.PointsUpdateOperation.DeletePointsH\x00\x12\x43\n\rclear_payload\x18\n \x01(\x0b\x32*.qdrant.PointsUpdateOperation.ClearPayloadH\x00\x1a\x88\x01\n\x0fPointStructList\x12#\n\x06points\x18\x01 \x03(\x0b\x32\x13.qdrant.PointStruct\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\xc9\x02\n\nSetPayload\x12\x46\n\x07payload\x18\x01 \x03(\x0b\x32\x35.qdrant.PointsUpdateOperation.SetPayload.PayloadEntry\x12\x34\n\x0fpoints_selector\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x12\x10\n\x03key\x18\x04 \x01(\tH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x12\n\x10_points_selectorB\x15\n\x13_shard_key_selectorB\x06\n\x04_key\x1a\xd5\x02\n\x10OverwritePayload\x12L\n\x07payload\x18\x01 \x03(\x0b\x32;.qdrant.PointsUpdateOperation.OverwritePayload.PayloadEntry\x12\x34\n\x0fpoints_selector\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x12\x10\n\x03key\x18\x04 \x01(\tH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x12\n\x10_points_selectorB\x15\n\x13_shard_key_selectorB\x06\n\x04_key\x1a\xb9\x01\n\rDeletePayload\x12\x0c\n\x04keys\x18\x01 \x03(\t\x12\x34\n\x0fpoints_selector\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x42\x12\n\x10_points_selectorB\x15\n\x13_shard_key_selector\x1a\x87\x01\n\rUpdateVectors\x12$\n\x06points\x18\x01 \x03(\x0b\x32\x14.qdrant.PointVectors\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\xbc\x01\n\rDeleteVectors\x12/\n\x0fpoints_selector\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12(\n\x07vectors\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelector\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\x88\x01\n\x0c\x44\x65letePoints\x12&\n\x06points\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\x88\x01\n\x0c\x43learPayload\x12&\n\x06points\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selectorB\x0b\n\toperation\"\xb6\x01\n\x11UpdateBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x31\n\noperations\x18\x03 \x03(\x0b\x32\x1d.qdrant.PointsUpdateOperation\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_ordering\"M\n\x17PointsOperationResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.UpdateResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"`\n\x0cUpdateResult\x12\x19\n\x0coperation_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12$\n\x06status\x18\x02 \x01(\x0e\x32\x14.qdrant.UpdateStatusB\x0f\n\r_operation_id\"7\n\nOrderValue\x12\r\n\x03int\x18\x01 \x01(\x03H\x00\x12\x0f\n\x05\x66loat\x18\x02 \x01(\x01H\x00\x42\t\n\x07variant\"\xeb\x02\n\x0bScoredPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x07payload\x18\x02 \x03(\x0b\x32 .qdrant.ScoredPoint.PayloadEntry\x12\r\n\x05score\x18\x03 \x01(\x02\x12\x0f\n\x07version\x18\x05 \x01(\x04\x12%\n\x07vectors\x18\x06 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\x12(\n\tshard_key\x18\x07 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x01\x88\x01\x01\x12,\n\x0border_value\x18\x08 \x01(\x0b\x32\x12.qdrant.OrderValueH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\n\n\x08_vectorsB\x0c\n\n_shard_keyB\x0e\n\x0c_order_valueJ\x04\x08\x04\x10\x05\"\\\n\x07GroupId\x12\x18\n\x0eunsigned_value\x18\x01 \x01(\x04H\x00\x12\x17\n\rinteger_value\x18\x02 \x01(\x03H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x42\x06\n\x04kind\"t\n\nPointGroup\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.GroupId\x12!\n\x04hits\x18\x02 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12&\n\x06lookup\x18\x03 \x01(\x0b\x32\x16.qdrant.RetrievedPoint\"2\n\x0cGroupsResult\x12\"\n\x06groups\x18\x01 \x03(\x0b\x32\x12.qdrant.PointGroup\"C\n\x0eSearchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"B\n\rQueryResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"G\n\x12QueryBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"I\n\x13QueryGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"2\n\x0b\x42\x61tchResult\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\"H\n\x13SearchBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"J\n\x14SearchGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"B\n\rCountResponse\x12#\n\x06result\x18\x01 \x01(\x0b\x32\x13.qdrant.CountResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\x8b\x01\n\x0eScrollResponse\x12.\n\x10next_page_offset\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x88\x01\x01\x12&\n\x06result\x18\x02 \x03(\x0b\x32\x16.qdrant.RetrievedPoint\x12\x0c\n\x04time\x18\x03 \x01(\x01\x42\x13\n\x11_next_page_offset\"\x1c\n\x0b\x43ountResult\x12\r\n\x05\x63ount\x18\x01 \x01(\x04\"\xd1\x02\n\x0eRetrievedPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x34\n\x07payload\x18\x02 \x03(\x0b\x32#.qdrant.RetrievedPoint.PayloadEntry\x12%\n\x07vectors\x18\x04 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\x12(\n\tshard_key\x18\x05 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x01\x88\x01\x01\x12,\n\x0border_value\x18\x06 \x01(\x0b\x32\x12.qdrant.OrderValueH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\n\n\x08_vectorsB\x0c\n\n_shard_keyB\x0e\n\x0c_order_valueJ\x04\x08\x03\x10\x04\"C\n\x0bGetResponse\x12&\n\x06result\x18\x01 \x03(\x0b\x32\x16.qdrant.RetrievedPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"F\n\x11RecommendResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"K\n\x16RecommendBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"E\n\x10\x44iscoverResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"J\n\x15\x44iscoverBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"M\n\x17RecommendGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"I\n\x13UpdateBatchResponse\x12$\n\x06result\x18\x01 \x03(\x0b\x32\x14.qdrant.UpdateResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"=\n\rFacetResponse\x12\x1e\n\x04hits\x18\x01 \x03(\x0b\x32\x10.qdrant.FacetHit\x12\x0c\n\x04time\x18\x02 \x01(\x01\"T\n\x19SearchMatrixPairsResponse\x12)\n\x06result\x18\x01 \x01(\x0b\x32\x19.qdrant.SearchMatrixPairs\x12\x0c\n\x04time\x18\x02 \x01(\x01\"X\n\x1bSearchMatrixOffsetsResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.qdrant.SearchMatrixOffsets\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\xac\x01\n\x06\x46ilter\x12!\n\x06should\x18\x01 \x03(\x0b\x32\x11.qdrant.Condition\x12\x1f\n\x04must\x18\x02 \x03(\x0b\x32\x11.qdrant.Condition\x12#\n\x08must_not\x18\x03 \x03(\x0b\x32\x11.qdrant.Condition\x12*\n\nmin_should\x18\x04 \x01(\x0b\x32\x11.qdrant.MinShouldH\x00\x88\x01\x01\x42\r\n\x0b_min_should\"E\n\tMinShould\x12%\n\nconditions\x18\x01 \x03(\x0b\x32\x11.qdrant.Condition\x12\x11\n\tmin_count\x18\x02 \x01(\x04\"\x99\x02\n\tCondition\x12\'\n\x05\x66ield\x18\x01 \x01(\x0b\x32\x16.qdrant.FieldConditionH\x00\x12,\n\x08is_empty\x18\x02 \x01(\x0b\x32\x18.qdrant.IsEmptyConditionH\x00\x12(\n\x06has_id\x18\x03 \x01(\x0b\x32\x16.qdrant.HasIdConditionH\x00\x12 \n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x12*\n\x07is_null\x18\x05 \x01(\x0b\x32\x17.qdrant.IsNullConditionH\x00\x12)\n\x06nested\x18\x06 \x01(\x0b\x32\x17.qdrant.NestedConditionH\x00\x42\x12\n\x10\x63ondition_one_of\"\x1f\n\x10IsEmptyCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1e\n\x0fIsNullCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\"1\n\x0eHasIdCondition\x12\x1f\n\x06has_id\x18\x01 \x03(\x0b\x32\x0f.qdrant.PointId\">\n\x0fNestedCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.Filter\"\xb5\x02\n\x0e\x46ieldCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05match\x18\x02 \x01(\x0b\x32\r.qdrant.Match\x12\x1c\n\x05range\x18\x03 \x01(\x0b\x32\r.qdrant.Range\x12\x30\n\x10geo_bounding_box\x18\x04 \x01(\x0b\x32\x16.qdrant.GeoBoundingBox\x12%\n\ngeo_radius\x18\x05 \x01(\x0b\x32\x11.qdrant.GeoRadius\x12)\n\x0cvalues_count\x18\x06 \x01(\x0b\x32\x13.qdrant.ValuesCount\x12\'\n\x0bgeo_polygon\x18\x07 \x01(\x0b\x32\x12.qdrant.GeoPolygon\x12-\n\x0e\x64\x61tetime_range\x18\x08 \x01(\x0b\x32\x15.qdrant.DatetimeRange\"\xa3\x02\n\x05Match\x12\x11\n\x07keyword\x18\x01 \x01(\tH\x00\x12\x11\n\x07integer\x18\x02 \x01(\x03H\x00\x12\x11\n\x07\x62oolean\x18\x03 \x01(\x08H\x00\x12\x0e\n\x04text\x18\x04 \x01(\tH\x00\x12+\n\x08keywords\x18\x05 \x01(\x0b\x32\x17.qdrant.RepeatedStringsH\x00\x12,\n\x08integers\x18\x06 \x01(\x0b\x32\x18.qdrant.RepeatedIntegersH\x00\x12\x33\n\x0f\x65xcept_integers\x18\x07 \x01(\x0b\x32\x18.qdrant.RepeatedIntegersH\x00\x12\x32\n\x0f\x65xcept_keywords\x18\x08 \x01(\x0b\x32\x17.qdrant.RepeatedStringsH\x00\x42\r\n\x0bmatch_value\"\"\n\x0fRepeatedStrings\x12\x0f\n\x07strings\x18\x01 \x03(\t\"$\n\x10RepeatedIntegers\x12\x10\n\x08integers\x18\x01 \x03(\x03\"k\n\x05Range\x12\x0f\n\x02lt\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x0f\n\x02gt\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12\x10\n\x03gte\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12\x10\n\x03lte\x18\x04 \x01(\x01H\x03\x88\x01\x01\x42\x05\n\x03_ltB\x05\n\x03_gtB\x06\n\x04_gteB\x06\n\x04_lte\"\xe3\x01\n\rDatetimeRange\x12+\n\x02lt\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12+\n\x02gt\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12,\n\x03gte\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02\x88\x01\x01\x12,\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03\x88\x01\x01\x42\x05\n\x03_ltB\x05\n\x03_gtB\x06\n\x04_gteB\x06\n\x04_lte\"\\\n\x0eGeoBoundingBox\x12\"\n\x08top_left\x18\x01 \x01(\x0b\x32\x10.qdrant.GeoPoint\x12&\n\x0c\x62ottom_right\x18\x02 \x01(\x0b\x32\x10.qdrant.GeoPoint\"=\n\tGeoRadius\x12 \n\x06\x63\x65nter\x18\x01 \x01(\x0b\x32\x10.qdrant.GeoPoint\x12\x0e\n\x06radius\x18\x02 \x01(\x02\"1\n\rGeoLineString\x12 \n\x06points\x18\x01 \x03(\x0b\x32\x10.qdrant.GeoPoint\"_\n\nGeoPolygon\x12\'\n\x08\x65xterior\x18\x01 \x01(\x0b\x32\x15.qdrant.GeoLineString\x12(\n\tinteriors\x18\x02 \x03(\x0b\x32\x15.qdrant.GeoLineString\"q\n\x0bValuesCount\x12\x0f\n\x02lt\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02gt\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x10\n\x03gte\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x10\n\x03lte\x18\x04 \x01(\x04H\x03\x88\x01\x01\x42\x05\n\x03_ltB\x05\n\x03_gtB\x06\n\x04_gteB\x06\n\x04_lte\"u\n\x0ePointsSelector\x12\'\n\x06points\x18\x01 \x01(\x0b\x32\x15.qdrant.PointsIdsListH\x00\x12 \n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x42\x18\n\x16points_selector_one_of\"-\n\rPointsIdsList\x12\x1c\n\x03ids\x18\x01 \x03(\x0b\x32\x0f.qdrant.PointId\"\xd5\x01\n\x0bPointStruct\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x07payload\x18\x03 \x03(\x0b\x32 .qdrant.PointStruct.PayloadEntry\x12%\n\x07vectors\x18\x04 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\n\n\x08_vectorsJ\x04\x08\x02\x10\x03\"$\n\x08GeoPoint\x12\x0b\n\x03lon\x18\x01 \x01(\x01\x12\x0b\n\x03lat\x18\x02 \x01(\x01*5\n\x11WriteOrderingType\x12\x08\n\x04Weak\x10\x00\x12\n\n\x06Medium\x10\x01\x12\n\n\x06Strong\x10\x02*8\n\x13ReadConsistencyType\x12\x07\n\x03\x41ll\x10\x00\x12\x0c\n\x08Majority\x10\x01\x12\n\n\x06Quorum\x10\x02*\xad\x01\n\tFieldType\x12\x14\n\x10\x46ieldTypeKeyword\x10\x00\x12\x14\n\x10\x46ieldTypeInteger\x10\x01\x12\x12\n\x0e\x46ieldTypeFloat\x10\x02\x12\x10\n\x0c\x46ieldTypeGeo\x10\x03\x12\x11\n\rFieldTypeText\x10\x04\x12\x11\n\rFieldTypeBool\x10\x05\x12\x15\n\x11\x46ieldTypeDatetime\x10\x06\x12\x11\n\rFieldTypeUuid\x10\x07*\x1e\n\tDirection\x12\x07\n\x03\x41sc\x10\x00\x12\x08\n\x04\x44\x65sc\x10\x01*5\n\x11RecommendStrategy\x12\x11\n\rAverageVector\x10\x00\x12\r\n\tBestScore\x10\x01*\x1b\n\x06\x46usion\x12\x07\n\x03RRF\x10\x00\x12\x08\n\x04\x44\x42SF\x10\x01*\x14\n\x06Sample\x12\n\n\x06Random\x10\x00*[\n\x0cUpdateStatus\x12\x17\n\x13UnknownUpdateStatus\x10\x00\x12\x10\n\x0c\x41\x63knowledged\x10\x01\x12\r\n\tCompleted\x10\x02\x12\x11\n\rClockRejected\x10\x03\x42\x15\xaa\x02\x12Qdrant.Client.Grpcb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cpoints.proto\x12\x06qdrant\x1a\x11\x63ollections.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x13json_with_int.proto\"8\n\rWriteOrdering\x12\'\n\x04type\x18\x01 \x01(\x0e\x32\x19.qdrant.WriteOrderingType\"Y\n\x0fReadConsistency\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1b.qdrant.ReadConsistencyTypeH\x00\x12\x10\n\x06\x66\x61\x63tor\x18\x02 \x01(\x04H\x00\x42\x07\n\x05value\"<\n\x07PointId\x12\r\n\x03num\x18\x01 \x01(\x04H\x00\x12\x0e\n\x04uuid\x18\x02 \x01(\tH\x00\x42\x12\n\x10point_id_options\"\x1d\n\rSparseIndices\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\r\"\xa5\x01\n\x08\x44ocument\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x12\n\x05model\x18\x03 \x01(\tH\x00\x88\x01\x01\x12.\n\x07options\x18\x04 \x03(\x0b\x32\x1d.qdrant.Document.OptionsEntry\x1a=\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x08\n\x06_model\"\xa0\x01\n\x05Image\x12\r\n\x05image\x18\x01 \x01(\t\x12\x12\n\x05model\x18\x02 \x01(\tH\x00\x88\x01\x01\x12+\n\x07options\x18\x03 \x03(\x0b\x32\x1a.qdrant.Image.OptionsEntry\x1a=\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x08\n\x06_model\"\xc4\x01\n\x0fInferenceObject\x12\x1d\n\x06object\x18\x01 \x01(\x0b\x32\r.qdrant.Value\x12\x12\n\x05model\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x35\n\x07options\x18\x03 \x03(\x0b\x32$.qdrant.InferenceObject.OptionsEntry\x1a=\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x08\n\x06_model\"\xf7\x02\n\x06Vector\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\x12+\n\x07indices\x18\x02 \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x01\x88\x01\x01\x12\x1a\n\rvectors_count\x18\x03 \x01(\rH\x02\x88\x01\x01\x12$\n\x05\x64\x65nse\x18\x65 \x01(\x0b\x32\x13.qdrant.DenseVectorH\x00\x12&\n\x06sparse\x18\x66 \x01(\x0b\x32\x14.qdrant.SparseVectorH\x00\x12/\n\x0bmulti_dense\x18g \x01(\x0b\x32\x18.qdrant.MultiDenseVectorH\x00\x12$\n\x08\x64ocument\x18h \x01(\x0b\x32\x10.qdrant.DocumentH\x00\x12\x1e\n\x05image\x18i \x01(\x0b\x32\r.qdrant.ImageH\x00\x12)\n\x06object\x18j \x01(\x0b\x32\x17.qdrant.InferenceObjectH\x00\x42\x08\n\x06vectorB\n\n\x08_indicesB\x10\n\x0e_vectors_count\"\x8c\x02\n\x0cVectorOutput\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\x12+\n\x07indices\x18\x02 \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x01\x88\x01\x01\x12\x1a\n\rvectors_count\x18\x03 \x01(\rH\x02\x88\x01\x01\x12$\n\x05\x64\x65nse\x18\x65 \x01(\x0b\x32\x13.qdrant.DenseVectorH\x00\x12&\n\x06sparse\x18\x66 \x01(\x0b\x32\x14.qdrant.SparseVectorH\x00\x12/\n\x0bmulti_dense\x18g \x01(\x0b\x32\x18.qdrant.MultiDenseVectorH\x00\x42\x08\n\x06vectorB\n\n\x08_indicesB\x10\n\x0e_vectors_count\"\x1b\n\x0b\x44\x65nseVector\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\"/\n\x0cSparseVector\x12\x0e\n\x06values\x18\x01 \x03(\x02\x12\x0f\n\x07indices\x18\x02 \x03(\r\"8\n\x10MultiDenseVector\x12$\n\x07vectors\x18\x01 \x03(\x0b\x32\x13.qdrant.DenseVector\"\xa7\x02\n\x0bVectorInput\x12\x1d\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x12$\n\x05\x64\x65nse\x18\x02 \x01(\x0b\x32\x13.qdrant.DenseVectorH\x00\x12&\n\x06sparse\x18\x03 \x01(\x0b\x32\x14.qdrant.SparseVectorH\x00\x12/\n\x0bmulti_dense\x18\x04 \x01(\x0b\x32\x18.qdrant.MultiDenseVectorH\x00\x12$\n\x08\x64ocument\x18\x05 \x01(\x0b\x32\x10.qdrant.DocumentH\x00\x12\x1e\n\x05image\x18\x06 \x01(\x0b\x32\r.qdrant.ImageH\x00\x12)\n\x06object\x18\x07 \x01(\x0b\x32\x17.qdrant.InferenceObjectH\x00\x42\t\n\x07variant\"8\n\x10ShardKeySelector\x12$\n\nshard_keys\x18\x01 \x03(\x0b\x32\x10.qdrant.ShardKey\"\xf5\x01\n\x0cUpsertPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12#\n\x06points\x18\x03 \x03(\x0b\x32\x13.qdrant.PointStruct\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\xf8\x01\n\x0c\x44\x65letePoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12&\n\x06points\x18\x03 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\x85\x03\n\tGetPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x1c\n\x03ids\x18\x02 \x03(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x0cwith_payload\x18\x04 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12\x36\n\x0cwith_vectors\x18\x05 \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x00\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x06 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x07 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x12\x14\n\x07timeout\x18\x08 \x01(\x04H\x03\x88\x01\x01\x42\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\n\n\x08_timeoutJ\x04\x08\x03\x10\x04\"\xfc\x01\n\x12UpdatePointVectors\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12$\n\x06points\x18\x03 \x03(\x0b\x32\x14.qdrant.PointVectors\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"M\n\x0cPointVectors\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12 \n\x07vectors\x18\x02 \x01(\x0b\x32\x0f.qdrant.Vectors\"\xb1\x02\n\x12\x44\x65letePointVectors\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12/\n\x0fpoints_selector\x18\x03 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12(\n\x07vectors\x18\x04 \x01(\x0b\x32\x17.qdrant.VectorsSelector\x12,\n\x08ordering\x18\x05 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x06 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\xb5\x03\n\x10SetPayloadPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x36\n\x07payload\x18\x03 \x03(\x0b\x32%.qdrant.SetPayloadPoints.PayloadEntry\x12\x34\n\x0fpoints_selector\x18\x05 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x01\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x02\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x07 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x03\x88\x01\x01\x12\x10\n\x03key\x18\x08 \x01(\tH\x04\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x07\n\x05_waitB\x12\n\x10_points_selectorB\x0b\n\t_orderingB\x15\n\x13_shard_key_selectorB\x06\n\x04_keyJ\x04\x08\x04\x10\x05\"\xb5\x02\n\x13\x44\x65letePayloadPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x0c\n\x04keys\x18\x03 \x03(\t\x12\x34\n\x0fpoints_selector\x18\x05 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x01\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x02\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x07 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x03\x88\x01\x01\x42\x07\n\x05_waitB\x12\n\x10_points_selectorB\x0b\n\t_orderingB\x15\n\x13_shard_key_selectorJ\x04\x08\x04\x10\x05\"\xfe\x01\n\x12\x43learPayloadPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12&\n\x06points\x18\x03 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_orderingB\x15\n\x13_shard_key_selector\"\xaf\x02\n\x1a\x43reateFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12*\n\nfield_type\x18\x04 \x01(\x0e\x32\x11.qdrant.FieldTypeH\x01\x88\x01\x01\x12;\n\x12\x66ield_index_params\x18\x05 \x01(\x0b\x32\x1a.qdrant.PayloadIndexParamsH\x02\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x03\x88\x01\x01\x42\x07\n\x05_waitB\r\n\x0b_field_typeB\x15\n\x13_field_index_paramsB\x0b\n\t_ordering\"\xa0\x01\n\x1a\x44\x65leteFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_ordering\"(\n\x16PayloadIncludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"(\n\x16PayloadExcludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"\xa1\x01\n\x13WithPayloadSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12\x31\n\x07include\x18\x02 \x01(\x0b\x32\x1e.qdrant.PayloadIncludeSelectorH\x00\x12\x31\n\x07\x65xclude\x18\x03 \x01(\x0b\x32\x1e.qdrant.PayloadExcludeSelectorH\x00\x42\x12\n\x10selector_options\"\x82\x01\n\x0cNamedVectors\x12\x32\n\x07vectors\x18\x01 \x03(\x0b\x32!.qdrant.NamedVectors.VectorsEntry\x1a>\n\x0cVectorsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.qdrant.Vector:\x02\x38\x01\"\x94\x01\n\x12NamedVectorsOutput\x12\x38\n\x07vectors\x18\x01 \x03(\x0b\x32\'.qdrant.NamedVectorsOutput.VectorsEntry\x1a\x44\n\x0cVectorsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.qdrant.VectorOutput:\x02\x38\x01\"g\n\x07Vectors\x12 \n\x06vector\x18\x01 \x01(\x0b\x32\x0e.qdrant.VectorH\x00\x12\'\n\x07vectors\x18\x02 \x01(\x0b\x32\x14.qdrant.NamedVectorsH\x00\x42\x11\n\x0fvectors_options\"y\n\rVectorsOutput\x12&\n\x06vector\x18\x01 \x01(\x0b\x32\x14.qdrant.VectorOutputH\x00\x12-\n\x07vectors\x18\x02 \x01(\x0b\x32\x1a.qdrant.NamedVectorsOutputH\x00\x42\x11\n\x0fvectors_options\" \n\x0fVectorsSelector\x12\r\n\x05names\x18\x01 \x03(\t\"g\n\x13WithVectorsSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12*\n\x07include\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelectorH\x00\x42\x12\n\x10selector_options\"\x88\x01\n\x18QuantizationSearchParams\x12\x13\n\x06ignore\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07rescore\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x19\n\x0coversampling\x18\x03 \x01(\x01H\x02\x88\x01\x01\x42\t\n\x07_ignoreB\n\n\x08_rescoreB\x0f\n\r_oversampling\"\xc8\x01\n\x0cSearchParams\x12\x14\n\x07hnsw_ef\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\x05\x65xact\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12;\n\x0cquantization\x18\x03 \x01(\x0b\x32 .qdrant.QuantizationSearchParamsH\x02\x88\x01\x01\x12\x19\n\x0cindexed_only\x18\x04 \x01(\x08H\x03\x88\x01\x01\x42\n\n\x08_hnsw_efB\x08\n\x06_exactB\x0f\n\r_quantizationB\x0f\n\r_indexed_only\"\x92\x05\n\x0cSearchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\x1e\n\x06\x66ilter\x18\x03 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x04 \x01(\x04\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x07 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\x08 \x01(\x02H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\t \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0bvector_name\x18\n \x01(\tH\x02\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\x0b \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x03\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\r \x01(\x04H\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x0e \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x12\x32\n\x0esparse_indices\x18\x0f \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x07\x88\x01\x01\x42\x12\n\x10_score_thresholdB\t\n\x07_offsetB\x0e\n\x0c_vector_nameB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selectorB\x11\n\x0f_sparse_indicesJ\x04\x08\x05\x10\x06\"\xc8\x01\n\x11SearchBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12+\n\rsearch_points\x18\x02 \x03(\x0b\x32\x14.qdrant.SearchPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\xb2\x01\n\nWithLookup\x12\x12\n\ncollection\x18\x01 \x01(\t\x12\x36\n\x0cwith_payload\x18\x02 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelectorH\x00\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\x03 \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x01\x88\x01\x01\x42\x0f\n\r_with_payloadB\x0f\n\r_with_vectors\"\xd5\x05\n\x11SearchPointGroups\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\x1e\n\x06\x66ilter\x18\x03 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x04 \x01(\r\x12\x31\n\x0cwith_payload\x18\x05 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x06 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\x07 \x01(\x02H\x00\x88\x01\x01\x12\x18\n\x0bvector_name\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\t \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x10\n\x08group_by\x18\n \x01(\t\x12\x12\n\ngroup_size\x18\x0b \x01(\r\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x03\x88\x01\x01\x12,\n\x0bwith_lookup\x18\r \x01(\x0b\x32\x12.qdrant.WithLookupH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x0e \x01(\x04H\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x0f \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x12\x32\n\x0esparse_indices\x18\x10 \x01(\x0b\x32\x15.qdrant.SparseIndicesH\x07\x88\x01\x01\x42\x12\n\x10_score_thresholdB\x0e\n\x0c_vector_nameB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\x0e\n\x0c_with_lookupB\n\n\x08_timeoutB\x15\n\x13_shard_key_selectorB\x11\n\x0f_sparse_indices\"}\n\tStartFrom\x12\x0f\n\x05\x66loat\x18\x01 \x01(\x01H\x00\x12\x11\n\x07integer\x18\x02 \x01(\x03H\x00\x12/\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x12\x12\n\x08\x64\x61tetime\x18\x04 \x01(\tH\x00\x42\x07\n\x05value\"\x8a\x01\n\x07OrderBy\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\tdirection\x18\x02 \x01(\x0e\x32\x11.qdrant.DirectionH\x00\x88\x01\x01\x12*\n\nstart_from\x18\x03 \x01(\x0b\x32\x11.qdrant.StartFromH\x01\x88\x01\x01\x42\x0c\n\n_directionB\r\n\x0b_start_from\"\x8e\x04\n\x0cScrollPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x1e\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.Filter\x12$\n\x06offset\x18\x03 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12\x36\n\x0cwith_vectors\x18\x07 \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x08 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x03\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\t \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x04\x88\x01\x01\x12&\n\x08order_by\x18\n \x01(\x0b\x32\x0f.qdrant.OrderByH\x05\x88\x01\x01\x12\x14\n\x07timeout\x18\x0b \x01(\x04H\x06\x88\x01\x01\x42\t\n\x07_offsetB\x08\n\x06_limitB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\x0b\n\t_order_byB\n\n\x08_timeoutJ\x04\x08\x05\x10\x06\"\xa5\x01\n\x0eLookupLocation\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x18\n\x0bvector_name\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x42\x0e\n\x0c_vector_nameB\x15\n\x13_shard_key_selector\"\xcd\x06\n\x0fRecommendPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12!\n\x08positive\x18\x02 \x03(\x0b\x32\x0f.qdrant.PointId\x12!\n\x08negative\x18\x03 \x03(\x0b\x32\x0f.qdrant.PointId\x12\x1e\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x05 \x01(\x04\x12\x31\n\x0cwith_payload\x18\x07 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x08 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\t \x01(\x02H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\n \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05using\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\x0c \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x03\x88\x01\x01\x12\x30\n\x0blookup_from\x18\r \x01(\x0b\x32\x16.qdrant.LookupLocationH\x04\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0e \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x05\x88\x01\x01\x12\x30\n\x08strategy\x18\x10 \x01(\x0e\x32\x19.qdrant.RecommendStrategyH\x06\x88\x01\x01\x12(\n\x10positive_vectors\x18\x11 \x03(\x0b\x32\x0e.qdrant.Vector\x12(\n\x10negative_vectors\x18\x12 \x03(\x0b\x32\x0e.qdrant.Vector\x12\x14\n\x07timeout\x18\x13 \x01(\x04H\x07\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x14 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x08\x88\x01\x01\x42\x12\n\x10_score_thresholdB\t\n\x07_offsetB\x08\n\x06_usingB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x13\n\x11_read_consistencyB\x0b\n\t_strategyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selectorJ\x04\x08\x06\x10\x07\"\xd1\x01\n\x14RecommendBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x31\n\x10recommend_points\x18\x02 \x03(\x0b\x32\x17.qdrant.RecommendPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\x90\x07\n\x14RecommendPointGroups\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12!\n\x08positive\x18\x02 \x03(\x0b\x32\x0f.qdrant.PointId\x12!\n\x08negative\x18\x03 \x03(\x0b\x32\x0f.qdrant.PointId\x12\x1e\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x05 \x01(\r\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x07 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x1c\n\x0fscore_threshold\x18\x08 \x01(\x02H\x00\x88\x01\x01\x12\x12\n\x05using\x18\t \x01(\tH\x01\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\n \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x0b \x01(\x0b\x32\x16.qdrant.LookupLocationH\x03\x88\x01\x01\x12\x10\n\x08group_by\x18\x0c \x01(\t\x12\x12\n\ngroup_size\x18\r \x01(\r\x12\x36\n\x10read_consistency\x18\x0e \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12,\n\x0bwith_lookup\x18\x0f \x01(\x0b\x32\x12.qdrant.WithLookupH\x05\x88\x01\x01\x12\x30\n\x08strategy\x18\x11 \x01(\x0e\x32\x19.qdrant.RecommendStrategyH\x06\x88\x01\x01\x12(\n\x10positive_vectors\x18\x12 \x03(\x0b\x32\x0e.qdrant.Vector\x12(\n\x10negative_vectors\x18\x13 \x03(\x0b\x32\x0e.qdrant.Vector\x12\x14\n\x07timeout\x18\x14 \x01(\x04H\x07\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x15 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x08\x88\x01\x01\x42\x12\n\x10_score_thresholdB\x08\n\x06_usingB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x13\n\x11_read_consistencyB\x0e\n\x0c_with_lookupB\x0b\n\t_strategyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selector\"A\n\x0cTargetVector\x12\'\n\x06single\x18\x01 \x01(\x0b\x32\x15.qdrant.VectorExampleH\x00\x42\x08\n\x06target\"[\n\rVectorExample\x12\x1d\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x12 \n\x06vector\x18\x02 \x01(\x0b\x32\x0e.qdrant.VectorH\x00\x42\t\n\x07\x65xample\"f\n\x12\x43ontextExamplePair\x12\'\n\x08positive\x18\x01 \x01(\x0b\x32\x15.qdrant.VectorExample\x12\'\n\x08negative\x18\x02 \x01(\x0b\x32\x15.qdrant.VectorExample\"\x8e\x05\n\x0e\x44iscoverPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12$\n\x06target\x18\x02 \x01(\x0b\x32\x14.qdrant.TargetVector\x12+\n\x07\x63ontext\x18\x03 \x03(\x0b\x32\x1a.qdrant.ContextExamplePair\x12\x1e\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.Filter\x12\r\n\x05limit\x18\x05 \x01(\x04\x12\x31\n\x0cwith_payload\x18\x06 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12$\n\x06params\x18\x07 \x01(\x0b\x32\x14.qdrant.SearchParams\x12\x13\n\x06offset\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\x05using\x18\t \x01(\tH\x01\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\n \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x02\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x0b \x01(\x0b\x32\x16.qdrant.LookupLocationH\x03\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\r \x01(\x04H\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x0e \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x42\t\n\x07_offsetB\x08\n\x06_usingB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x13\n\x11_read_consistencyB\n\n\x08_timeoutB\x15\n\x13_shard_key_selector\"\xce\x01\n\x13\x44iscoverBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12/\n\x0f\x64iscover_points\x18\x02 \x03(\x0b\x32\x16.qdrant.DiscoverPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\xa5\x02\n\x0b\x43ountPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x1e\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.Filter\x12\x12\n\x05\x65xact\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x04 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x01\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x05 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x02\x88\x01\x01\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x03\x88\x01\x01\x42\x08\n\x06_exactB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\n\n\x08_timeout\"\x9d\x01\n\x0eRecommendInput\x12%\n\x08positive\x18\x01 \x03(\x0b\x32\x13.qdrant.VectorInput\x12%\n\x08negative\x18\x02 \x03(\x0b\x32\x13.qdrant.VectorInput\x12\x30\n\x08strategy\x18\x03 \x01(\x0e\x32\x19.qdrant.RecommendStrategyH\x00\x88\x01\x01\x42\x0b\n\t_strategy\"`\n\x10\x43ontextInputPair\x12%\n\x08positive\x18\x01 \x01(\x0b\x32\x13.qdrant.VectorInput\x12%\n\x08negative\x18\x02 \x01(\x0b\x32\x13.qdrant.VectorInput\"[\n\rDiscoverInput\x12#\n\x06target\x18\x01 \x01(\x0b\x32\x13.qdrant.VectorInput\x12%\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x14.qdrant.ContextInput\"7\n\x0c\x43ontextInput\x12\'\n\x05pairs\x18\x01 \x03(\x0b\x32\x18.qdrant.ContextInputPair\"\xa4\x02\n\x05Query\x12&\n\x07nearest\x18\x01 \x01(\x0b\x32\x13.qdrant.VectorInputH\x00\x12+\n\trecommend\x18\x02 \x01(\x0b\x32\x16.qdrant.RecommendInputH\x00\x12)\n\x08\x64iscover\x18\x03 \x01(\x0b\x32\x15.qdrant.DiscoverInputH\x00\x12\'\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x14.qdrant.ContextInputH\x00\x12#\n\x08order_by\x18\x05 \x01(\x0b\x32\x0f.qdrant.OrderByH\x00\x12 \n\x06\x66usion\x18\x06 \x01(\x0e\x32\x0e.qdrant.FusionH\x00\x12 \n\x06sample\x18\x07 \x01(\x0e\x32\x0e.qdrant.SampleH\x00\x42\t\n\x07variant\"\xfb\x02\n\rPrefetchQuery\x12\'\n\x08prefetch\x18\x01 \x03(\x0b\x32\x15.qdrant.PrefetchQuery\x12!\n\x05query\x18\x02 \x01(\x0b\x32\r.qdrant.QueryH\x00\x88\x01\x01\x12\x12\n\x05using\x18\x03 \x01(\tH\x01\x88\x01\x01\x12#\n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.FilterH\x02\x88\x01\x01\x12)\n\x06params\x18\x05 \x01(\x0b\x32\x14.qdrant.SearchParamsH\x03\x88\x01\x01\x12\x1c\n\x0fscore_threshold\x18\x06 \x01(\x02H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\x04H\x05\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x08 \x01(\x0b\x32\x16.qdrant.LookupLocationH\x06\x88\x01\x01\x42\x08\n\x06_queryB\x08\n\x06_usingB\t\n\x07_filterB\t\n\x07_paramsB\x12\n\x10_score_thresholdB\x08\n\x06_limitB\x0e\n\x0c_lookup_from\"\x85\x06\n\x0bQueryPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x08prefetch\x18\x02 \x03(\x0b\x32\x15.qdrant.PrefetchQuery\x12!\n\x05query\x18\x03 \x01(\x0b\x32\r.qdrant.QueryH\x00\x88\x01\x01\x12\x12\n\x05using\x18\x04 \x01(\tH\x01\x88\x01\x01\x12#\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x0e.qdrant.FilterH\x02\x88\x01\x01\x12)\n\x06params\x18\x06 \x01(\x0b\x32\x14.qdrant.SearchParamsH\x03\x88\x01\x01\x12\x1c\n\x0fscore_threshold\x18\x07 \x01(\x02H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x08 \x01(\x04H\x05\x88\x01\x01\x12\x13\n\x06offset\x18\t \x01(\x04H\x06\x88\x01\x01\x12\x36\n\x0cwith_vectors\x18\n \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x07\x88\x01\x01\x12\x36\n\x0cwith_payload\x18\x0b \x01(\x0b\x32\x1b.qdrant.WithPayloadSelectorH\x08\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x0c \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\t\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\r \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\n\x88\x01\x01\x12\x30\n\x0blookup_from\x18\x0e \x01(\x0b\x32\x16.qdrant.LookupLocationH\x0b\x88\x01\x01\x12\x14\n\x07timeout\x18\x0f \x01(\x04H\x0c\x88\x01\x01\x42\x08\n\x06_queryB\x08\n\x06_usingB\t\n\x07_filterB\t\n\x07_paramsB\x12\n\x10_score_thresholdB\x08\n\x06_limitB\t\n\x07_offsetB\x0f\n\r_with_vectorsB\x0f\n\r_with_payloadB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selectorB\x0e\n\x0c_lookup_fromB\n\n\x08_timeout\"\xc5\x01\n\x10QueryBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12)\n\x0cquery_points\x18\x02 \x03(\x0b\x32\x13.qdrant.QueryPoints\x12\x36\n\x10read_consistency\x18\x03 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x13\n\x11_read_consistencyB\n\n\x08_timeout\"\xcc\x06\n\x10QueryPointGroups\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x08prefetch\x18\x02 \x03(\x0b\x32\x15.qdrant.PrefetchQuery\x12!\n\x05query\x18\x03 \x01(\x0b\x32\r.qdrant.QueryH\x00\x88\x01\x01\x12\x12\n\x05using\x18\x04 \x01(\tH\x01\x88\x01\x01\x12#\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x0e.qdrant.FilterH\x02\x88\x01\x01\x12)\n\x06params\x18\x06 \x01(\x0b\x32\x14.qdrant.SearchParamsH\x03\x88\x01\x01\x12\x1c\n\x0fscore_threshold\x18\x07 \x01(\x02H\x04\x88\x01\x01\x12\x31\n\x0cwith_payload\x18\x08 \x01(\x0b\x32\x1b.qdrant.WithPayloadSelector\x12\x36\n\x0cwith_vectors\x18\t \x01(\x0b\x32\x1b.qdrant.WithVectorsSelectorH\x05\x88\x01\x01\x12\x30\n\x0blookup_from\x18\n \x01(\x0b\x32\x16.qdrant.LookupLocationH\x06\x88\x01\x01\x12\x12\n\x05limit\x18\x0b \x01(\x04H\x07\x88\x01\x01\x12\x17\n\ngroup_size\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x10\n\x08group_by\x18\r \x01(\t\x12\x36\n\x10read_consistency\x18\x0e \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\t\x88\x01\x01\x12,\n\x0bwith_lookup\x18\x0f \x01(\x0b\x32\x12.qdrant.WithLookupH\n\x88\x01\x01\x12\x14\n\x07timeout\x18\x10 \x01(\x04H\x0b\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x11 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x0c\x88\x01\x01\x42\x08\n\x06_queryB\x08\n\x06_usingB\t\n\x07_filterB\t\n\x07_paramsB\x12\n\x10_score_thresholdB\x0f\n\r_with_vectorsB\x0e\n\x0c_lookup_fromB\x08\n\x06_limitB\r\n\x0b_group_sizeB\x13\n\x11_read_consistencyB\x0e\n\x0c_with_lookupB\n\n\x08_timeoutB\x15\n\x13_shard_key_selector\"\xe0\x02\n\x0b\x46\x61\x63\x65tCounts\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x06\x66ilter\x18\x03 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05\x65xact\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x03\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x07 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x04\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x08 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x05\x88\x01\x01\x42\t\n\x07_filterB\x08\n\x06_limitB\x08\n\x06_exactB\n\n\x08_timeoutB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selector\"^\n\nFacetValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x17\n\rinteger_value\x18\x02 \x01(\x03H\x00\x12\x14\n\nbool_value\x18\x03 \x01(\x08H\x00\x42\t\n\x07variant\"<\n\x08\x46\x61\x63\x65tHit\x12!\n\x05value\x18\x01 \x01(\x0b\x32\x12.qdrant.FacetValue\x12\r\n\x05\x63ount\x18\x02 \x01(\x04\"\xfa\x02\n\x12SearchMatrixPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12#\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x88\x01\x01\x12\x13\n\x06sample\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05using\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x36\n\x10read_consistency\x18\x07 \x01(\x0b\x32\x17.qdrant.ReadConsistencyH\x05\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x08 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x06\x88\x01\x01\x42\t\n\x07_filterB\t\n\x07_sampleB\x08\n\x06_limitB\x08\n\x06_usingB\n\n\x08_timeoutB\x13\n\x11_read_consistencyB\x15\n\x13_shard_key_selector\"<\n\x11SearchMatrixPairs\x12\'\n\x05pairs\x18\x01 \x03(\x0b\x32\x18.qdrant.SearchMatrixPair\"Y\n\x10SearchMatrixPair\x12\x1a\n\x01\x61\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x1a\n\x01\x62\x18\x02 \x01(\x0b\x32\x0f.qdrant.PointId\x12\r\n\x05score\x18\x03 \x01(\x02\"m\n\x13SearchMatrixOffsets\x12\x13\n\x0boffsets_row\x18\x01 \x03(\x04\x12\x13\n\x0boffsets_col\x18\x02 \x03(\x04\x12\x0e\n\x06scores\x18\x03 \x03(\x02\x12\x1c\n\x03ids\x18\x04 \x03(\x0b\x32\x0f.qdrant.PointId\"\x95\x12\n\x15PointsUpdateOperation\x12?\n\x06upsert\x18\x01 \x01(\x0b\x32-.qdrant.PointsUpdateOperation.PointStructListH\x00\x12\x37\n\x11\x64\x65lete_deprecated\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorB\x02\x18\x01H\x00\x12?\n\x0bset_payload\x18\x03 \x01(\x0b\x32(.qdrant.PointsUpdateOperation.SetPayloadH\x00\x12K\n\x11overwrite_payload\x18\x04 \x01(\x0b\x32..qdrant.PointsUpdateOperation.OverwritePayloadH\x00\x12\x45\n\x0e\x64\x65lete_payload\x18\x05 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.DeletePayloadH\x00\x12>\n\x18\x63lear_payload_deprecated\x18\x06 \x01(\x0b\x32\x16.qdrant.PointsSelectorB\x02\x18\x01H\x00\x12\x45\n\x0eupdate_vectors\x18\x07 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.UpdateVectorsH\x00\x12\x45\n\x0e\x64\x65lete_vectors\x18\x08 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.DeleteVectorsH\x00\x12\x43\n\rdelete_points\x18\t \x01(\x0b\x32*.qdrant.PointsUpdateOperation.DeletePointsH\x00\x12\x43\n\rclear_payload\x18\n \x01(\x0b\x32*.qdrant.PointsUpdateOperation.ClearPayloadH\x00\x1a\x88\x01\n\x0fPointStructList\x12#\n\x06points\x18\x01 \x03(\x0b\x32\x13.qdrant.PointStruct\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\xc9\x02\n\nSetPayload\x12\x46\n\x07payload\x18\x01 \x03(\x0b\x32\x35.qdrant.PointsUpdateOperation.SetPayload.PayloadEntry\x12\x34\n\x0fpoints_selector\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x12\x10\n\x03key\x18\x04 \x01(\tH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x12\n\x10_points_selectorB\x15\n\x13_shard_key_selectorB\x06\n\x04_key\x1a\xd5\x02\n\x10OverwritePayload\x12L\n\x07payload\x18\x01 \x03(\x0b\x32;.qdrant.PointsUpdateOperation.OverwritePayload.PayloadEntry\x12\x34\n\x0fpoints_selector\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x12\x10\n\x03key\x18\x04 \x01(\tH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\x12\n\x10_points_selectorB\x15\n\x13_shard_key_selectorB\x06\n\x04_key\x1a\xb9\x01\n\rDeletePayload\x12\x0c\n\x04keys\x18\x01 \x03(\t\x12\x34\n\x0fpoints_selector\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x88\x01\x01\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x01\x88\x01\x01\x42\x12\n\x10_points_selectorB\x15\n\x13_shard_key_selector\x1a\x87\x01\n\rUpdateVectors\x12$\n\x06points\x18\x01 \x03(\x0b\x32\x14.qdrant.PointVectors\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\xbc\x01\n\rDeleteVectors\x12/\n\x0fpoints_selector\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12(\n\x07vectors\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelector\x12\x39\n\x12shard_key_selector\x18\x03 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\x88\x01\n\x0c\x44\x65letePoints\x12&\n\x06points\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selector\x1a\x88\x01\n\x0c\x43learPayload\x12&\n\x06points\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12\x39\n\x12shard_key_selector\x18\x02 \x01(\x0b\x32\x18.qdrant.ShardKeySelectorH\x00\x88\x01\x01\x42\x15\n\x13_shard_key_selectorB\x0b\n\toperation\"\xb6\x01\n\x11UpdateBatchPoints\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x31\n\noperations\x18\x03 \x03(\x0b\x32\x1d.qdrant.PointsUpdateOperation\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_ordering\"M\n\x17PointsOperationResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.UpdateResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"`\n\x0cUpdateResult\x12\x19\n\x0coperation_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12$\n\x06status\x18\x02 \x01(\x0e\x32\x14.qdrant.UpdateStatusB\x0f\n\r_operation_id\"7\n\nOrderValue\x12\r\n\x03int\x18\x01 \x01(\x03H\x00\x12\x0f\n\x05\x66loat\x18\x02 \x01(\x01H\x00\x42\t\n\x07variant\"\xf1\x02\n\x0bScoredPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x07payload\x18\x02 \x03(\x0b\x32 .qdrant.ScoredPoint.PayloadEntry\x12\r\n\x05score\x18\x03 \x01(\x02\x12\x0f\n\x07version\x18\x05 \x01(\x04\x12+\n\x07vectors\x18\x06 \x01(\x0b\x32\x15.qdrant.VectorsOutputH\x00\x88\x01\x01\x12(\n\tshard_key\x18\x07 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x01\x88\x01\x01\x12,\n\x0border_value\x18\x08 \x01(\x0b\x32\x12.qdrant.OrderValueH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\n\n\x08_vectorsB\x0c\n\n_shard_keyB\x0e\n\x0c_order_valueJ\x04\x08\x04\x10\x05\"\\\n\x07GroupId\x12\x18\n\x0eunsigned_value\x18\x01 \x01(\x04H\x00\x12\x17\n\rinteger_value\x18\x02 \x01(\x03H\x00\x12\x16\n\x0cstring_value\x18\x03 \x01(\tH\x00\x42\x06\n\x04kind\"t\n\nPointGroup\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.GroupId\x12!\n\x04hits\x18\x02 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12&\n\x06lookup\x18\x03 \x01(\x0b\x32\x16.qdrant.RetrievedPoint\"2\n\x0cGroupsResult\x12\"\n\x06groups\x18\x01 \x03(\x0b\x32\x12.qdrant.PointGroup\"C\n\x0eSearchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"B\n\rQueryResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"G\n\x12QueryBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"I\n\x13QueryGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"2\n\x0b\x42\x61tchResult\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\"H\n\x13SearchBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"J\n\x14SearchGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"B\n\rCountResponse\x12#\n\x06result\x18\x01 \x01(\x0b\x32\x13.qdrant.CountResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\x8b\x01\n\x0eScrollResponse\x12.\n\x10next_page_offset\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointIdH\x00\x88\x01\x01\x12&\n\x06result\x18\x02 \x03(\x0b\x32\x16.qdrant.RetrievedPoint\x12\x0c\n\x04time\x18\x03 \x01(\x01\x42\x13\n\x11_next_page_offset\"\x1c\n\x0b\x43ountResult\x12\r\n\x05\x63ount\x18\x01 \x01(\x04\"\xd7\x02\n\x0eRetrievedPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x34\n\x07payload\x18\x02 \x03(\x0b\x32#.qdrant.RetrievedPoint.PayloadEntry\x12+\n\x07vectors\x18\x04 \x01(\x0b\x32\x15.qdrant.VectorsOutputH\x00\x88\x01\x01\x12(\n\tshard_key\x18\x05 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x01\x88\x01\x01\x12,\n\x0border_value\x18\x06 \x01(\x0b\x32\x12.qdrant.OrderValueH\x02\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\n\n\x08_vectorsB\x0c\n\n_shard_keyB\x0e\n\x0c_order_valueJ\x04\x08\x03\x10\x04\"C\n\x0bGetResponse\x12&\n\x06result\x18\x01 \x03(\x0b\x32\x16.qdrant.RetrievedPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"F\n\x11RecommendResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"K\n\x16RecommendBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"E\n\x10\x44iscoverResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\"J\n\x15\x44iscoverBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"M\n\x17RecommendGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"I\n\x13UpdateBatchResponse\x12$\n\x06result\x18\x01 \x03(\x0b\x32\x14.qdrant.UpdateResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"=\n\rFacetResponse\x12\x1e\n\x04hits\x18\x01 \x03(\x0b\x32\x10.qdrant.FacetHit\x12\x0c\n\x04time\x18\x02 \x01(\x01\"T\n\x19SearchMatrixPairsResponse\x12)\n\x06result\x18\x01 \x01(\x0b\x32\x19.qdrant.SearchMatrixPairs\x12\x0c\n\x04time\x18\x02 \x01(\x01\"X\n\x1bSearchMatrixOffsetsResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.qdrant.SearchMatrixOffsets\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\xac\x01\n\x06\x46ilter\x12!\n\x06should\x18\x01 \x03(\x0b\x32\x11.qdrant.Condition\x12\x1f\n\x04must\x18\x02 \x03(\x0b\x32\x11.qdrant.Condition\x12#\n\x08must_not\x18\x03 \x03(\x0b\x32\x11.qdrant.Condition\x12*\n\nmin_should\x18\x04 \x01(\x0b\x32\x11.qdrant.MinShouldH\x00\x88\x01\x01\x42\r\n\x0b_min_should\"E\n\tMinShould\x12%\n\nconditions\x18\x01 \x03(\x0b\x32\x11.qdrant.Condition\x12\x11\n\tmin_count\x18\x02 \x01(\x04\"\x99\x02\n\tCondition\x12\'\n\x05\x66ield\x18\x01 \x01(\x0b\x32\x16.qdrant.FieldConditionH\x00\x12,\n\x08is_empty\x18\x02 \x01(\x0b\x32\x18.qdrant.IsEmptyConditionH\x00\x12(\n\x06has_id\x18\x03 \x01(\x0b\x32\x16.qdrant.HasIdConditionH\x00\x12 \n\x06\x66ilter\x18\x04 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x12*\n\x07is_null\x18\x05 \x01(\x0b\x32\x17.qdrant.IsNullConditionH\x00\x12)\n\x06nested\x18\x06 \x01(\x0b\x32\x17.qdrant.NestedConditionH\x00\x42\x12\n\x10\x63ondition_one_of\"\x1f\n\x10IsEmptyCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1e\n\x0fIsNullCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\"1\n\x0eHasIdCondition\x12\x1f\n\x06has_id\x18\x01 \x03(\x0b\x32\x0f.qdrant.PointId\">\n\x0fNestedCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.Filter\"\xb5\x02\n\x0e\x46ieldCondition\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05match\x18\x02 \x01(\x0b\x32\r.qdrant.Match\x12\x1c\n\x05range\x18\x03 \x01(\x0b\x32\r.qdrant.Range\x12\x30\n\x10geo_bounding_box\x18\x04 \x01(\x0b\x32\x16.qdrant.GeoBoundingBox\x12%\n\ngeo_radius\x18\x05 \x01(\x0b\x32\x11.qdrant.GeoRadius\x12)\n\x0cvalues_count\x18\x06 \x01(\x0b\x32\x13.qdrant.ValuesCount\x12\'\n\x0bgeo_polygon\x18\x07 \x01(\x0b\x32\x12.qdrant.GeoPolygon\x12-\n\x0e\x64\x61tetime_range\x18\x08 \x01(\x0b\x32\x15.qdrant.DatetimeRange\"\xa3\x02\n\x05Match\x12\x11\n\x07keyword\x18\x01 \x01(\tH\x00\x12\x11\n\x07integer\x18\x02 \x01(\x03H\x00\x12\x11\n\x07\x62oolean\x18\x03 \x01(\x08H\x00\x12\x0e\n\x04text\x18\x04 \x01(\tH\x00\x12+\n\x08keywords\x18\x05 \x01(\x0b\x32\x17.qdrant.RepeatedStringsH\x00\x12,\n\x08integers\x18\x06 \x01(\x0b\x32\x18.qdrant.RepeatedIntegersH\x00\x12\x33\n\x0f\x65xcept_integers\x18\x07 \x01(\x0b\x32\x18.qdrant.RepeatedIntegersH\x00\x12\x32\n\x0f\x65xcept_keywords\x18\x08 \x01(\x0b\x32\x17.qdrant.RepeatedStringsH\x00\x42\r\n\x0bmatch_value\"\"\n\x0fRepeatedStrings\x12\x0f\n\x07strings\x18\x01 \x03(\t\"$\n\x10RepeatedIntegers\x12\x10\n\x08integers\x18\x01 \x03(\x03\"k\n\x05Range\x12\x0f\n\x02lt\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x0f\n\x02gt\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12\x10\n\x03gte\x18\x03 \x01(\x01H\x02\x88\x01\x01\x12\x10\n\x03lte\x18\x04 \x01(\x01H\x03\x88\x01\x01\x42\x05\n\x03_ltB\x05\n\x03_gtB\x06\n\x04_gteB\x06\n\x04_lte\"\xe3\x01\n\rDatetimeRange\x12+\n\x02lt\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12+\n\x02gt\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12,\n\x03gte\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02\x88\x01\x01\x12,\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x03\x88\x01\x01\x42\x05\n\x03_ltB\x05\n\x03_gtB\x06\n\x04_gteB\x06\n\x04_lte\"\\\n\x0eGeoBoundingBox\x12\"\n\x08top_left\x18\x01 \x01(\x0b\x32\x10.qdrant.GeoPoint\x12&\n\x0c\x62ottom_right\x18\x02 \x01(\x0b\x32\x10.qdrant.GeoPoint\"=\n\tGeoRadius\x12 \n\x06\x63\x65nter\x18\x01 \x01(\x0b\x32\x10.qdrant.GeoPoint\x12\x0e\n\x06radius\x18\x02 \x01(\x02\"1\n\rGeoLineString\x12 \n\x06points\x18\x01 \x03(\x0b\x32\x10.qdrant.GeoPoint\"_\n\nGeoPolygon\x12\'\n\x08\x65xterior\x18\x01 \x01(\x0b\x32\x15.qdrant.GeoLineString\x12(\n\tinteriors\x18\x02 \x03(\x0b\x32\x15.qdrant.GeoLineString\"q\n\x0bValuesCount\x12\x0f\n\x02lt\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02gt\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x10\n\x03gte\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x10\n\x03lte\x18\x04 \x01(\x04H\x03\x88\x01\x01\x42\x05\n\x03_ltB\x05\n\x03_gtB\x06\n\x04_gteB\x06\n\x04_lte\"u\n\x0ePointsSelector\x12\'\n\x06points\x18\x01 \x01(\x0b\x32\x15.qdrant.PointsIdsListH\x00\x12 \n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0e.qdrant.FilterH\x00\x42\x18\n\x16points_selector_one_of\"-\n\rPointsIdsList\x12\x1c\n\x03ids\x18\x01 \x03(\x0b\x32\x0f.qdrant.PointId\"\xd5\x01\n\x0bPointStruct\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x07payload\x18\x03 \x03(\x0b\x32 .qdrant.PointStruct.PayloadEntry\x12%\n\x07vectors\x18\x04 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\x1a=\n\x0cPayloadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.qdrant.Value:\x02\x38\x01\x42\n\n\x08_vectorsJ\x04\x08\x02\x10\x03\"$\n\x08GeoPoint\x12\x0b\n\x03lon\x18\x01 \x01(\x01\x12\x0b\n\x03lat\x18\x02 \x01(\x01*5\n\x11WriteOrderingType\x12\x08\n\x04Weak\x10\x00\x12\n\n\x06Medium\x10\x01\x12\n\n\x06Strong\x10\x02*8\n\x13ReadConsistencyType\x12\x07\n\x03\x41ll\x10\x00\x12\x0c\n\x08Majority\x10\x01\x12\n\n\x06Quorum\x10\x02*\xad\x01\n\tFieldType\x12\x14\n\x10\x46ieldTypeKeyword\x10\x00\x12\x14\n\x10\x46ieldTypeInteger\x10\x01\x12\x12\n\x0e\x46ieldTypeFloat\x10\x02\x12\x10\n\x0c\x46ieldTypeGeo\x10\x03\x12\x11\n\rFieldTypeText\x10\x04\x12\x11\n\rFieldTypeBool\x10\x05\x12\x15\n\x11\x46ieldTypeDatetime\x10\x06\x12\x11\n\rFieldTypeUuid\x10\x07*\x1e\n\tDirection\x12\x07\n\x03\x41sc\x10\x00\x12\x08\n\x04\x44\x65sc\x10\x01*5\n\x11RecommendStrategy\x12\x11\n\rAverageVector\x10\x00\x12\r\n\tBestScore\x10\x01*\x1b\n\x06\x46usion\x12\x07\n\x03RRF\x10\x00\x12\x08\n\x04\x44\x42SF\x10\x01*\x14\n\x06Sample\x12\n\n\x06Random\x10\x00*[\n\x0cUpdateStatus\x12\x17\n\x13UnknownUpdateStatus\x10\x00\x12\x10\n\x0c\x41\x63knowledged\x10\x01\x12\r\n\tCompleted\x10\x02\x12\x11\n\rClockRejected\x10\x03\x42\x15\xaa\x02\x12Qdrant.Client.Grpcb\x06proto3') _WRITEORDERINGTYPE = DESCRIPTOR.enum_types_by_name['WriteOrderingType'] WriteOrderingType = enum_type_wrapper.EnumTypeWrapper(_WRITEORDERINGTYPE) @@ -67,7 +67,14 @@ _READCONSISTENCY = DESCRIPTOR.message_types_by_name['ReadConsistency'] _POINTID = DESCRIPTOR.message_types_by_name['PointId'] _SPARSEINDICES = DESCRIPTOR.message_types_by_name['SparseIndices'] +_DOCUMENT = DESCRIPTOR.message_types_by_name['Document'] +_DOCUMENT_OPTIONSENTRY = _DOCUMENT.nested_types_by_name['OptionsEntry'] +_IMAGE = DESCRIPTOR.message_types_by_name['Image'] +_IMAGE_OPTIONSENTRY = _IMAGE.nested_types_by_name['OptionsEntry'] +_INFERENCEOBJECT = DESCRIPTOR.message_types_by_name['InferenceObject'] +_INFERENCEOBJECT_OPTIONSENTRY = _INFERENCEOBJECT.nested_types_by_name['OptionsEntry'] _VECTOR = DESCRIPTOR.message_types_by_name['Vector'] +_VECTOROUTPUT = DESCRIPTOR.message_types_by_name['VectorOutput'] _DENSEVECTOR = DESCRIPTOR.message_types_by_name['DenseVector'] _SPARSEVECTOR = DESCRIPTOR.message_types_by_name['SparseVector'] _MULTIDENSEVECTOR = DESCRIPTOR.message_types_by_name['MultiDenseVector'] @@ -90,7 +97,10 @@ _WITHPAYLOADSELECTOR = DESCRIPTOR.message_types_by_name['WithPayloadSelector'] _NAMEDVECTORS = DESCRIPTOR.message_types_by_name['NamedVectors'] _NAMEDVECTORS_VECTORSENTRY = _NAMEDVECTORS.nested_types_by_name['VectorsEntry'] +_NAMEDVECTORSOUTPUT = DESCRIPTOR.message_types_by_name['NamedVectorsOutput'] +_NAMEDVECTORSOUTPUT_VECTORSENTRY = _NAMEDVECTORSOUTPUT.nested_types_by_name['VectorsEntry'] _VECTORS = DESCRIPTOR.message_types_by_name['Vectors'] +_VECTORSOUTPUT = DESCRIPTOR.message_types_by_name['VectorsOutput'] _VECTORSSELECTOR = DESCRIPTOR.message_types_by_name['VectorsSelector'] _WITHVECTORSSELECTOR = DESCRIPTOR.message_types_by_name['WithVectorsSelector'] _QUANTIZATIONSEARCHPARAMS = DESCRIPTOR.message_types_by_name['QuantizationSearchParams'] @@ -221,6 +231,51 @@ }) _sym_db.RegisterMessage(SparseIndices) +Document = _reflection.GeneratedProtocolMessageType('Document', (_message.Message,), { + + 'OptionsEntry' : _reflection.GeneratedProtocolMessageType('OptionsEntry', (_message.Message,), { + 'DESCRIPTOR' : _DOCUMENT_OPTIONSENTRY, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.Document.OptionsEntry) + }) + , + 'DESCRIPTOR' : _DOCUMENT, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.Document) + }) +_sym_db.RegisterMessage(Document) +_sym_db.RegisterMessage(Document.OptionsEntry) + +Image = _reflection.GeneratedProtocolMessageType('Image', (_message.Message,), { + + 'OptionsEntry' : _reflection.GeneratedProtocolMessageType('OptionsEntry', (_message.Message,), { + 'DESCRIPTOR' : _IMAGE_OPTIONSENTRY, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.Image.OptionsEntry) + }) + , + 'DESCRIPTOR' : _IMAGE, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.Image) + }) +_sym_db.RegisterMessage(Image) +_sym_db.RegisterMessage(Image.OptionsEntry) + +InferenceObject = _reflection.GeneratedProtocolMessageType('InferenceObject', (_message.Message,), { + + 'OptionsEntry' : _reflection.GeneratedProtocolMessageType('OptionsEntry', (_message.Message,), { + 'DESCRIPTOR' : _INFERENCEOBJECT_OPTIONSENTRY, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.InferenceObject.OptionsEntry) + }) + , + 'DESCRIPTOR' : _INFERENCEOBJECT, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.InferenceObject) + }) +_sym_db.RegisterMessage(InferenceObject) +_sym_db.RegisterMessage(InferenceObject.OptionsEntry) + Vector = _reflection.GeneratedProtocolMessageType('Vector', (_message.Message,), { 'DESCRIPTOR' : _VECTOR, '__module__' : 'points_pb2' @@ -228,6 +283,13 @@ }) _sym_db.RegisterMessage(Vector) +VectorOutput = _reflection.GeneratedProtocolMessageType('VectorOutput', (_message.Message,), { + 'DESCRIPTOR' : _VECTOROUTPUT, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.VectorOutput) + }) +_sym_db.RegisterMessage(VectorOutput) + DenseVector = _reflection.GeneratedProtocolMessageType('DenseVector', (_message.Message,), { 'DESCRIPTOR' : _DENSEVECTOR, '__module__' : 'points_pb2' @@ -384,6 +446,21 @@ _sym_db.RegisterMessage(NamedVectors) _sym_db.RegisterMessage(NamedVectors.VectorsEntry) +NamedVectorsOutput = _reflection.GeneratedProtocolMessageType('NamedVectorsOutput', (_message.Message,), { + + 'VectorsEntry' : _reflection.GeneratedProtocolMessageType('VectorsEntry', (_message.Message,), { + 'DESCRIPTOR' : _NAMEDVECTORSOUTPUT_VECTORSENTRY, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.NamedVectorsOutput.VectorsEntry) + }) + , + 'DESCRIPTOR' : _NAMEDVECTORSOUTPUT, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.NamedVectorsOutput) + }) +_sym_db.RegisterMessage(NamedVectorsOutput) +_sym_db.RegisterMessage(NamedVectorsOutput.VectorsEntry) + Vectors = _reflection.GeneratedProtocolMessageType('Vectors', (_message.Message,), { 'DESCRIPTOR' : _VECTORS, '__module__' : 'points_pb2' @@ -391,6 +468,13 @@ }) _sym_db.RegisterMessage(Vectors) +VectorsOutput = _reflection.GeneratedProtocolMessageType('VectorsOutput', (_message.Message,), { + 'DESCRIPTOR' : _VECTORSOUTPUT, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.VectorsOutput) + }) +_sym_db.RegisterMessage(VectorsOutput) + VectorsSelector = _reflection.GeneratedProtocolMessageType('VectorsSelector', (_message.Message,), { 'DESCRIPTOR' : _VECTORSSELECTOR, '__module__' : 'points_pb2' @@ -1122,10 +1206,18 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\252\002\022Qdrant.Client.Grpc' + _DOCUMENT_OPTIONSENTRY._options = None + _DOCUMENT_OPTIONSENTRY._serialized_options = b'8\001' + _IMAGE_OPTIONSENTRY._options = None + _IMAGE_OPTIONSENTRY._serialized_options = b'8\001' + _INFERENCEOBJECT_OPTIONSENTRY._options = None + _INFERENCEOBJECT_OPTIONSENTRY._serialized_options = b'8\001' _SETPAYLOADPOINTS_PAYLOADENTRY._options = None _SETPAYLOADPOINTS_PAYLOADENTRY._serialized_options = b'8\001' _NAMEDVECTORS_VECTORSENTRY._options = None _NAMEDVECTORS_VECTORSENTRY._serialized_options = b'8\001' + _NAMEDVECTORSOUTPUT_VECTORSENTRY._options = None + _NAMEDVECTORSOUTPUT_VECTORSENTRY._serialized_options = b'8\001' _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._options = None _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_options = b'8\001' _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD_PAYLOADENTRY._options = None @@ -1140,22 +1232,22 @@ _RETRIEVEDPOINT_PAYLOADENTRY._serialized_options = b'8\001' _POINTSTRUCT_PAYLOADENTRY._options = None _POINTSTRUCT_PAYLOADENTRY._serialized_options = b'8\001' - _WRITEORDERINGTYPE._serialized_start=22799 - _WRITEORDERINGTYPE._serialized_end=22852 - _READCONSISTENCYTYPE._serialized_start=22854 - _READCONSISTENCYTYPE._serialized_end=22910 - _FIELDTYPE._serialized_start=22913 - _FIELDTYPE._serialized_end=23086 - _DIRECTION._serialized_start=23088 - _DIRECTION._serialized_end=23118 - _RECOMMENDSTRATEGY._serialized_start=23120 - _RECOMMENDSTRATEGY._serialized_end=23173 - _FUSION._serialized_start=23175 - _FUSION._serialized_end=23202 - _SAMPLE._serialized_start=23204 - _SAMPLE._serialized_end=23224 - _UPDATESTATUS._serialized_start=23226 - _UPDATESTATUS._serialized_end=23317 + _WRITEORDERINGTYPE._serialized_start=24250 + _WRITEORDERINGTYPE._serialized_end=24303 + _READCONSISTENCYTYPE._serialized_start=24305 + _READCONSISTENCYTYPE._serialized_end=24361 + _FIELDTYPE._serialized_start=24364 + _FIELDTYPE._serialized_end=24537 + _DIRECTION._serialized_start=24539 + _DIRECTION._serialized_end=24569 + _RECOMMENDSTRATEGY._serialized_start=24571 + _RECOMMENDSTRATEGY._serialized_end=24624 + _FUSION._serialized_start=24626 + _FUSION._serialized_end=24653 + _SAMPLE._serialized_start=24655 + _SAMPLE._serialized_end=24675 + _UPDATESTATUS._serialized_start=24677 + _UPDATESTATUS._serialized_end=24768 _WRITEORDERING._serialized_start=97 _WRITEORDERING._serialized_end=153 _READCONSISTENCY._serialized_start=155 @@ -1164,256 +1256,276 @@ _POINTID._serialized_end=306 _SPARSEINDICES._serialized_start=308 _SPARSEINDICES._serialized_end=337 - _VECTOR._serialized_start=339 - _VECTOR._serialized_end=464 - _DENSEVECTOR._serialized_start=466 - _DENSEVECTOR._serialized_end=493 - _SPARSEVECTOR._serialized_start=495 - _SPARSEVECTOR._serialized_end=542 - _MULTIDENSEVECTOR._serialized_start=544 - _MULTIDENSEVECTOR._serialized_end=600 - _VECTORINPUT._serialized_start=603 - _VECTORINPUT._serialized_end=785 - _SHARDKEYSELECTOR._serialized_start=787 - _SHARDKEYSELECTOR._serialized_end=843 - _UPSERTPOINTS._serialized_start=846 - _UPSERTPOINTS._serialized_end=1091 - _DELETEPOINTS._serialized_start=1094 - _DELETEPOINTS._serialized_end=1342 - _GETPOINTS._serialized_start=1345 - _GETPOINTS._serialized_end=1734 - _UPDATEPOINTVECTORS._serialized_start=1737 - _UPDATEPOINTVECTORS._serialized_end=1989 - _POINTVECTORS._serialized_start=1991 - _POINTVECTORS._serialized_end=2068 - _DELETEPOINTVECTORS._serialized_start=2071 - _DELETEPOINTVECTORS._serialized_end=2376 - _SETPAYLOADPOINTS._serialized_start=2379 - _SETPAYLOADPOINTS._serialized_end=2816 - _SETPAYLOADPOINTS_PAYLOADENTRY._serialized_start=2676 - _SETPAYLOADPOINTS_PAYLOADENTRY._serialized_end=2737 - _DELETEPAYLOADPOINTS._serialized_start=2819 - _DELETEPAYLOADPOINTS._serialized_end=3128 - _CLEARPAYLOADPOINTS._serialized_start=3131 - _CLEARPAYLOADPOINTS._serialized_end=3385 - _CREATEFIELDINDEXCOLLECTION._serialized_start=3388 - _CREATEFIELDINDEXCOLLECTION._serialized_end=3691 - _DELETEFIELDINDEXCOLLECTION._serialized_start=3694 - _DELETEFIELDINDEXCOLLECTION._serialized_end=3854 - _PAYLOADINCLUDESELECTOR._serialized_start=3856 - _PAYLOADINCLUDESELECTOR._serialized_end=3896 - _PAYLOADEXCLUDESELECTOR._serialized_start=3898 - _PAYLOADEXCLUDESELECTOR._serialized_end=3938 - _WITHPAYLOADSELECTOR._serialized_start=3941 - _WITHPAYLOADSELECTOR._serialized_end=4102 - _NAMEDVECTORS._serialized_start=4105 - _NAMEDVECTORS._serialized_end=4235 - _NAMEDVECTORS_VECTORSENTRY._serialized_start=4173 - _NAMEDVECTORS_VECTORSENTRY._serialized_end=4235 - _VECTORS._serialized_start=4237 - _VECTORS._serialized_end=4340 - _VECTORSSELECTOR._serialized_start=4342 - _VECTORSSELECTOR._serialized_end=4374 - _WITHVECTORSSELECTOR._serialized_start=4376 - _WITHVECTORSSELECTOR._serialized_end=4479 - _QUANTIZATIONSEARCHPARAMS._serialized_start=4482 - _QUANTIZATIONSEARCHPARAMS._serialized_end=4618 - _SEARCHPARAMS._serialized_start=4621 - _SEARCHPARAMS._serialized_end=4821 - _SEARCHPOINTS._serialized_start=4824 - _SEARCHPOINTS._serialized_end=5482 - _SEARCHBATCHPOINTS._serialized_start=5485 - _SEARCHBATCHPOINTS._serialized_end=5685 - _WITHLOOKUP._serialized_start=5688 - _WITHLOOKUP._serialized_end=5866 - _SEARCHPOINTGROUPS._serialized_start=5869 - _SEARCHPOINTGROUPS._serialized_end=6594 - _STARTFROM._serialized_start=6596 - _STARTFROM._serialized_end=6721 - _ORDERBY._serialized_start=6724 - _ORDERBY._serialized_end=6862 - _SCROLLPOINTS._serialized_start=6865 - _SCROLLPOINTS._serialized_end=7391 - _LOOKUPLOCATION._serialized_start=7394 - _LOOKUPLOCATION._serialized_end=7559 - _RECOMMENDPOINTS._serialized_start=7562 - _RECOMMENDPOINTS._serialized_end=8407 - _RECOMMENDBATCHPOINTS._serialized_start=8410 - _RECOMMENDBATCHPOINTS._serialized_end=8619 - _RECOMMENDPOINTGROUPS._serialized_start=8622 - _RECOMMENDPOINTGROUPS._serialized_end=9534 - _TARGETVECTOR._serialized_start=9536 - _TARGETVECTOR._serialized_end=9601 - _VECTOREXAMPLE._serialized_start=9603 - _VECTOREXAMPLE._serialized_end=9694 - _CONTEXTEXAMPLEPAIR._serialized_start=9696 - _CONTEXTEXAMPLEPAIR._serialized_end=9798 - _DISCOVERPOINTS._serialized_start=9801 - _DISCOVERPOINTS._serialized_end=10455 - _DISCOVERBATCHPOINTS._serialized_start=10458 - _DISCOVERBATCHPOINTS._serialized_end=10664 - _COUNTPOINTS._serialized_start=10667 - _COUNTPOINTS._serialized_end=10960 - _RECOMMENDINPUT._serialized_start=10963 - _RECOMMENDINPUT._serialized_end=11120 - _CONTEXTINPUTPAIR._serialized_start=11122 - _CONTEXTINPUTPAIR._serialized_end=11218 - _DISCOVERINPUT._serialized_start=11220 - _DISCOVERINPUT._serialized_end=11311 - _CONTEXTINPUT._serialized_start=11313 - _CONTEXTINPUT._serialized_end=11368 - _QUERY._serialized_start=11371 - _QUERY._serialized_end=11663 - _PREFETCHQUERY._serialized_start=11666 - _PREFETCHQUERY._serialized_end=12045 - _QUERYPOINTS._serialized_start=12048 - _QUERYPOINTS._serialized_end=12821 - _QUERYBATCHPOINTS._serialized_start=12824 - _QUERYBATCHPOINTS._serialized_end=13021 - _QUERYPOINTGROUPS._serialized_start=13024 - _QUERYPOINTGROUPS._serialized_end=13868 - _FACETCOUNTS._serialized_start=13871 - _FACETCOUNTS._serialized_end=14223 - _FACETVALUE._serialized_start=14225 - _FACETVALUE._serialized_end=14319 - _FACETHIT._serialized_start=14321 - _FACETHIT._serialized_end=14381 - _SEARCHMATRIXPOINTS._serialized_start=14384 - _SEARCHMATRIXPOINTS._serialized_end=14762 - _SEARCHMATRIXPAIRS._serialized_start=14764 - _SEARCHMATRIXPAIRS._serialized_end=14824 - _SEARCHMATRIXPAIR._serialized_start=14826 - _SEARCHMATRIXPAIR._serialized_end=14915 - _SEARCHMATRIXOFFSETS._serialized_start=14917 - _SEARCHMATRIXOFFSETS._serialized_end=15026 - _POINTSUPDATEOPERATION._serialized_start=15029 - _POINTSUPDATEOPERATION._serialized_end=17354 - _POINTSUPDATEOPERATION_POINTSTRUCTLIST._serialized_start=15734 - _POINTSUPDATEOPERATION_POINTSTRUCTLIST._serialized_end=15870 - _POINTSUPDATEOPERATION_SETPAYLOAD._serialized_start=15873 - _POINTSUPDATEOPERATION_SETPAYLOAD._serialized_end=16202 - _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_start=2676 - _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_end=2737 - _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD._serialized_start=16205 - _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD._serialized_end=16546 - _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD_PAYLOADENTRY._serialized_start=2676 - _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD_PAYLOADENTRY._serialized_end=2737 - _POINTSUPDATEOPERATION_DELETEPAYLOAD._serialized_start=16549 - _POINTSUPDATEOPERATION_DELETEPAYLOAD._serialized_end=16734 - _POINTSUPDATEOPERATION_UPDATEVECTORS._serialized_start=16737 - _POINTSUPDATEOPERATION_UPDATEVECTORS._serialized_end=16872 - _POINTSUPDATEOPERATION_DELETEVECTORS._serialized_start=16875 - _POINTSUPDATEOPERATION_DELETEVECTORS._serialized_end=17063 - _POINTSUPDATEOPERATION_DELETEPOINTS._serialized_start=17066 - _POINTSUPDATEOPERATION_DELETEPOINTS._serialized_end=17202 - _POINTSUPDATEOPERATION_CLEARPAYLOAD._serialized_start=17205 - _POINTSUPDATEOPERATION_CLEARPAYLOAD._serialized_end=17341 - _UPDATEBATCHPOINTS._serialized_start=17357 - _UPDATEBATCHPOINTS._serialized_end=17539 - _POINTSOPERATIONRESPONSE._serialized_start=17541 - _POINTSOPERATIONRESPONSE._serialized_end=17618 - _UPDATERESULT._serialized_start=17620 - _UPDATERESULT._serialized_end=17716 - _ORDERVALUE._serialized_start=17718 - _ORDERVALUE._serialized_end=17773 - _SCOREDPOINT._serialized_start=17776 - _SCOREDPOINT._serialized_end=18139 - _SCOREDPOINT_PAYLOADENTRY._serialized_start=2676 - _SCOREDPOINT_PAYLOADENTRY._serialized_end=2737 - _GROUPID._serialized_start=18141 - _GROUPID._serialized_end=18233 - _POINTGROUP._serialized_start=18235 - _POINTGROUP._serialized_end=18351 - _GROUPSRESULT._serialized_start=18353 - _GROUPSRESULT._serialized_end=18403 - _SEARCHRESPONSE._serialized_start=18405 - _SEARCHRESPONSE._serialized_end=18472 - _QUERYRESPONSE._serialized_start=18474 - _QUERYRESPONSE._serialized_end=18540 - _QUERYBATCHRESPONSE._serialized_start=18542 - _QUERYBATCHRESPONSE._serialized_end=18613 - _QUERYGROUPSRESPONSE._serialized_start=18615 - _QUERYGROUPSRESPONSE._serialized_end=18688 - _BATCHRESULT._serialized_start=18690 - _BATCHRESULT._serialized_end=18740 - _SEARCHBATCHRESPONSE._serialized_start=18742 - _SEARCHBATCHRESPONSE._serialized_end=18814 - _SEARCHGROUPSRESPONSE._serialized_start=18816 - _SEARCHGROUPSRESPONSE._serialized_end=18890 - _COUNTRESPONSE._serialized_start=18892 - _COUNTRESPONSE._serialized_end=18958 - _SCROLLRESPONSE._serialized_start=18961 - _SCROLLRESPONSE._serialized_end=19100 - _COUNTRESULT._serialized_start=19102 - _COUNTRESULT._serialized_end=19130 - _RETRIEVEDPOINT._serialized_start=19133 - _RETRIEVEDPOINT._serialized_end=19470 - _RETRIEVEDPOINT_PAYLOADENTRY._serialized_start=2676 - _RETRIEVEDPOINT_PAYLOADENTRY._serialized_end=2737 - _GETRESPONSE._serialized_start=19472 - _GETRESPONSE._serialized_end=19539 - _RECOMMENDRESPONSE._serialized_start=19541 - _RECOMMENDRESPONSE._serialized_end=19611 - _RECOMMENDBATCHRESPONSE._serialized_start=19613 - _RECOMMENDBATCHRESPONSE._serialized_end=19688 - _DISCOVERRESPONSE._serialized_start=19690 - _DISCOVERRESPONSE._serialized_end=19759 - _DISCOVERBATCHRESPONSE._serialized_start=19761 - _DISCOVERBATCHRESPONSE._serialized_end=19835 - _RECOMMENDGROUPSRESPONSE._serialized_start=19837 - _RECOMMENDGROUPSRESPONSE._serialized_end=19914 - _UPDATEBATCHRESPONSE._serialized_start=19916 - _UPDATEBATCHRESPONSE._serialized_end=19989 - _FACETRESPONSE._serialized_start=19991 - _FACETRESPONSE._serialized_end=20052 - _SEARCHMATRIXPAIRSRESPONSE._serialized_start=20054 - _SEARCHMATRIXPAIRSRESPONSE._serialized_end=20138 - _SEARCHMATRIXOFFSETSRESPONSE._serialized_start=20140 - _SEARCHMATRIXOFFSETSRESPONSE._serialized_end=20228 - _FILTER._serialized_start=20231 - _FILTER._serialized_end=20403 - _MINSHOULD._serialized_start=20405 - _MINSHOULD._serialized_end=20474 - _CONDITION._serialized_start=20477 - _CONDITION._serialized_end=20758 - _ISEMPTYCONDITION._serialized_start=20760 - _ISEMPTYCONDITION._serialized_end=20791 - _ISNULLCONDITION._serialized_start=20793 - _ISNULLCONDITION._serialized_end=20823 - _HASIDCONDITION._serialized_start=20825 - _HASIDCONDITION._serialized_end=20874 - _NESTEDCONDITION._serialized_start=20876 - _NESTEDCONDITION._serialized_end=20938 - _FIELDCONDITION._serialized_start=20941 - _FIELDCONDITION._serialized_end=21250 - _MATCH._serialized_start=21253 - _MATCH._serialized_end=21544 - _REPEATEDSTRINGS._serialized_start=21546 - _REPEATEDSTRINGS._serialized_end=21580 - _REPEATEDINTEGERS._serialized_start=21582 - _REPEATEDINTEGERS._serialized_end=21618 - _RANGE._serialized_start=21620 - _RANGE._serialized_end=21727 - _DATETIMERANGE._serialized_start=21730 - _DATETIMERANGE._serialized_end=21957 - _GEOBOUNDINGBOX._serialized_start=21959 - _GEOBOUNDINGBOX._serialized_end=22051 - _GEORADIUS._serialized_start=22053 - _GEORADIUS._serialized_end=22114 - _GEOLINESTRING._serialized_start=22116 - _GEOLINESTRING._serialized_end=22165 - _GEOPOLYGON._serialized_start=22167 - _GEOPOLYGON._serialized_end=22262 - _VALUESCOUNT._serialized_start=22264 - _VALUESCOUNT._serialized_end=22377 - _POINTSSELECTOR._serialized_start=22379 - _POINTSSELECTOR._serialized_end=22496 - _POINTSIDSLIST._serialized_start=22498 - _POINTSIDSLIST._serialized_end=22543 - _POINTSTRUCT._serialized_start=22546 - _POINTSTRUCT._serialized_end=22759 - _POINTSTRUCT_PAYLOADENTRY._serialized_start=2676 - _POINTSTRUCT_PAYLOADENTRY._serialized_end=2737 - _GEOPOINT._serialized_start=22761 - _GEOPOINT._serialized_end=22797 + _DOCUMENT._serialized_start=340 + _DOCUMENT._serialized_end=505 + _DOCUMENT_OPTIONSENTRY._serialized_start=434 + _DOCUMENT_OPTIONSENTRY._serialized_end=495 + _IMAGE._serialized_start=508 + _IMAGE._serialized_end=668 + _IMAGE_OPTIONSENTRY._serialized_start=434 + _IMAGE_OPTIONSENTRY._serialized_end=495 + _INFERENCEOBJECT._serialized_start=671 + _INFERENCEOBJECT._serialized_end=867 + _INFERENCEOBJECT_OPTIONSENTRY._serialized_start=434 + _INFERENCEOBJECT_OPTIONSENTRY._serialized_end=495 + _VECTOR._serialized_start=870 + _VECTOR._serialized_end=1245 + _VECTOROUTPUT._serialized_start=1248 + _VECTOROUTPUT._serialized_end=1516 + _DENSEVECTOR._serialized_start=1518 + _DENSEVECTOR._serialized_end=1545 + _SPARSEVECTOR._serialized_start=1547 + _SPARSEVECTOR._serialized_end=1594 + _MULTIDENSEVECTOR._serialized_start=1596 + _MULTIDENSEVECTOR._serialized_end=1652 + _VECTORINPUT._serialized_start=1655 + _VECTORINPUT._serialized_end=1950 + _SHARDKEYSELECTOR._serialized_start=1952 + _SHARDKEYSELECTOR._serialized_end=2008 + _UPSERTPOINTS._serialized_start=2011 + _UPSERTPOINTS._serialized_end=2256 + _DELETEPOINTS._serialized_start=2259 + _DELETEPOINTS._serialized_end=2507 + _GETPOINTS._serialized_start=2510 + _GETPOINTS._serialized_end=2899 + _UPDATEPOINTVECTORS._serialized_start=2902 + _UPDATEPOINTVECTORS._serialized_end=3154 + _POINTVECTORS._serialized_start=3156 + _POINTVECTORS._serialized_end=3233 + _DELETEPOINTVECTORS._serialized_start=3236 + _DELETEPOINTVECTORS._serialized_end=3541 + _SETPAYLOADPOINTS._serialized_start=3544 + _SETPAYLOADPOINTS._serialized_end=3981 + _SETPAYLOADPOINTS_PAYLOADENTRY._serialized_start=3841 + _SETPAYLOADPOINTS_PAYLOADENTRY._serialized_end=3902 + _DELETEPAYLOADPOINTS._serialized_start=3984 + _DELETEPAYLOADPOINTS._serialized_end=4293 + _CLEARPAYLOADPOINTS._serialized_start=4296 + _CLEARPAYLOADPOINTS._serialized_end=4550 + _CREATEFIELDINDEXCOLLECTION._serialized_start=4553 + _CREATEFIELDINDEXCOLLECTION._serialized_end=4856 + _DELETEFIELDINDEXCOLLECTION._serialized_start=4859 + _DELETEFIELDINDEXCOLLECTION._serialized_end=5019 + _PAYLOADINCLUDESELECTOR._serialized_start=5021 + _PAYLOADINCLUDESELECTOR._serialized_end=5061 + _PAYLOADEXCLUDESELECTOR._serialized_start=5063 + _PAYLOADEXCLUDESELECTOR._serialized_end=5103 + _WITHPAYLOADSELECTOR._serialized_start=5106 + _WITHPAYLOADSELECTOR._serialized_end=5267 + _NAMEDVECTORS._serialized_start=5270 + _NAMEDVECTORS._serialized_end=5400 + _NAMEDVECTORS_VECTORSENTRY._serialized_start=5338 + _NAMEDVECTORS_VECTORSENTRY._serialized_end=5400 + _NAMEDVECTORSOUTPUT._serialized_start=5403 + _NAMEDVECTORSOUTPUT._serialized_end=5551 + _NAMEDVECTORSOUTPUT_VECTORSENTRY._serialized_start=5483 + _NAMEDVECTORSOUTPUT_VECTORSENTRY._serialized_end=5551 + _VECTORS._serialized_start=5553 + _VECTORS._serialized_end=5656 + _VECTORSOUTPUT._serialized_start=5658 + _VECTORSOUTPUT._serialized_end=5779 + _VECTORSSELECTOR._serialized_start=5781 + _VECTORSSELECTOR._serialized_end=5813 + _WITHVECTORSSELECTOR._serialized_start=5815 + _WITHVECTORSSELECTOR._serialized_end=5918 + _QUANTIZATIONSEARCHPARAMS._serialized_start=5921 + _QUANTIZATIONSEARCHPARAMS._serialized_end=6057 + _SEARCHPARAMS._serialized_start=6060 + _SEARCHPARAMS._serialized_end=6260 + _SEARCHPOINTS._serialized_start=6263 + _SEARCHPOINTS._serialized_end=6921 + _SEARCHBATCHPOINTS._serialized_start=6924 + _SEARCHBATCHPOINTS._serialized_end=7124 + _WITHLOOKUP._serialized_start=7127 + _WITHLOOKUP._serialized_end=7305 + _SEARCHPOINTGROUPS._serialized_start=7308 + _SEARCHPOINTGROUPS._serialized_end=8033 + _STARTFROM._serialized_start=8035 + _STARTFROM._serialized_end=8160 + _ORDERBY._serialized_start=8163 + _ORDERBY._serialized_end=8301 + _SCROLLPOINTS._serialized_start=8304 + _SCROLLPOINTS._serialized_end=8830 + _LOOKUPLOCATION._serialized_start=8833 + _LOOKUPLOCATION._serialized_end=8998 + _RECOMMENDPOINTS._serialized_start=9001 + _RECOMMENDPOINTS._serialized_end=9846 + _RECOMMENDBATCHPOINTS._serialized_start=9849 + _RECOMMENDBATCHPOINTS._serialized_end=10058 + _RECOMMENDPOINTGROUPS._serialized_start=10061 + _RECOMMENDPOINTGROUPS._serialized_end=10973 + _TARGETVECTOR._serialized_start=10975 + _TARGETVECTOR._serialized_end=11040 + _VECTOREXAMPLE._serialized_start=11042 + _VECTOREXAMPLE._serialized_end=11133 + _CONTEXTEXAMPLEPAIR._serialized_start=11135 + _CONTEXTEXAMPLEPAIR._serialized_end=11237 + _DISCOVERPOINTS._serialized_start=11240 + _DISCOVERPOINTS._serialized_end=11894 + _DISCOVERBATCHPOINTS._serialized_start=11897 + _DISCOVERBATCHPOINTS._serialized_end=12103 + _COUNTPOINTS._serialized_start=12106 + _COUNTPOINTS._serialized_end=12399 + _RECOMMENDINPUT._serialized_start=12402 + _RECOMMENDINPUT._serialized_end=12559 + _CONTEXTINPUTPAIR._serialized_start=12561 + _CONTEXTINPUTPAIR._serialized_end=12657 + _DISCOVERINPUT._serialized_start=12659 + _DISCOVERINPUT._serialized_end=12750 + _CONTEXTINPUT._serialized_start=12752 + _CONTEXTINPUT._serialized_end=12807 + _QUERY._serialized_start=12810 + _QUERY._serialized_end=13102 + _PREFETCHQUERY._serialized_start=13105 + _PREFETCHQUERY._serialized_end=13484 + _QUERYPOINTS._serialized_start=13487 + _QUERYPOINTS._serialized_end=14260 + _QUERYBATCHPOINTS._serialized_start=14263 + _QUERYBATCHPOINTS._serialized_end=14460 + _QUERYPOINTGROUPS._serialized_start=14463 + _QUERYPOINTGROUPS._serialized_end=15307 + _FACETCOUNTS._serialized_start=15310 + _FACETCOUNTS._serialized_end=15662 + _FACETVALUE._serialized_start=15664 + _FACETVALUE._serialized_end=15758 + _FACETHIT._serialized_start=15760 + _FACETHIT._serialized_end=15820 + _SEARCHMATRIXPOINTS._serialized_start=15823 + _SEARCHMATRIXPOINTS._serialized_end=16201 + _SEARCHMATRIXPAIRS._serialized_start=16203 + _SEARCHMATRIXPAIRS._serialized_end=16263 + _SEARCHMATRIXPAIR._serialized_start=16265 + _SEARCHMATRIXPAIR._serialized_end=16354 + _SEARCHMATRIXOFFSETS._serialized_start=16356 + _SEARCHMATRIXOFFSETS._serialized_end=16465 + _POINTSUPDATEOPERATION._serialized_start=16468 + _POINTSUPDATEOPERATION._serialized_end=18793 + _POINTSUPDATEOPERATION_POINTSTRUCTLIST._serialized_start=17173 + _POINTSUPDATEOPERATION_POINTSTRUCTLIST._serialized_end=17309 + _POINTSUPDATEOPERATION_SETPAYLOAD._serialized_start=17312 + _POINTSUPDATEOPERATION_SETPAYLOAD._serialized_end=17641 + _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_start=3841 + _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_end=3902 + _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD._serialized_start=17644 + _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD._serialized_end=17985 + _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD_PAYLOADENTRY._serialized_start=3841 + _POINTSUPDATEOPERATION_OVERWRITEPAYLOAD_PAYLOADENTRY._serialized_end=3902 + _POINTSUPDATEOPERATION_DELETEPAYLOAD._serialized_start=17988 + _POINTSUPDATEOPERATION_DELETEPAYLOAD._serialized_end=18173 + _POINTSUPDATEOPERATION_UPDATEVECTORS._serialized_start=18176 + _POINTSUPDATEOPERATION_UPDATEVECTORS._serialized_end=18311 + _POINTSUPDATEOPERATION_DELETEVECTORS._serialized_start=18314 + _POINTSUPDATEOPERATION_DELETEVECTORS._serialized_end=18502 + _POINTSUPDATEOPERATION_DELETEPOINTS._serialized_start=18505 + _POINTSUPDATEOPERATION_DELETEPOINTS._serialized_end=18641 + _POINTSUPDATEOPERATION_CLEARPAYLOAD._serialized_start=18644 + _POINTSUPDATEOPERATION_CLEARPAYLOAD._serialized_end=18780 + _UPDATEBATCHPOINTS._serialized_start=18796 + _UPDATEBATCHPOINTS._serialized_end=18978 + _POINTSOPERATIONRESPONSE._serialized_start=18980 + _POINTSOPERATIONRESPONSE._serialized_end=19057 + _UPDATERESULT._serialized_start=19059 + _UPDATERESULT._serialized_end=19155 + _ORDERVALUE._serialized_start=19157 + _ORDERVALUE._serialized_end=19212 + _SCOREDPOINT._serialized_start=19215 + _SCOREDPOINT._serialized_end=19584 + _SCOREDPOINT_PAYLOADENTRY._serialized_start=3841 + _SCOREDPOINT_PAYLOADENTRY._serialized_end=3902 + _GROUPID._serialized_start=19586 + _GROUPID._serialized_end=19678 + _POINTGROUP._serialized_start=19680 + _POINTGROUP._serialized_end=19796 + _GROUPSRESULT._serialized_start=19798 + _GROUPSRESULT._serialized_end=19848 + _SEARCHRESPONSE._serialized_start=19850 + _SEARCHRESPONSE._serialized_end=19917 + _QUERYRESPONSE._serialized_start=19919 + _QUERYRESPONSE._serialized_end=19985 + _QUERYBATCHRESPONSE._serialized_start=19987 + _QUERYBATCHRESPONSE._serialized_end=20058 + _QUERYGROUPSRESPONSE._serialized_start=20060 + _QUERYGROUPSRESPONSE._serialized_end=20133 + _BATCHRESULT._serialized_start=20135 + _BATCHRESULT._serialized_end=20185 + _SEARCHBATCHRESPONSE._serialized_start=20187 + _SEARCHBATCHRESPONSE._serialized_end=20259 + _SEARCHGROUPSRESPONSE._serialized_start=20261 + _SEARCHGROUPSRESPONSE._serialized_end=20335 + _COUNTRESPONSE._serialized_start=20337 + _COUNTRESPONSE._serialized_end=20403 + _SCROLLRESPONSE._serialized_start=20406 + _SCROLLRESPONSE._serialized_end=20545 + _COUNTRESULT._serialized_start=20547 + _COUNTRESULT._serialized_end=20575 + _RETRIEVEDPOINT._serialized_start=20578 + _RETRIEVEDPOINT._serialized_end=20921 + _RETRIEVEDPOINT_PAYLOADENTRY._serialized_start=3841 + _RETRIEVEDPOINT_PAYLOADENTRY._serialized_end=3902 + _GETRESPONSE._serialized_start=20923 + _GETRESPONSE._serialized_end=20990 + _RECOMMENDRESPONSE._serialized_start=20992 + _RECOMMENDRESPONSE._serialized_end=21062 + _RECOMMENDBATCHRESPONSE._serialized_start=21064 + _RECOMMENDBATCHRESPONSE._serialized_end=21139 + _DISCOVERRESPONSE._serialized_start=21141 + _DISCOVERRESPONSE._serialized_end=21210 + _DISCOVERBATCHRESPONSE._serialized_start=21212 + _DISCOVERBATCHRESPONSE._serialized_end=21286 + _RECOMMENDGROUPSRESPONSE._serialized_start=21288 + _RECOMMENDGROUPSRESPONSE._serialized_end=21365 + _UPDATEBATCHRESPONSE._serialized_start=21367 + _UPDATEBATCHRESPONSE._serialized_end=21440 + _FACETRESPONSE._serialized_start=21442 + _FACETRESPONSE._serialized_end=21503 + _SEARCHMATRIXPAIRSRESPONSE._serialized_start=21505 + _SEARCHMATRIXPAIRSRESPONSE._serialized_end=21589 + _SEARCHMATRIXOFFSETSRESPONSE._serialized_start=21591 + _SEARCHMATRIXOFFSETSRESPONSE._serialized_end=21679 + _FILTER._serialized_start=21682 + _FILTER._serialized_end=21854 + _MINSHOULD._serialized_start=21856 + _MINSHOULD._serialized_end=21925 + _CONDITION._serialized_start=21928 + _CONDITION._serialized_end=22209 + _ISEMPTYCONDITION._serialized_start=22211 + _ISEMPTYCONDITION._serialized_end=22242 + _ISNULLCONDITION._serialized_start=22244 + _ISNULLCONDITION._serialized_end=22274 + _HASIDCONDITION._serialized_start=22276 + _HASIDCONDITION._serialized_end=22325 + _NESTEDCONDITION._serialized_start=22327 + _NESTEDCONDITION._serialized_end=22389 + _FIELDCONDITION._serialized_start=22392 + _FIELDCONDITION._serialized_end=22701 + _MATCH._serialized_start=22704 + _MATCH._serialized_end=22995 + _REPEATEDSTRINGS._serialized_start=22997 + _REPEATEDSTRINGS._serialized_end=23031 + _REPEATEDINTEGERS._serialized_start=23033 + _REPEATEDINTEGERS._serialized_end=23069 + _RANGE._serialized_start=23071 + _RANGE._serialized_end=23178 + _DATETIMERANGE._serialized_start=23181 + _DATETIMERANGE._serialized_end=23408 + _GEOBOUNDINGBOX._serialized_start=23410 + _GEOBOUNDINGBOX._serialized_end=23502 + _GEORADIUS._serialized_start=23504 + _GEORADIUS._serialized_end=23565 + _GEOLINESTRING._serialized_start=23567 + _GEOLINESTRING._serialized_end=23616 + _GEOPOLYGON._serialized_start=23618 + _GEOPOLYGON._serialized_end=23713 + _VALUESCOUNT._serialized_start=23715 + _VALUESCOUNT._serialized_end=23828 + _POINTSSELECTOR._serialized_start=23830 + _POINTSSELECTOR._serialized_end=23947 + _POINTSIDSLIST._serialized_start=23949 + _POINTSIDSLIST._serialized_end=23994 + _POINTSTRUCT._serialized_start=23997 + _POINTSTRUCT._serialized_end=24210 + _POINTSTRUCT_PAYLOADENTRY._serialized_start=3841 + _POINTSTRUCT_PAYLOADENTRY._serialized_end=3902 + _GEOPOINT._serialized_start=24212 + _GEOPOINT._serialized_end=24248 # @@protoc_insertion_point(module_scope) diff --git a/qdrant_client/proto/points.proto b/qdrant_client/proto/points.proto index 03fa593c..618733d9 100644 --- a/qdrant_client/proto/points.proto +++ b/qdrant_client/proto/points.proto @@ -46,11 +46,48 @@ message SparseIndices { repeated uint32 data = 1; } +message Document { + string text = 1; // Text of the document + optional string model = 3; // Model name + map options = 4; // Model options +} + +message Image { + string image = 1; // Image data, either base64 encoded or URL + optional string model = 2; // Model name + map options = 3; // Model options +} + +message InferenceObject { + Value object = 1; // Object to infer + optional string model = 2; // Model name + map options = 3; // Model options +} + // Legacy vector format, which determines the vector type by the configuration of its fields. message Vector { - repeated float data = 1; // Vector data (flatten for multi vectors) - optional SparseIndices indices = 2; // Sparse indices for sparse vectors - optional uint32 vectors_count = 3; // Number of vectors per multi vector + repeated float data = 1; // Vector data (flatten for multi vectors), deprecated + optional SparseIndices indices = 2; // Sparse indices for sparse vectors, deprecated + optional uint32 vectors_count = 3; // Number of vectors per multi vector, deprecated + oneof vector { + DenseVector dense = 101; // Dense vector + SparseVector sparse = 102; // Sparse vector + MultiDenseVector multi_dense = 103; // Multi dense vector + Document document = 104; + Image image = 105; + InferenceObject object = 106; + } +} + +message VectorOutput { + repeated float data = 1; // Vector data (flatten for multi vectors), deprecated + optional SparseIndices indices = 2; // Sparse indices for sparse vectors, deprecated + optional uint32 vectors_count = 3; // Number of vectors per multi vector, deprecated + oneof vector { + DenseVector dense = 101; // Dense vector + SparseVector sparse = 102; // Sparse vector + MultiDenseVector multi_dense = 103; // Multi dense vector + } } message DenseVector { @@ -73,6 +110,9 @@ message VectorInput { DenseVector dense = 2; SparseVector sparse = 3; MultiDenseVector multi_dense = 4; + Document document = 5; + Image image = 6; + InferenceObject object = 7; } } @@ -214,6 +254,10 @@ message NamedVectors { map vectors = 1; } +message NamedVectorsOutput { + map vectors = 1; +} + message Vectors { oneof vectors_options { Vector vector = 1; @@ -221,6 +265,13 @@ message Vectors { } } +message VectorsOutput { + oneof vectors_options { + VectorOutput vector = 1; + NamedVectorsOutput vectors = 2; + } +} + message VectorsSelector { repeated string names = 1; // List of vectors to include into result } @@ -737,7 +788,7 @@ message ScoredPoint { float score = 3; // Similarity score reserved 4; // deprecated "vector" field uint64 version = 5; // Last update operation applied to this point - optional Vectors vectors = 6; // Vectors to search + optional VectorsOutput vectors = 6; // Vectors to search optional ShardKey shard_key = 7; // Shard key optional OrderValue order_value = 8; // Order by value } @@ -816,7 +867,7 @@ message RetrievedPoint { PointId id = 1; map payload = 2; reserved 3; // deprecated "vector" field - optional Vectors vectors = 4; + optional VectorsOutput vectors = 4; optional ShardKey shard_key = 5; // Shard key optional OrderValue order_value = 6; // Order-by value } diff --git a/tests/conversions/fixtures.py b/tests/conversions/fixtures.py index cfbae2a8..3d8a550c 100644 --- a/tests/conversions/fixtures.py +++ b/tests/conversions/fixtures.py @@ -5,7 +5,7 @@ from google.protobuf.timestamp_pb2 import Timestamp from qdrant_client import grpc as grpc -from qdrant_client.conversions.conversion import payload_to_grpc +from qdrant_client.conversions.conversion import payload_to_grpc, json_to_value from qdrant_client.grpc import SparseIndices point_id = grpc.PointId(num=1) @@ -291,16 +291,66 @@ multi_vector = grpc.Vectors( vector=grpc.Vector(data=[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0], vectors_count=2) ) +single_dense_vector = grpc.Vectors( + vector=grpc.Vector(dense=grpc.DenseVector(data=[1.0, 2.0, 3.0])) +) +single_sparse_vector = grpc.Vectors( + vectors=grpc.NamedVectors( + vectors={ + "sparse": grpc.Vector( + sparse=grpc.SparseVector(values=[1.0, 2.0, 3.0], indices=[1, 2, 3]) + ) + } + ) +) +single_multidense_vector = grpc.Vectors( + vector=grpc.Vector( + multi_dense=grpc.MultiDenseVector(vectors=[grpc.DenseVector(data=[1.0, 2.0, 3.0])]) + ) +) +document_with_options = grpc.Document( + text="random text", model="bert", options=payload_to_grpc({"a": 2, "b": [1, 2], "c": "useful"}) +) +document_without_options = grpc.Document(text="random text", model="bert") +document_only_text = grpc.Document(text="random text") +image_with_options = grpc.Image( + image="base64", model="resnet", options=payload_to_grpc({"a": 2, "b": [1, 2], "c": "useful"}) +) +image_without_options = grpc.Image(image="base64", model="resnet") +image_only_image = grpc.Image(image="base64") +inference_object_with_options = grpc.InferenceObject( + object=json_to_value("text"), + model="bert", + options=payload_to_grpc({"a": 2, "b": [1, 2], "c": "useful"}), +) +inference_object_without_options = grpc.InferenceObject(object=json_to_value("text"), model="bert") +inference_object_only_object = grpc.InferenceObject(object=json_to_value("text")) order_value_int = grpc.OrderValue(int=42) order_value_float = grpc.OrderValue(float=42.0) +single_vector_output = grpc.VectorsOutput(vector=grpc.VectorOutput(data=[1.0, 2.0, 3.0, 4.0])) +multi_vector_output = grpc.VectorsOutput( + vector=grpc.VectorOutput(data=[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0], vectors_count=2) +) +named_vectors_output = grpc.VectorsOutput( + vectors=grpc.NamedVectorsOutput( + vectors={ + "sparse": grpc.VectorOutput( + data=[1.0, 2.0, 3.0, 4.0], indices=grpc.SparseIndices(data=[1, 2, 3, 4]) + ), + "dense": grpc.VectorOutput(data=[1.0, 2.0, 3.0, 4.0]), + "multi": multi_vector_output.vector, + } + ) +) + scored_point = grpc.ScoredPoint( - id=point_id, payload=payload, score=0.99, vectors=single_vector, version=12 + id=point_id, payload=payload, score=0.99, vectors=single_vector_output, version=12 ) scored_point_order_value_int = grpc.ScoredPoint( id=point_id, payload=payload, score=0.99, - vectors=single_vector, + vectors=single_vector_output, version=12, order_value=order_value_int, ) @@ -308,15 +358,15 @@ id=point_id, payload=payload, score=0.99, - vectors=single_vector, + vectors=named_vectors_output, version=12, - order_value=order_value_int, + order_value=order_value_float, ) scored_point_multivector = grpc.ScoredPoint( id=point_id, payload=payload, score=0.99, - vectors=multi_vector, + vectors=multi_vector_output, version=12, order_value=order_value_float, ) @@ -678,6 +728,24 @@ payload=payload_to_grpc({"my_payload": payload_value}), ) +point_struct_doc = grpc.PointStruct( + id=point_id_1, + vectors=grpc.Vectors(vector=grpc.Vector(document=document_with_options)), + payload=payload_to_grpc({"my_payload": payload_value}), +) + +point_struct_image = grpc.PointStruct( + id=point_id_1, + vectors=grpc.Vectors(vector=grpc.Vector(image=image_with_options)), + payload=payload_to_grpc({"my_payload": payload_value}), +) + +point_struct_obj = grpc.PointStruct( + id=point_id_1, + vectors=grpc.Vectors(vector=grpc.Vector(object=inference_object_with_options)), + payload=payload_to_grpc({"my_payload": payload_value}), +) + many_vectors = grpc.Vectors( vectors=grpc.NamedVectors( vectors={ @@ -687,6 +755,9 @@ data=[1.0, 2.0, -1.0, -0.2], indices=SparseIndices(data=[1, 2, 3]) ), "multi": grpc.Vector(data=[1.0, 2.0, 3.0, 4.0], vectors_count=2), + "doc_raw": grpc.Vector(document=document_with_options), + "image_raw": grpc.Vector(image=image_with_options), + "obj_raw": grpc.Vector(object=inference_object_with_options), } ) ) @@ -776,13 +847,13 @@ retrieved_point = grpc.RetrievedPoint( id=point_id_1, payload=payload_to_grpc({"key": payload_value}), - vectors=single_vector, + vectors=single_vector_output, ) retrieved_point_with_order_value = grpc.RetrievedPoint( id=point_id_1, payload=payload_to_grpc({"key": payload_value}), - vectors=single_vector, + vectors=single_vector_output, order_value=order_value_int, ) @@ -834,6 +905,7 @@ vector_name="abc", with_vectors=grpc.WithVectorsSelector(include=grpc.VectorsSelector(names=["abc", "def"])), shard_key_selector=shard_key_selector, + sparse_indices=grpc.SparseIndices(data=[1, 2, 3]), ) search_points_all_vectors = grpc.SearchPoints( @@ -961,6 +1033,12 @@ vectors=many_vectors, ) +point_vector_3 = grpc.PointVectors(id=point_id_1, vectors=single_dense_vector) + +point_vector_4 = grpc.PointVectors(id=point_id_1, vectors=single_sparse_vector) + +point_vector_5 = grpc.PointVectors(id=point_id_1, vectors=single_multidense_vector) + group_id_1 = grpc.GroupId(unsigned_value=123) group_id_2 = grpc.GroupId(integer_value=-456) group_id_3 = grpc.GroupId(string_value="abc") @@ -1172,10 +1250,37 @@ vector_input_dense_2 = grpc.VectorInput(dense=dense_vector_2) vector_input_sparse = grpc.VectorInput(sparse=sparse_vector) vector_input_multi = grpc.VectorInput(multi_dense=multi_dense_vector) +vector_input_doc_with_options = grpc.VectorInput(document=document_with_options) +vector_input_doc_without_options = grpc.VectorInput(document=document_without_options) +vector_input_doc_only_text = grpc.VectorInput(document=document_only_text) +vector_input_image_with_options = grpc.VectorInput(image=image_with_options) +vector_input_image_without_options = grpc.VectorInput(image=image_without_options) +vector_input_image_only_image = grpc.VectorInput(image=image_only_image) +vector_input_inference_with_options = grpc.VectorInput(object=inference_object_with_options) +vector_input_inference_without_options = grpc.VectorInput(object=inference_object_without_options) +vector_input_inference_only_object = grpc.VectorInput(object=inference_object_only_object) + recommend_input = grpc.RecommendInput( - positive=[vector_input_dense], + positive=[ + vector_input_dense, + ], negative=[vector_input_dense_2], ) +recommend_input_raw = grpc.RecommendInput( + positive=[ + vector_input_doc_with_options, + vector_input_doc_without_options, + vector_input_doc_only_text, + ], + negative=[ + vector_input_image_with_options, + vector_input_image_without_options, + vector_input_image_only_image, + vector_input_inference_with_options, + vector_input_inference_without_options, + vector_input_inference_only_object, + ], +) recommend_input_strategy = grpc.RecommendInput( positive=[vector_input_id], strategy=recommend_strategy, @@ -1190,6 +1295,7 @@ query_nearest = grpc.Query(nearest=vector_input_sparse) query_recommend = grpc.Query(recommend=recommend_input) query_recommend_id = grpc.Query(recommend=recommend_input_strategy) +query_recommend_raw = grpc.Query(recommend=recommend_input_raw) query_discover = grpc.Query(discover=discover_input) query_context = grpc.Query(context=context_input) query_order_by = grpc.Query(order_by=order_by) @@ -1291,7 +1397,13 @@ "IsEmptyCondition": [is_empty], "IsNullCondition": [is_null], "DeleteAlias": [delete_alias], - "PointStruct": [point_struct, point_struct_many], + "PointStruct": [ + point_struct, + point_struct_many, + point_struct_doc, + point_struct_image, + point_struct_obj, + ], "CollectionDescription": [collection_description], "GeoPoint": [geo_point], "WalConfigDiff": [wal_config], @@ -1354,7 +1466,13 @@ "QuantizationConfig": [quantization_config, binary_quantization_config] + product_quantizations, "QuantizationSearchParams": [quantization_search_params], - "PointVectors": [point_vector_1, point_vector_2], + "PointVectors": [ + point_vector_1, + point_vector_2, + # point_vector_3, # todo: uncomment as of 1.14.0 + # point_vector_4, # todo: uncomment as of 1.14.0 + # point_vector_5, # todo: uncomment as of 1.14.0 + ], "GroupId": [group_id_1, group_id_2, group_id_3], "GroupsResult": [group_result], "WithLookup": [with_lookup], @@ -1389,6 +1507,7 @@ "Query": [ query_nearest, query_recommend, + query_recommend_raw, query_discover, query_context, query_order_by, diff --git a/tests/conversions/test_validate_conversions.py b/tests/conversions/test_validate_conversions.py index 352005d8..33b17909 100644 --- a/tests/conversions/test_validate_conversions.py +++ b/tests/conversions/test_validate_conversions.py @@ -377,3 +377,63 @@ def test_query_points(): assert recovered.using == query_request.using assert recovered.with_payload == query_request.with_payload assert recovered.prefetch[0] == query_request.prefetch + + +def test_extended_vectors(): + # todo: test in fixtures.py from v1.14.0 + import numpy as np + + from qdrant_client import grpc, models + from qdrant_client.conversions.conversion import GrpcToRest + + # region grpc.Vector + dense_vector = grpc.Vector(dense=grpc.DenseVector(data=[0.2, 0.3, 0.4])) + sparse_vector = grpc.Vector( + sparse=grpc.SparseVector(values=[0.1, 0.2, 0.3], indices=[1, 42, 240]) + ) + multi_dense_vector = grpc.Vector( + multi_dense=grpc.MultiDenseVector( + vectors=[ + grpc.DenseVector(data=[0.1, 0.3, 0.5]), + grpc.DenseVector(data=[0.2, 0.4, 0.6]), + ] + ) + ) + + rest_dense_vector = GrpcToRest.convert_vector(dense_vector) + rest_sparse_vector = GrpcToRest.convert_vector(sparse_vector) + rest_multi_dense_vector = GrpcToRest.convert_vector(multi_dense_vector) + assert np.allclose(rest_dense_vector, [0.2, 0.3, 0.4]) + assert ( + isinstance(rest_sparse_vector, models.SparseVector) + and np.allclose(rest_sparse_vector.values, [0.1, 0.2, 0.3]) + and rest_sparse_vector.indices == [1, 42, 240] + ) + assert np.allclose(rest_multi_dense_vector, np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])) + # endregion + + # region grpc.VectorOutput + dense_vector_output = grpc.VectorOutput(dense=grpc.DenseVector(data=[0.2, 0.3, 0.4])) + sparse_vector_output = grpc.VectorOutput( + sparse=grpc.SparseVector(values=[0.1, 0.2, 0.3], indices=[1, 42, 240]) + ) + multi_dense_vector_output = grpc.VectorOutput( + multi_dense=grpc.MultiDenseVector( + vectors=[ + grpc.DenseVector(data=[0.1, 0.3, 0.5]), + grpc.DenseVector(data=[0.2, 0.4, 0.6]), + ] + ) + ) + + rest_dense_vector = GrpcToRest.convert_vector_output(dense_vector_output) + rest_sparse_vector = GrpcToRest.convert_vector_output(sparse_vector_output) + rest_multi_dense_vector = GrpcToRest.convert_vector_output(multi_dense_vector_output) + assert np.allclose(rest_dense_vector, [0.2, 0.3, 0.4]) + assert ( + isinstance(rest_sparse_vector, models.SparseVector) + and np.allclose(rest_sparse_vector.values, [0.1, 0.2, 0.3]) + and rest_sparse_vector.indices == [1, 42, 240] + ) + assert np.allclose(rest_multi_dense_vector, np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])) + # endregion diff --git a/tests/coverage-test.sh b/tests/coverage-test.sh index b23bf8d4..2b969408 100755 --- a/tests/coverage-test.sh +++ b/tests/coverage-test.sh @@ -3,4 +3,6 @@ set -ex coverage run --include='qdrant_client/conversions/conversion.py' -m pytest tests/conversions/test_validate_conversions.py -vv -s -coverage report --fail-under=97 +coverage report --fail-under=98 + +#coverage html