From 3f56da7d02c51582869596309104bf2ef4cf7373 Mon Sep 17 00:00:00 2001 From: Andrey Vasnetsov Date: Mon, 6 Jan 2025 11:44:25 +0000 Subject: [PATCH] Update API to v1.13 (#874) * update openapi and grpc + conversions * add strict mode to conversions + coverage * add strict mode to collection creation * add local mode for has_vectors condition * regen async with python 3.10 * tests for has-vector * fix filters in tests * fix conversion * fix test * Has vector tests (#878) * new: add has vector fixture * tests: add has vector multivector test * fix: add missing strict mode config usage and conversion (#877) * fix: add missing strict mode config usage and conversion * fix: pass strict mode config in update collection * fix: add strict mode config to recreate collection --------- Co-authored-by: George --- qdrant_client/_pydantic_compat.py | 2 +- qdrant_client/async_qdrant_client.py | 9 + qdrant_client/async_qdrant_remote.py | 12 + qdrant_client/conversions/common_types.py | 1 + qdrant_client/conversions/conversion.py | 164 +++++++++- qdrant_client/embed/_inspection_cache.py | 1 + qdrant_client/embed/schema_parser.py | 2 +- qdrant_client/grpc/collections_pb2.py | 304 +++++++++--------- qdrant_client/grpc/points_pb2.py | 224 +++++++------ qdrant_client/http/api/points_api.py | 36 +-- qdrant_client/http/api/search_api.py | 78 ++--- qdrant_client/http/api/snapshots_api.py | 78 ++--- qdrant_client/http/models/models.py | 236 ++++++++++++-- qdrant_client/local/local_collection.py | 1 + qdrant_client/local/payload_filters.py | 65 +++- .../local/tests/test_payload_filters.py | 12 +- qdrant_client/proto/collections.proto | 31 +- qdrant_client/proto/points.proto | 27 ++ qdrant_client/qdrant_client.py | 9 + qdrant_client/qdrant_remote.py | 15 +- tests/congruence_tests/test_has_vector.py | 85 +++++ tests/conversions/fixtures.py | 41 ++- 22 files changed, 1016 insertions(+), 417 deletions(-) create mode 100644 tests/congruence_tests/test_has_vector.py diff --git a/qdrant_client/_pydantic_compat.py b/qdrant_client/_pydantic_compat.py index b3cdab130..5d0c0ce80 100644 --- a/qdrant_client/_pydantic_compat.py +++ b/qdrant_client/_pydantic_compat.py @@ -48,7 +48,7 @@ def model_fields_set(model: BaseModel) -> set: return model.__fields_set__ -def model_json_schema(model: BaseModel, *args: Any, **kwargs: Any) -> dict[str, Any]: +def model_json_schema(model: Type[BaseModel], *args: Any, **kwargs: Any) -> dict[str, Any]: if PYDANTIC_V2: return model.model_json_schema(*args, **kwargs) else: diff --git a/qdrant_client/async_qdrant_client.py b/qdrant_client/async_qdrant_client.py index ef6673ffc..78af434d3 100644 --- a/qdrant_client/async_qdrant_client.py +++ b/qdrant_client/async_qdrant_client.py @@ -2100,6 +2100,7 @@ async def update_collection( quantization_config: Optional[types.QuantizationConfigDiff] = None, timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: """Update parameters of the collection @@ -2115,6 +2116,7 @@ async def update_collection( Wait for operation commit timeout in seconds. If timeout is reached - request will return with service error. sparse_vectors_config: Override for sparse vector-specific configuration + strict_mode_config: Override for strict mode configuration Returns: Operation result """ @@ -2134,6 +2136,7 @@ async def update_collection( quantization_config=quantization_config, timeout=timeout, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, **kwargs, ) @@ -2172,6 +2175,7 @@ async def create_collection( quantization_config: Optional[types.QuantizationConfig] = None, init_from: Optional[types.InitFrom] = None, timeout: Optional[int] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: """Create empty collection with given parameters @@ -2217,6 +2221,7 @@ async def create_collection( timeout: Wait for operation commit timeout in seconds. If timeout is reached - request will return with service error. + strict_mode_config: Configure limitations for the collection, such as max size, rate limits, etc. Returns: Operation result @@ -2237,6 +2242,7 @@ async def create_collection( init_from=init_from, timeout=timeout, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, **kwargs, ) @@ -2256,6 +2262,7 @@ async def recreate_collection( quantization_config: Optional[types.QuantizationConfig] = None, init_from: Optional[types.InitFrom] = None, timeout: Optional[int] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: """Delete and create empty collection with given parameters @@ -2301,6 +2308,7 @@ async def recreate_collection( timeout: Wait for operation commit timeout in seconds. If timeout is reached - request will return with service error. + strict_mode_config: Configure limitations for the collection, such as max size, rate limits, etc. Returns: Operation result @@ -2326,6 +2334,7 @@ async def recreate_collection( init_from=init_from, timeout=timeout, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, **kwargs, ) diff --git a/qdrant_client/async_qdrant_remote.py b/qdrant_client/async_qdrant_remote.py index 7686d335c..062036a7a 100644 --- a/qdrant_client/async_qdrant_remote.py +++ b/qdrant_client/async_qdrant_remote.py @@ -2333,6 +2333,7 @@ async def update_collection( quantization_config: Optional[types.QuantizationConfigDiff] = None, timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: if self._prefer_grpc: @@ -2352,6 +2353,8 @@ async def update_collection( sparse_vectors_config = RestToGrpc.convert_sparse_vector_config( sparse_vectors_config ) + if isinstance(strict_mode_config, models.StrictModeConfig): + strict_mode_config = RestToGrpc.convert_strict_mode_config(strict_mode_config) return ( await self.grpc_collections.Update( grpc.UpdateCollection( @@ -2362,6 +2365,7 @@ async def update_collection( hnsw_config=hnsw_config, quantization_config=quantization_config, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, timeout=timeout, ), timeout=timeout if timeout is not None else self._timeout, @@ -2387,6 +2391,7 @@ async def update_collection( hnsw_config=hnsw_config, quantization_config=quantization_config, sparse_vectors=sparse_vectors_config, + strict_mode_config=strict_mode_config, ), timeout=timeout, ) @@ -2426,6 +2431,7 @@ async def create_collection( timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, sharding_method: Optional[types.ShardingMethod] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: if init_from is not None: @@ -2449,6 +2455,8 @@ async def create_collection( ) if isinstance(sharding_method, models.ShardingMethod): sharding_method = RestToGrpc.convert_sharding_method(sharding_method) + if isinstance(strict_mode_config, models.StrictModeConfig): + strict_mode_config = RestToGrpc.convert_strict_mode_config(strict_mode_config) create_collection = grpc.CreateCollection( collection_name=collection_name, hnsw_config=hnsw_config, @@ -2464,6 +2472,7 @@ async def create_collection( quantization_config=quantization_config, sparse_vectors_config=sparse_vectors_config, sharding_method=sharding_method, + strict_mode_config=strict_mode_config, ) return ( await self.grpc_collections.Create(create_collection, timeout=self._timeout) @@ -2491,6 +2500,7 @@ async def create_collection( init_from=init_from, sparse_vectors=sparse_vectors_config, sharding_method=sharding_method, + strict_mode_config=strict_mode_config, ) result: Optional[bool] = ( await self.http.collections_api.create_collection( @@ -2518,6 +2528,7 @@ async def recreate_collection( timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, sharding_method: Optional[types.ShardingMethod] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: await self.delete_collection(collection_name, timeout=timeout) @@ -2536,6 +2547,7 @@ async def recreate_collection( timeout=timeout, sparse_vectors_config=sparse_vectors_config, sharding_method=sharding_method, + strict_mode_config=strict_mode_config, ) @property diff --git a/qdrant_client/conversions/common_types.py b/qdrant_client/conversions/common_types.py index 9a34f889b..c0fe2b75b 100644 --- a/qdrant_client/conversions/common_types.py +++ b/qdrant_client/conversions/common_types.py @@ -117,6 +117,7 @@ def get_args_subscribed(tp): # type: ignore Document: TypeAlias = rest.Document Image: TypeAlias = rest.Image InferenceObject: TypeAlias = rest.InferenceObject +StrictModeConfig: TypeAlias = rest.StrictModeConfig SearchRequest = Union[rest.SearchRequest, grpc.SearchPoints] RecommendRequest = Union[rest.RecommendRequest, grpc.RecommendPoints] diff --git a/qdrant_client/conversions/conversion.py b/qdrant_client/conversions/conversion.py index 140ef03a3..4e2fec5d4 100644 --- a/qdrant_client/conversions/conversion.py +++ b/qdrant_client/conversions/conversion.py @@ -150,6 +150,8 @@ def convert_condition(cls, model: grpc.Condition) -> rest.Condition: return cls.convert_filter(val) if name == "has_id": return cls.convert_has_id_condition(val) + if name == "has_vector": + return cls.convert_has_vector_condition(val) if name == "is_empty": return cls.convert_is_empty_condition(val) if name == "is_null": @@ -242,6 +244,9 @@ def convert_collection_config(cls, model: grpc.CollectionConfig) -> rest.Collect if model.HasField("quantization_config") else None ), + strict_mode_config=cls.convert_strict_mode_config(model.strict_mode_config) + if model.HasField("strict_mode_config") + else None, ) @classmethod @@ -274,8 +279,39 @@ def convert_hnsw_config(cls, model: grpc.HnswConfigDiff) -> rest.HnswConfig: payload_m=model.payload_m if model.HasField("payload_m") else None, ) + @classmethod + def convert_max_optimization_threads( + cls, model: grpc.MaxOptimizationThreads + ) -> rest.MaxOptimizationThreads: + name = model.WhichOneof("variant") + if name is None: + raise ValueError(f"invalid MaxOptimizationThreads model: {model}") # pragma: no cover + val = getattr(model, name) + + if name == "setting": + if val == grpc.MaxOptimizationThreads.Setting.Auto: + return rest.MaxOptimizationThreadsSetting.AUTO + else: + raise ValueError( + f"invalid MaxOptimizationThreads model: {model}" + ) # pragma: no cover + elif name == "value": + return val + else: + raise ValueError(f"invalid MaxOptimizationThreads model: {model}") # pragma: no cover + @classmethod def convert_optimizer_config(cls, model: grpc.OptimizersConfigDiff) -> rest.OptimizersConfig: + max_optimization_threads = None + if model.HasField("deprecated_max_optimization_threads"): + max_optimization_threads = model.deprecated_max_optimization_threads + elif model.HasField("max_optimization_threads"): + max_optimization_threads = cls.convert_max_optimization_threads( + model.max_optimization_threads + ) + if not isinstance(max_optimization_threads, int): + max_optimization_threads = None + return rest.OptimizersConfig( default_segment_number=( model.default_segment_number if model.HasField("default_segment_number") else None @@ -289,11 +325,7 @@ def convert_optimizer_config(cls, model: grpc.OptimizersConfigDiff) -> rest.Opti indexing_threshold=( model.indexing_threshold if model.HasField("indexing_threshold") else None ), - max_optimization_threads=( - model.max_optimization_threads - if model.HasField("max_optimization_threads") - else None - ), + max_optimization_threads=max_optimization_threads, max_segment_size=( model.max_segment_size if model.HasField("max_segment_size") else None ), @@ -432,6 +464,12 @@ def convert_update_status(cls, model: grpc.UpdateStatus) -> rest.UpdateStatus: def convert_has_id_condition(cls, model: grpc.HasIdCondition) -> rest.HasIdCondition: return rest.HasIdCondition(has_id=[cls.convert_point_id(idx) for idx in model.has_id]) + @classmethod + def convert_has_vector_condition( + cls, model: grpc.HasVectorCondition + ) -> rest.HasVectorCondition: + return rest.HasVectorCondition(has_vector=model.has_vector) + @classmethod def convert_point_id(cls, model: grpc.PointId) -> rest.ExtendedPointId: name = model.WhichOneof("point_id_options") @@ -652,6 +690,14 @@ def convert_collection_params(cls, model: grpc.CollectionParams) -> rest.Collect def convert_optimizers_config_diff( cls, model: grpc.OptimizersConfigDiff ) -> rest.OptimizersConfigDiff: + max_optimization_threads = None + if model.HasField("deprecated_max_optimization_threads"): + max_optimization_threads = model.deprecated_max_optimization_threads + elif model.HasField("max_optimization_threads"): + max_optimization_threads = cls.convert_max_optimization_threads( + model.max_optimization_threads + ) + return rest.OptimizersConfigDiff( default_segment_number=( model.default_segment_number if model.HasField("default_segment_number") else None @@ -665,11 +711,7 @@ def convert_optimizers_config_diff( indexing_threshold=( model.indexing_threshold if model.HasField("indexing_threshold") else None ), - max_optimization_threads=( - model.max_optimization_threads - if model.HasField("max_optimization_threads") - else None - ), + max_optimization_threads=max_optimization_threads, max_segment_size=( model.max_segment_size if model.HasField("max_segment_size") else None ), @@ -1424,9 +1466,10 @@ def convert_geo_index_params(cls, model: grpc.GeoIndexParams) -> rest.GeoIndexPa ) @classmethod - def convert_bool_index_params(cls, _: grpc.BoolIndexParams) -> rest.BoolIndexParams: + def convert_bool_index_params(cls, model: grpc.BoolIndexParams) -> rest.BoolIndexParams: return rest.BoolIndexParams( type=rest.BoolIndexType.BOOL, + on_disk=model.on_disk if model.HasField("on_disk") else None, ) @classmethod @@ -1979,6 +2022,42 @@ def convert_search_matrix_offsets( ids=[cls.convert_point_id(p_id) for p_id in model.ids], ) + @classmethod + def convert_strict_mode_config(cls, model: grpc.StrictModeConfig) -> rest.StrictModeConfig: + return rest.StrictModeConfig( + enabled=model.enabled if model.HasField("enabled") else None, + max_query_limit=model.max_query_limit if model.HasField("max_query_limit") else None, + max_timeout=model.max_timeout if model.HasField("max_timeout") else None, + unindexed_filtering_retrieve=model.unindexed_filtering_retrieve + if model.HasField("unindexed_filtering_retrieve") + else None, + unindexed_filtering_update=model.unindexed_filtering_update + if model.HasField("unindexed_filtering_update") + else None, + search_max_hnsw_ef=model.search_max_hnsw_ef + if model.HasField("search_max_hnsw_ef") + else None, + search_allow_exact=model.search_allow_exact + if model.HasField("search_allow_exact") + else None, + search_max_oversampling=model.search_max_oversampling + if model.HasField("search_max_oversampling") + else None, + upsert_max_batchsize=model.upsert_max_batchsize + if model.HasField("upsert_max_batchsize") + else None, + max_collection_vector_size_bytes=model.max_collection_vector_size_bytes + if model.HasField("max_collection_vector_size_bytes") + else None, + read_rate_limit=model.read_rate_limit if model.HasField("read_rate_limit") else None, + write_rate_limit=model.write_rate_limit + if model.HasField("write_rate_limit") + else None, + max_collection_payload_size_bytes=model.max_collection_payload_size_bytes + if model.HasField("max_collection_payload_size_bytes") + else None, + ) + # ---------------------------------------- # @@ -2182,6 +2261,12 @@ def convert_has_id_condition(cls, model: rest.HasIdCondition) -> grpc.HasIdCondi has_id=[cls.convert_extended_point_id(idx) for idx in model.has_id] ) + @classmethod + def convert_has_vector_condition( + cls, model: rest.HasVectorCondition + ) -> grpc.HasVectorCondition: + return grpc.HasVectorCondition(has_vector=model.has_vector) + @classmethod def convert_delete_alias(cls, model: rest.DeleteAlias) -> grpc.DeleteAlias: return grpc.DeleteAlias(alias_name=model.alias_name) @@ -2330,6 +2415,11 @@ def convert_collection_config(cls, model: rest.CollectionConfig) -> grpc.Collect if model.quantization_config is not None else None ), + strict_mode_config=( + cls.convert_strict_mode_config(model.strict_mode_config) + if model.strict_mode_config is not None + else None + ), ) @classmethod @@ -2386,6 +2476,16 @@ def convert_collection_params(cls, model: rest.CollectionParams) -> grpc.Collect ), ) + @classmethod + def convert_max_optimization_threads( + cls, model: rest.MaxOptimizationThreads + ) -> grpc.MaxOptimizationThreads: + if model == rest.MaxOptimizationThreadsSetting.AUTO: + return grpc.MaxOptimizationThreads(setting=grpc.MaxOptimizationThreads.Setting.Auto) + elif isinstance(model, int): + return grpc.MaxOptimizationThreads(value=model) + raise ValueError(f"invalid MaxOptimizationThreads model: {model}") # pragma: no cover + @classmethod def convert_optimizers_config(cls, model: rest.OptimizersConfig) -> grpc.OptimizersConfigDiff: return grpc.OptimizersConfigDiff( @@ -2393,25 +2493,39 @@ def convert_optimizers_config(cls, model: rest.OptimizersConfig) -> grpc.Optimiz deleted_threshold=model.deleted_threshold, flush_interval_sec=model.flush_interval_sec, indexing_threshold=model.indexing_threshold, - max_optimization_threads=model.max_optimization_threads, + max_optimization_threads=cls.convert_max_optimization_threads( + model.max_optimization_threads + ) + if model.max_optimization_threads is not None + else None, max_segment_size=model.max_segment_size, memmap_threshold=model.memmap_threshold, vacuum_min_vector_number=model.vacuum_min_vector_number, + deprecated_max_optimization_threads=model.max_optimization_threads, ) @classmethod def convert_optimizers_config_diff( cls, model: rest.OptimizersConfigDiff ) -> grpc.OptimizersConfigDiff: + deprecated_max_optimization_threads = None + if isinstance(model.max_optimization_threads, int): + deprecated_max_optimization_threads = model.max_optimization_threads + return grpc.OptimizersConfigDiff( default_segment_number=model.default_segment_number, deleted_threshold=model.deleted_threshold, flush_interval_sec=model.flush_interval_sec, indexing_threshold=model.indexing_threshold, - max_optimization_threads=model.max_optimization_threads, + max_optimization_threads=cls.convert_max_optimization_threads( + model.max_optimization_threads + ) + if model.max_optimization_threads is not None + else None, max_segment_size=model.max_segment_size, memmap_threshold=model.memmap_threshold, vacuum_min_vector_number=model.vacuum_min_vector_number, + deprecated_max_optimization_threads=deprecated_max_optimization_threads, ) @classmethod @@ -2608,6 +2722,8 @@ def convert_condition(cls, model: rest.Condition) -> grpc.Condition: return grpc.Condition(is_null=cls.convert_is_null_condition(model)) if isinstance(model, rest.HasIdCondition): return grpc.Condition(has_id=cls.convert_has_id_condition(model)) + if isinstance(model, rest.HasVectorCondition): + return grpc.Condition(has_vector=cls.convert_has_vector_condition(model)) if isinstance(model, rest.Filter): return grpc.Condition(filter=cls.convert_filter(model)) if isinstance(model, rest.NestedCondition): @@ -3317,8 +3433,8 @@ def convert_geo_index_params(cls, model: rest.GeoIndexParams) -> grpc.GeoIndexPa return grpc.GeoIndexParams(on_disk=model.on_disk) @classmethod - def convert_bool_index_params(cls, _: rest.BoolIndexParams) -> grpc.BoolIndexParams: - return grpc.BoolIndexParams() + def convert_bool_index_params(cls, model: rest.BoolIndexParams) -> grpc.BoolIndexParams: + return grpc.BoolIndexParams(on_disk=model.on_disk) @classmethod def convert_datetime_index_params( @@ -3864,3 +3980,21 @@ def convert_search_matrix_offsets( scores=list(model.scores), ids=[cls.convert_extended_point_id(p_id) for p_id in model.ids], ) + + @classmethod + def convert_strict_mode_config(cls, model: rest.StrictModeConfig) -> grpc.StrictModeConfig: + return grpc.StrictModeConfig( + enabled=model.enabled, + max_query_limit=model.max_query_limit, + max_timeout=model.max_timeout, + unindexed_filtering_retrieve=model.unindexed_filtering_retrieve, + unindexed_filtering_update=model.unindexed_filtering_update, + search_max_hnsw_ef=model.search_max_hnsw_ef, + search_allow_exact=model.search_allow_exact, + search_max_oversampling=model.search_max_oversampling, + upsert_max_batchsize=model.upsert_max_batchsize, + max_collection_vector_size_bytes=model.max_collection_vector_size_bytes, + read_rate_limit=model.read_rate_limit, + write_rate_limit=model.write_rate_limit, + max_collection_payload_size_bytes=model.max_collection_payload_size_bytes, + ) diff --git a/qdrant_client/embed/_inspection_cache.py b/qdrant_client/embed/_inspection_cache.py index 98f95cc02..cebfd8c5c 100644 --- a/qdrant_client/embed/_inspection_cache.py +++ b/qdrant_client/embed/_inspection_cache.py @@ -214,6 +214,7 @@ "Image": [], "InferenceObject": [], "StrictModeConfig": [], + "HasVectorCondition": [], } DEFS = { "AbortShardTransfer": { diff --git a/qdrant_client/embed/schema_parser.py b/qdrant_client/embed/schema_parser.py index 24dfc5349..534c417df 100644 --- a/qdrant_client/embed/schema_parser.py +++ b/qdrant_client/embed/schema_parser.py @@ -3,8 +3,8 @@ from typing import Type, Union, Any, Optional from pydantic import BaseModel -from pydantic.json_schema import model_json_schema +from qdrant_client._pydantic_compat import model_json_schema from qdrant_client.embed.utils import FieldPath, convert_paths diff --git a/qdrant_client/grpc/collections_pb2.py b/qdrant_client/grpc/collections_pb2.py index 4c6aef4c6..4f26d934a 100644 --- a/qdrant_client/grpc/collections_pb2.py +++ b/qdrant_client/grpc/collections_pb2.py @@ -15,7 +15,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x63ollections.proto\x12\x06qdrant\"\x83\x03\n\x0cVectorParams\x12\x0c\n\x04size\x18\x01 \x01(\x04\x12\"\n\x08\x64istance\x18\x02 \x01(\x0e\x32\x10.qdrant.Distance\x12\x30\n\x0bhnsw_config\x18\x03 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x00\x88\x01\x01\x12<\n\x13quantization_config\x18\x04 \x01(\x0b\x32\x1a.qdrant.QuantizationConfigH\x01\x88\x01\x01\x12\x14\n\x07on_disk\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\'\n\x08\x64\x61tatype\x18\x06 \x01(\x0e\x32\x10.qdrant.DatatypeH\x03\x88\x01\x01\x12:\n\x12multivector_config\x18\x07 \x01(\x0b\x32\x19.qdrant.MultiVectorConfigH\x04\x88\x01\x01\x42\x0e\n\x0c_hnsw_configB\x16\n\x14_quantization_configB\n\n\x08_on_diskB\x0b\n\t_datatypeB\x15\n\x13_multivector_config\"\xd0\x01\n\x10VectorParamsDiff\x12\x30\n\x0bhnsw_config\x18\x01 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x00\x88\x01\x01\x12@\n\x13quantization_config\x18\x02 \x01(\x0b\x32\x1e.qdrant.QuantizationConfigDiffH\x01\x88\x01\x01\x12\x14\n\x07on_disk\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_hnsw_configB\x16\n\x14_quantization_configB\n\n\x08_on_disk\"\x82\x01\n\x0fVectorParamsMap\x12-\n\x03map\x18\x01 \x03(\x0b\x32 .qdrant.VectorParamsMap.MapEntry\x1a@\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.qdrant.VectorParams:\x02\x38\x01\"\x8e\x01\n\x13VectorParamsDiffMap\x12\x31\n\x03map\x18\x01 \x03(\x0b\x32$.qdrant.VectorParamsDiffMap.MapEntry\x1a\x44\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.qdrant.VectorParamsDiff:\x02\x38\x01\"p\n\rVectorsConfig\x12&\n\x06params\x18\x01 \x01(\x0b\x32\x14.qdrant.VectorParamsH\x00\x12-\n\nparams_map\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorParamsMapH\x00\x42\x08\n\x06\x63onfig\"|\n\x11VectorsConfigDiff\x12*\n\x06params\x18\x01 \x01(\x0b\x32\x18.qdrant.VectorParamsDiffH\x00\x12\x31\n\nparams_map\x18\x02 \x01(\x0b\x32\x1b.qdrant.VectorParamsDiffMapH\x00\x42\x08\n\x06\x63onfig\"\x83\x01\n\x12SparseVectorParams\x12-\n\x05index\x18\x01 \x01(\x0b\x32\x19.qdrant.SparseIndexConfigH\x00\x88\x01\x01\x12\'\n\x08modifier\x18\x02 \x01(\x0e\x32\x10.qdrant.ModifierH\x01\x88\x01\x01\x42\x08\n\x06_indexB\x0b\n\t_modifier\"\x8e\x01\n\x12SparseVectorConfig\x12\x30\n\x03map\x18\x01 \x03(\x0b\x32#.qdrant.SparseVectorConfig.MapEntry\x1a\x46\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.qdrant.SparseVectorParams:\x02\x38\x01\"F\n\x11MultiVectorConfig\x12\x31\n\ncomparator\x18\x01 \x01(\x0e\x32\x1d.qdrant.MultiVectorComparator\"3\n\x18GetCollectionInfoRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"2\n\x17\x43ollectionExistsRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"\"\n\x10\x43ollectionExists\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\"R\n\x18\x43ollectionExistsResponse\x12(\n\x06result\x18\x01 \x01(\x0b\x32\x18.qdrant.CollectionExists\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\x18\n\x16ListCollectionsRequest\"%\n\x15\x43ollectionDescription\x12\x0c\n\x04name\x18\x01 \x01(\t\"Q\n\x19GetCollectionInfoResponse\x12&\n\x06result\x18\x01 \x01(\x0b\x32\x16.qdrant.CollectionInfo\x12\x0c\n\x04time\x18\x02 \x01(\x01\"[\n\x17ListCollectionsResponse\x12\x32\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x1d.qdrant.CollectionDescription\x12\x0c\n\x04time\x18\x02 \x01(\x01\",\n\x0fOptimizerStatus\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x90\x02\n\x0eHnswConfigDiff\x12\x0e\n\x01m\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x19\n\x0c\x65\x66_construct\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12 \n\x13\x66ull_scan_threshold\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x14max_indexing_threads\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07on_disk\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x16\n\tpayload_m\x18\x06 \x01(\x04H\x05\x88\x01\x01\x42\x04\n\x02_mB\x0f\n\r_ef_constructB\x16\n\x14_full_scan_thresholdB\x17\n\x15_max_indexing_threadsB\n\n\x08_on_diskB\x0c\n\n_payload_m\"\xa5\x01\n\x11SparseIndexConfig\x12 \n\x13\x66ull_scan_threshold\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07on_disk\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\'\n\x08\x64\x61tatype\x18\x03 \x01(\x0e\x32\x10.qdrant.DatatypeH\x02\x88\x01\x01\x42\x16\n\x14_full_scan_thresholdB\n\n\x08_on_diskB\x0b\n\t_datatype\"y\n\rWalConfigDiff\x12\x1c\n\x0fwal_capacity_mb\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x1f\n\x12wal_segments_ahead\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x12\n\x10_wal_capacity_mbB\x15\n\x13_wal_segments_ahead\"\xec\x03\n\x14OptimizersConfigDiff\x12\x1e\n\x11\x64\x65leted_threshold\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12%\n\x18vacuum_min_vector_number\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12#\n\x16\x64\x65\x66\x61ult_segment_number\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10max_segment_size\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1d\n\x10memmap_threshold\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x1f\n\x12indexing_threshold\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x1f\n\x12\x66lush_interval_sec\x18\x07 \x01(\x04H\x06\x88\x01\x01\x12%\n\x18max_optimization_threads\x18\x08 \x01(\x04H\x07\x88\x01\x01\x42\x14\n\x12_deleted_thresholdB\x1b\n\x19_vacuum_min_vector_numberB\x19\n\x17_default_segment_numberB\x13\n\x11_max_segment_sizeB\x13\n\x11_memmap_thresholdB\x15\n\x13_indexing_thresholdB\x15\n\x13_flush_interval_secB\x1b\n\x19_max_optimization_threads\"\x88\x01\n\x12ScalarQuantization\x12&\n\x04type\x18\x01 \x01(\x0e\x32\x18.qdrant.QuantizationType\x12\x15\n\x08quantile\x18\x02 \x01(\x02H\x00\x88\x01\x01\x12\x17\n\nalways_ram\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_quantileB\r\n\x0b_always_ram\"l\n\x13ProductQuantization\x12-\n\x0b\x63ompression\x18\x01 \x01(\x0e\x32\x18.qdrant.CompressionRatio\x12\x17\n\nalways_ram\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_always_ram\"<\n\x12\x42inaryQuantization\x12\x17\n\nalways_ram\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_always_ram\"\xb0\x01\n\x12QuantizationConfig\x12,\n\x06scalar\x18\x01 \x01(\x0b\x32\x1a.qdrant.ScalarQuantizationH\x00\x12.\n\x07product\x18\x02 \x01(\x0b\x32\x1b.qdrant.ProductQuantizationH\x00\x12,\n\x06\x62inary\x18\x03 \x01(\x0b\x32\x1a.qdrant.BinaryQuantizationH\x00\x42\x0e\n\x0cquantization\"\n\n\x08\x44isabled\"\xda\x01\n\x16QuantizationConfigDiff\x12,\n\x06scalar\x18\x01 \x01(\x0b\x32\x1a.qdrant.ScalarQuantizationH\x00\x12.\n\x07product\x18\x02 \x01(\x0b\x32\x1b.qdrant.ProductQuantizationH\x00\x12$\n\x08\x64isabled\x18\x03 \x01(\x0b\x32\x10.qdrant.DisabledH\x00\x12,\n\x06\x62inary\x18\x04 \x01(\x0b\x32\x1a.qdrant.BinaryQuantizationH\x00\x42\x0e\n\x0cquantization\"\xd6\x03\n\x10StrictModeConfig\x12\x14\n\x07\x65nabled\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x1c\n\x0fmax_query_limit\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x18\n\x0bmax_timeout\x18\x03 \x01(\rH\x02\x88\x01\x01\x12)\n\x1cunindexed_filtering_retrieve\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\'\n\x1aunindexed_filtering_update\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x1f\n\x12search_max_hnsw_ef\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1f\n\x12search_allow_exact\x18\x07 \x01(\x08H\x06\x88\x01\x01\x12$\n\x17search_max_oversampling\x18\x08 \x01(\x02H\x07\x88\x01\x01\x42\n\n\x08_enabledB\x12\n\x10_max_query_limitB\x0e\n\x0c_max_timeoutB\x1f\n\x1d_unindexed_filtering_retrieveB\x1d\n\x1b_unindexed_filtering_updateB\x15\n\x13_search_max_hnsw_efB\x15\n\x13_search_allow_exactB\x1a\n\x18_search_max_oversampling\"\xd7\x07\n\x10\x43reateCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x30\n\x0bhnsw_config\x18\x04 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x00\x88\x01\x01\x12.\n\nwal_config\x18\x05 \x01(\x0b\x32\x15.qdrant.WalConfigDiffH\x01\x88\x01\x01\x12<\n\x11optimizers_config\x18\x06 \x01(\x0b\x32\x1c.qdrant.OptimizersConfigDiffH\x02\x88\x01\x01\x12\x19\n\x0cshard_number\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1c\n\x0fon_disk_payload\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\t \x01(\x04H\x05\x88\x01\x01\x12\x32\n\x0evectors_config\x18\n \x01(\x0b\x32\x15.qdrant.VectorsConfigH\x06\x88\x01\x01\x12\x1f\n\x12replication_factor\x18\x0b \x01(\rH\x07\x88\x01\x01\x12%\n\x18write_consistency_factor\x18\x0c \x01(\rH\x08\x88\x01\x01\x12!\n\x14init_from_collection\x18\r \x01(\tH\t\x88\x01\x01\x12<\n\x13quantization_config\x18\x0e \x01(\x0b\x32\x1a.qdrant.QuantizationConfigH\n\x88\x01\x01\x12\x34\n\x0fsharding_method\x18\x0f \x01(\x0e\x32\x16.qdrant.ShardingMethodH\x0b\x88\x01\x01\x12>\n\x15sparse_vectors_config\x18\x10 \x01(\x0b\x32\x1a.qdrant.SparseVectorConfigH\x0c\x88\x01\x01\x12\x39\n\x12strict_mode_config\x18\x11 \x01(\x0b\x32\x18.qdrant.StrictModeConfigH\r\x88\x01\x01\x42\x0e\n\x0c_hnsw_configB\r\n\x0b_wal_configB\x14\n\x12_optimizers_configB\x0f\n\r_shard_numberB\x12\n\x10_on_disk_payloadB\n\n\x08_timeoutB\x11\n\x0f_vectors_configB\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x17\n\x15_init_from_collectionB\x16\n\x14_quantization_configB\x12\n\x10_sharding_methodB\x18\n\x16_sparse_vectors_configB\x15\n\x13_strict_mode_configJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"\xa0\x04\n\x10UpdateCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12<\n\x11optimizers_config\x18\x02 \x01(\x0b\x32\x1c.qdrant.OptimizersConfigDiffH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x31\n\x06params\x18\x04 \x01(\x0b\x32\x1c.qdrant.CollectionParamsDiffH\x02\x88\x01\x01\x12\x30\n\x0bhnsw_config\x18\x05 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x03\x88\x01\x01\x12\x36\n\x0evectors_config\x18\x06 \x01(\x0b\x32\x19.qdrant.VectorsConfigDiffH\x04\x88\x01\x01\x12@\n\x13quantization_config\x18\x07 \x01(\x0b\x32\x1e.qdrant.QuantizationConfigDiffH\x05\x88\x01\x01\x12>\n\x15sparse_vectors_config\x18\x08 \x01(\x0b\x32\x1a.qdrant.SparseVectorConfigH\x06\x88\x01\x01\x42\x14\n\x12_optimizers_configB\n\n\x08_timeoutB\t\n\x07_paramsB\x0e\n\x0c_hnsw_configB\x11\n\x0f_vectors_configB\x16\n\x14_quantization_configB\x18\n\x16_sparse_vectors_config\"M\n\x10\x44\x65leteCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\";\n\x1b\x43ollectionOperationResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\xee\x03\n\x10\x43ollectionParams\x12\x14\n\x0cshard_number\x18\x03 \x01(\r\x12\x17\n\x0fon_disk_payload\x18\x04 \x01(\x08\x12\x32\n\x0evectors_config\x18\x05 \x01(\x0b\x32\x15.qdrant.VectorsConfigH\x00\x88\x01\x01\x12\x1f\n\x12replication_factor\x18\x06 \x01(\rH\x01\x88\x01\x01\x12%\n\x18write_consistency_factor\x18\x07 \x01(\rH\x02\x88\x01\x01\x12 \n\x13read_fan_out_factor\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x34\n\x0fsharding_method\x18\t \x01(\x0e\x32\x16.qdrant.ShardingMethodH\x04\x88\x01\x01\x12>\n\x15sparse_vectors_config\x18\n \x01(\x0b\x32\x1a.qdrant.SparseVectorConfigH\x05\x88\x01\x01\x42\x11\n\x0f_vectors_configB\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x16\n\x14_read_fan_out_factorB\x12\n\x10_sharding_methodB\x18\n\x16_sparse_vectors_configJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03\"\xfe\x01\n\x14\x43ollectionParamsDiff\x12\x1f\n\x12replication_factor\x18\x01 \x01(\rH\x00\x88\x01\x01\x12%\n\x18write_consistency_factor\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x0fon_disk_payload\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12 \n\x13read_fan_out_factor\x18\x04 \x01(\rH\x03\x88\x01\x01\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x12\n\x10_on_disk_payloadB\x16\n\x14_read_fan_out_factor\"\xf4\x02\n\x10\x43ollectionConfig\x12(\n\x06params\x18\x01 \x01(\x0b\x32\x18.qdrant.CollectionParams\x12+\n\x0bhnsw_config\x18\x02 \x01(\x0b\x32\x16.qdrant.HnswConfigDiff\x12\x36\n\x10optimizer_config\x18\x03 \x01(\x0b\x32\x1c.qdrant.OptimizersConfigDiff\x12)\n\nwal_config\x18\x04 \x01(\x0b\x32\x15.qdrant.WalConfigDiff\x12<\n\x13quantization_config\x18\x05 \x01(\x0b\x32\x1a.qdrant.QuantizationConfigH\x00\x88\x01\x01\x12\x39\n\x12strict_mode_config\x18\x06 \x01(\x0b\x32\x18.qdrant.StrictModeConfigH\x01\x88\x01\x01\x42\x16\n\x14_quantization_configB\x15\n\x13_strict_mode_config\"\\\n\x12KeywordIndexParams\x12\x16\n\tis_tenant\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07on_disk\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_is_tenantB\n\n\x08_on_disk\"\xa0\x01\n\x12IntegerIndexParams\x12\x13\n\x06lookup\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\x05range\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x19\n\x0cis_principal\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x14\n\x07on_disk\x18\x04 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_lookupB\x08\n\x06_rangeB\x0f\n\r_is_principalB\n\n\x08_on_disk\"`\n\x10\x46loatIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x0cis_principal\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_on_diskB\x0f\n\r_is_principal\"2\n\x0eGeoIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_on_disk\"\xdf\x01\n\x0fTextIndexParams\x12(\n\ttokenizer\x18\x01 \x01(\x0e\x32\x15.qdrant.TokenizerType\x12\x16\n\tlowercase\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rmin_token_len\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1a\n\rmax_token_len\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x14\n\x07on_disk\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x0c\n\n_lowercaseB\x10\n\x0e_min_token_lenB\x10\n\x0e_max_token_lenB\n\n\x08_on_disk\"\x11\n\x0f\x42oolIndexParams\"c\n\x13\x44\x61tetimeIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x0cis_principal\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_on_diskB\x0f\n\r_is_principal\"Y\n\x0fUuidIndexParams\x12\x16\n\tis_tenant\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07on_disk\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_is_tenantB\n\n\x08_on_disk\"\xe8\x03\n\x12PayloadIndexParams\x12:\n\x14keyword_index_params\x18\x03 \x01(\x0b\x32\x1a.qdrant.KeywordIndexParamsH\x00\x12:\n\x14integer_index_params\x18\x02 \x01(\x0b\x32\x1a.qdrant.IntegerIndexParamsH\x00\x12\x36\n\x12\x66loat_index_params\x18\x04 \x01(\x0b\x32\x18.qdrant.FloatIndexParamsH\x00\x12\x32\n\x10geo_index_params\x18\x05 \x01(\x0b\x32\x16.qdrant.GeoIndexParamsH\x00\x12\x34\n\x11text_index_params\x18\x01 \x01(\x0b\x32\x17.qdrant.TextIndexParamsH\x00\x12\x34\n\x11\x62ool_index_params\x18\x06 \x01(\x0b\x32\x17.qdrant.BoolIndexParamsH\x00\x12<\n\x15\x64\x61tetime_index_params\x18\x07 \x01(\x0b\x32\x1b.qdrant.DatetimeIndexParamsH\x00\x12\x34\n\x11uuid_index_params\x18\x08 \x01(\x0b\x32\x17.qdrant.UuidIndexParamsH\x00\x42\x0e\n\x0cindex_params\"\x9d\x01\n\x11PayloadSchemaInfo\x12,\n\tdata_type\x18\x01 \x01(\x0e\x32\x19.qdrant.PayloadSchemaType\x12/\n\x06params\x18\x02 \x01(\x0b\x32\x1a.qdrant.PayloadIndexParamsH\x00\x88\x01\x01\x12\x13\n\x06points\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\t\n\x07_paramsB\t\n\x07_points\"\xe7\x03\n\x0e\x43ollectionInfo\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.qdrant.CollectionStatus\x12\x31\n\x10optimizer_status\x18\x02 \x01(\x0b\x32\x17.qdrant.OptimizerStatus\x12\x1a\n\rvectors_count\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x16\n\x0esegments_count\x18\x04 \x01(\x04\x12(\n\x06\x63onfig\x18\x07 \x01(\x0b\x32\x18.qdrant.CollectionConfig\x12\x41\n\x0epayload_schema\x18\x08 \x03(\x0b\x32).qdrant.CollectionInfo.PayloadSchemaEntry\x12\x19\n\x0cpoints_count\x18\t \x01(\x04H\x01\x88\x01\x01\x12\"\n\x15indexed_vectors_count\x18\n \x01(\x04H\x02\x88\x01\x01\x1aO\n\x12PayloadSchemaEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.qdrant.PayloadSchemaInfo:\x02\x38\x01\x42\x10\n\x0e_vectors_countB\x0f\n\r_points_countB\x18\n\x16_indexed_vectors_countJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"[\n\rChangeAliases\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.qdrant.AliasOperations\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\"\xa2\x01\n\x0f\x41liasOperations\x12+\n\x0c\x63reate_alias\x18\x01 \x01(\x0b\x32\x13.qdrant.CreateAliasH\x00\x12+\n\x0crename_alias\x18\x02 \x01(\x0b\x32\x13.qdrant.RenameAliasH\x00\x12+\n\x0c\x64\x65lete_alias\x18\x03 \x01(\x0b\x32\x13.qdrant.DeleteAliasH\x00\x42\x08\n\x06\x61\x63tion\":\n\x0b\x43reateAlias\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x12\n\nalias_name\x18\x02 \x01(\t\"=\n\x0bRenameAlias\x12\x16\n\x0eold_alias_name\x18\x01 \x01(\t\x12\x16\n\x0enew_alias_name\x18\x02 \x01(\t\"!\n\x0b\x44\x65leteAlias\x12\x12\n\nalias_name\x18\x01 \x01(\t\"\x14\n\x12ListAliasesRequest\"7\n\x1cListCollectionAliasesRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"?\n\x10\x41liasDescription\x12\x12\n\nalias_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\"N\n\x13ListAliasesResponse\x12)\n\x07\x61liases\x18\x01 \x03(\x0b\x32\x18.qdrant.AliasDescription\x12\x0c\n\x04time\x18\x02 \x01(\x01\"7\n\x1c\x43ollectionClusterInfoRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"6\n\x08ShardKey\x12\x11\n\x07keyword\x18\x01 \x01(\tH\x00\x12\x10\n\x06number\x18\x02 \x01(\x04H\x00\x42\x05\n\x03key\"\x95\x01\n\x0eLocalShardInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x14\n\x0cpoints_count\x18\x02 \x01(\x04\x12#\n\x05state\x18\x03 \x01(\x0e\x32\x14.qdrant.ReplicaState\x12(\n\tshard_key\x18\x04 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x00\x88\x01\x01\x42\x0c\n\n_shard_key\"\x91\x01\n\x0fRemoteShardInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\x12#\n\x05state\x18\x03 \x01(\x0e\x32\x14.qdrant.ReplicaState\x12(\n\tshard_key\x18\x04 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x00\x88\x01\x01\x42\x0c\n\n_shard_key\"w\n\x11ShardTransferInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04\x66rom\x18\x02 \x01(\x04\x12\n\n\x02to\x18\x03 \x01(\x04\x12\x0c\n\x04sync\x18\x04 \x01(\x08\x42\x0e\n\x0c_to_shard_id\"k\n\x0eReshardingInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\x12(\n\tshard_key\x18\x03 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x00\x88\x01\x01\x42\x0c\n\n_shard_key\"\xd7\x01\n\x1d\x43ollectionClusterInfoResponse\x12\x0f\n\x07peer_id\x18\x01 \x01(\x04\x12\x13\n\x0bshard_count\x18\x02 \x01(\x04\x12,\n\x0clocal_shards\x18\x03 \x03(\x0b\x32\x16.qdrant.LocalShardInfo\x12.\n\rremote_shards\x18\x04 \x03(\x0b\x32\x17.qdrant.RemoteShardInfo\x12\x32\n\x0fshard_transfers\x18\x05 \x03(\x0b\x32\x19.qdrant.ShardTransferInfo\"\xae\x01\n\tMoveShard\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x12\x30\n\x06method\x18\x04 \x01(\x0e\x32\x1b.qdrant.ShardTransferMethodH\x01\x88\x01\x01\x42\x0e\n\x0c_to_shard_idB\t\n\x07_method\"\xb3\x01\n\x0eReplicateShard\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x12\x30\n\x06method\x18\x04 \x01(\x0e\x32\x1b.qdrant.ShardTransferMethodH\x01\x88\x01\x01\x42\x0e\n\x0c_to_shard_idB\t\n\x07_method\"z\n\x12\x41\x62ortShardTransfer\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x42\x0e\n\x0c_to_shard_id\"\xa4\x01\n\x0fRestartTransfer\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x12+\n\x06method\x18\x04 \x01(\x0e\x32\x1b.qdrant.ShardTransferMethodB\x0e\n\x0c_to_shard_id\",\n\x07Replica\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\"\xae\x01\n\x0e\x43reateShardKey\x12#\n\tshard_key\x18\x01 \x01(\x0b\x32\x10.qdrant.ShardKey\x12\x1a\n\rshards_number\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x1f\n\x12replication_factor\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x11\n\tplacement\x18\x04 \x03(\x04\x42\x10\n\x0e_shards_numberB\x15\n\x13_replication_factor\"5\n\x0e\x44\x65leteShardKey\x12#\n\tshard_key\x18\x01 \x01(\x0b\x32\x10.qdrant.ShardKey\"\xc5\x03\n#UpdateCollectionClusterSetupRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\nmove_shard\x18\x02 \x01(\x0b\x32\x11.qdrant.MoveShardH\x00\x12\x31\n\x0freplicate_shard\x18\x03 \x01(\x0b\x32\x16.qdrant.ReplicateShardH\x00\x12\x34\n\x0e\x61\x62ort_transfer\x18\x04 \x01(\x0b\x32\x1a.qdrant.AbortShardTransferH\x00\x12\'\n\x0c\x64rop_replica\x18\x05 \x01(\x0b\x32\x0f.qdrant.ReplicaH\x00\x12\x32\n\x10\x63reate_shard_key\x18\x07 \x01(\x0b\x32\x16.qdrant.CreateShardKeyH\x00\x12\x32\n\x10\x64\x65lete_shard_key\x18\x08 \x01(\x0b\x32\x16.qdrant.DeleteShardKeyH\x00\x12\x33\n\x10restart_transfer\x18\t \x01(\x0b\x32\x17.qdrant.RestartTransferH\x00\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x01\x88\x01\x01\x42\x0b\n\toperationB\n\n\x08_timeout\"6\n$UpdateCollectionClusterSetupResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\"{\n\x15\x43reateShardKeyRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x07request\x18\x02 \x01(\x0b\x32\x16.qdrant.CreateShardKey\x12\x14\n\x07timeout\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\"{\n\x15\x44\x65leteShardKeyRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x07request\x18\x02 \x01(\x0b\x32\x16.qdrant.DeleteShardKey\x12\x14\n\x07timeout\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\"(\n\x16\x43reateShardKeyResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\"(\n\x16\x44\x65leteShardKeyResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08*<\n\x08\x44\x61tatype\x12\x0b\n\x07\x44\x65\x66\x61ult\x10\x00\x12\x0b\n\x07\x46loat32\x10\x01\x12\t\n\x05Uint8\x10\x02\x12\x0b\n\x07\x46loat16\x10\x03*\x1d\n\x08Modifier\x12\x08\n\x04None\x10\x00\x12\x07\n\x03Idf\x10\x01*#\n\x15MultiVectorComparator\x12\n\n\x06MaxSim\x10\x00*O\n\x08\x44istance\x12\x13\n\x0fUnknownDistance\x10\x00\x12\n\n\x06\x43osine\x10\x01\x12\n\n\x06\x45uclid\x10\x02\x12\x07\n\x03\x44ot\x10\x03\x12\r\n\tManhattan\x10\x04*Y\n\x10\x43ollectionStatus\x12\x1b\n\x17UnknownCollectionStatus\x10\x00\x12\t\n\x05Green\x10\x01\x12\n\n\x06Yellow\x10\x02\x12\x07\n\x03Red\x10\x03\x12\x08\n\x04Grey\x10\x04*~\n\x11PayloadSchemaType\x12\x0f\n\x0bUnknownType\x10\x00\x12\x0b\n\x07Keyword\x10\x01\x12\x0b\n\x07Integer\x10\x02\x12\t\n\x05\x46loat\x10\x03\x12\x07\n\x03Geo\x10\x04\x12\x08\n\x04Text\x10\x05\x12\x08\n\x04\x42ool\x10\x06\x12\x0c\n\x08\x44\x61tetime\x10\x07\x12\x08\n\x04Uuid\x10\x08*5\n\x10QuantizationType\x12\x17\n\x13UnknownQuantization\x10\x00\x12\x08\n\x04Int8\x10\x01*=\n\x10\x43ompressionRatio\x12\x06\n\x02x4\x10\x00\x12\x06\n\x02x8\x10\x01\x12\x07\n\x03x16\x10\x02\x12\x07\n\x03x32\x10\x03\x12\x07\n\x03x64\x10\x04*&\n\x0eShardingMethod\x12\x08\n\x04\x41uto\x10\x00\x12\n\n\x06\x43ustom\x10\x01*T\n\rTokenizerType\x12\x0b\n\x07Unknown\x10\x00\x12\n\n\x06Prefix\x10\x01\x12\x0e\n\nWhitespace\x10\x02\x12\x08\n\x04Word\x10\x03\x12\x10\n\x0cMultilingual\x10\x04*\x84\x01\n\x0cReplicaState\x12\n\n\x06\x41\x63tive\x10\x00\x12\x08\n\x04\x44\x65\x61\x64\x10\x01\x12\x0b\n\x07Partial\x10\x02\x12\x10\n\x0cInitializing\x10\x03\x12\x0c\n\x08Listener\x10\x04\x12\x13\n\x0fPartialSnapshot\x10\x05\x12\x0c\n\x08Recovery\x10\x06\x12\x0e\n\nResharding\x10\x07*a\n\x13ShardTransferMethod\x12\x11\n\rStreamRecords\x10\x00\x12\x0c\n\x08Snapshot\x10\x01\x12\x0c\n\x08WalDelta\x10\x02\x12\x1b\n\x17ReshardingStreamRecords\x10\x03\x42\x15\xaa\x02\x12Qdrant.Client.Grpcb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x63ollections.proto\x12\x06qdrant\"\x83\x03\n\x0cVectorParams\x12\x0c\n\x04size\x18\x01 \x01(\x04\x12\"\n\x08\x64istance\x18\x02 \x01(\x0e\x32\x10.qdrant.Distance\x12\x30\n\x0bhnsw_config\x18\x03 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x00\x88\x01\x01\x12<\n\x13quantization_config\x18\x04 \x01(\x0b\x32\x1a.qdrant.QuantizationConfigH\x01\x88\x01\x01\x12\x14\n\x07on_disk\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\'\n\x08\x64\x61tatype\x18\x06 \x01(\x0e\x32\x10.qdrant.DatatypeH\x03\x88\x01\x01\x12:\n\x12multivector_config\x18\x07 \x01(\x0b\x32\x19.qdrant.MultiVectorConfigH\x04\x88\x01\x01\x42\x0e\n\x0c_hnsw_configB\x16\n\x14_quantization_configB\n\n\x08_on_diskB\x0b\n\t_datatypeB\x15\n\x13_multivector_config\"\xd0\x01\n\x10VectorParamsDiff\x12\x30\n\x0bhnsw_config\x18\x01 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x00\x88\x01\x01\x12@\n\x13quantization_config\x18\x02 \x01(\x0b\x32\x1e.qdrant.QuantizationConfigDiffH\x01\x88\x01\x01\x12\x14\n\x07on_disk\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_hnsw_configB\x16\n\x14_quantization_configB\n\n\x08_on_disk\"\x82\x01\n\x0fVectorParamsMap\x12-\n\x03map\x18\x01 \x03(\x0b\x32 .qdrant.VectorParamsMap.MapEntry\x1a@\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.qdrant.VectorParams:\x02\x38\x01\"\x8e\x01\n\x13VectorParamsDiffMap\x12\x31\n\x03map\x18\x01 \x03(\x0b\x32$.qdrant.VectorParamsDiffMap.MapEntry\x1a\x44\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\'\n\x05value\x18\x02 \x01(\x0b\x32\x18.qdrant.VectorParamsDiff:\x02\x38\x01\"p\n\rVectorsConfig\x12&\n\x06params\x18\x01 \x01(\x0b\x32\x14.qdrant.VectorParamsH\x00\x12-\n\nparams_map\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorParamsMapH\x00\x42\x08\n\x06\x63onfig\"|\n\x11VectorsConfigDiff\x12*\n\x06params\x18\x01 \x01(\x0b\x32\x18.qdrant.VectorParamsDiffH\x00\x12\x31\n\nparams_map\x18\x02 \x01(\x0b\x32\x1b.qdrant.VectorParamsDiffMapH\x00\x42\x08\n\x06\x63onfig\"\x83\x01\n\x12SparseVectorParams\x12-\n\x05index\x18\x01 \x01(\x0b\x32\x19.qdrant.SparseIndexConfigH\x00\x88\x01\x01\x12\'\n\x08modifier\x18\x02 \x01(\x0e\x32\x10.qdrant.ModifierH\x01\x88\x01\x01\x42\x08\n\x06_indexB\x0b\n\t_modifier\"\x8e\x01\n\x12SparseVectorConfig\x12\x30\n\x03map\x18\x01 \x03(\x0b\x32#.qdrant.SparseVectorConfig.MapEntry\x1a\x46\n\x08MapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.qdrant.SparseVectorParams:\x02\x38\x01\"F\n\x11MultiVectorConfig\x12\x31\n\ncomparator\x18\x01 \x01(\x0e\x32\x1d.qdrant.MultiVectorComparator\"3\n\x18GetCollectionInfoRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"2\n\x17\x43ollectionExistsRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"\"\n\x10\x43ollectionExists\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\"R\n\x18\x43ollectionExistsResponse\x12(\n\x06result\x18\x01 \x01(\x0b\x32\x18.qdrant.CollectionExists\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\x18\n\x16ListCollectionsRequest\"%\n\x15\x43ollectionDescription\x12\x0c\n\x04name\x18\x01 \x01(\t\"Q\n\x19GetCollectionInfoResponse\x12&\n\x06result\x18\x01 \x01(\x0b\x32\x16.qdrant.CollectionInfo\x12\x0c\n\x04time\x18\x02 \x01(\x01\"[\n\x17ListCollectionsResponse\x12\x32\n\x0b\x63ollections\x18\x01 \x03(\x0b\x32\x1d.qdrant.CollectionDescription\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\x84\x01\n\x16MaxOptimizationThreads\x12\x0f\n\x05value\x18\x01 \x01(\x04H\x00\x12\x39\n\x07setting\x18\x02 \x01(\x0e\x32&.qdrant.MaxOptimizationThreads.SettingH\x00\"\x13\n\x07Setting\x12\x08\n\x04\x41uto\x10\x00\x42\t\n\x07variant\",\n\x0fOptimizerStatus\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x90\x02\n\x0eHnswConfigDiff\x12\x0e\n\x01m\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x19\n\x0c\x65\x66_construct\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12 \n\x13\x66ull_scan_threshold\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x14max_indexing_threads\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07on_disk\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x16\n\tpayload_m\x18\x06 \x01(\x04H\x05\x88\x01\x01\x42\x04\n\x02_mB\x0f\n\r_ef_constructB\x16\n\x14_full_scan_thresholdB\x17\n\x15_max_indexing_threadsB\n\n\x08_on_diskB\x0c\n\n_payload_m\"\xa5\x01\n\x11SparseIndexConfig\x12 \n\x13\x66ull_scan_threshold\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07on_disk\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\'\n\x08\x64\x61tatype\x18\x03 \x01(\x0e\x32\x10.qdrant.DatatypeH\x02\x88\x01\x01\x42\x16\n\x14_full_scan_thresholdB\n\n\x08_on_diskB\x0b\n\t_datatype\"y\n\rWalConfigDiff\x12\x1c\n\x0fwal_capacity_mb\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x1f\n\x12wal_segments_ahead\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x12\n\x10_wal_capacity_mbB\x15\n\x13_wal_segments_ahead\"\xe6\x04\n\x14OptimizersConfigDiff\x12\x1e\n\x11\x64\x65leted_threshold\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12%\n\x18vacuum_min_vector_number\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12#\n\x16\x64\x65\x66\x61ult_segment_number\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10max_segment_size\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1d\n\x10memmap_threshold\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x1f\n\x12indexing_threshold\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x1f\n\x12\x66lush_interval_sec\x18\x07 \x01(\x04H\x06\x88\x01\x01\x12\x30\n#deprecated_max_optimization_threads\x18\x08 \x01(\x04H\x07\x88\x01\x01\x12\x45\n\x18max_optimization_threads\x18\t \x01(\x0b\x32\x1e.qdrant.MaxOptimizationThreadsH\x08\x88\x01\x01\x42\x14\n\x12_deleted_thresholdB\x1b\n\x19_vacuum_min_vector_numberB\x19\n\x17_default_segment_numberB\x13\n\x11_max_segment_sizeB\x13\n\x11_memmap_thresholdB\x15\n\x13_indexing_thresholdB\x15\n\x13_flush_interval_secB&\n$_deprecated_max_optimization_threadsB\x1b\n\x19_max_optimization_threads\"\x88\x01\n\x12ScalarQuantization\x12&\n\x04type\x18\x01 \x01(\x0e\x32\x18.qdrant.QuantizationType\x12\x15\n\x08quantile\x18\x02 \x01(\x02H\x00\x88\x01\x01\x12\x17\n\nalways_ram\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_quantileB\r\n\x0b_always_ram\"l\n\x13ProductQuantization\x12-\n\x0b\x63ompression\x18\x01 \x01(\x0e\x32\x18.qdrant.CompressionRatio\x12\x17\n\nalways_ram\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_always_ram\"<\n\x12\x42inaryQuantization\x12\x17\n\nalways_ram\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_always_ram\"\xb0\x01\n\x12QuantizationConfig\x12,\n\x06scalar\x18\x01 \x01(\x0b\x32\x1a.qdrant.ScalarQuantizationH\x00\x12.\n\x07product\x18\x02 \x01(\x0b\x32\x1b.qdrant.ProductQuantizationH\x00\x12,\n\x06\x62inary\x18\x03 \x01(\x0b\x32\x1a.qdrant.BinaryQuantizationH\x00\x42\x0e\n\x0cquantization\"\n\n\x08\x44isabled\"\xda\x01\n\x16QuantizationConfigDiff\x12,\n\x06scalar\x18\x01 \x01(\x0b\x32\x1a.qdrant.ScalarQuantizationH\x00\x12.\n\x07product\x18\x02 \x01(\x0b\x32\x1b.qdrant.ProductQuantizationH\x00\x12$\n\x08\x64isabled\x18\x03 \x01(\x0b\x32\x10.qdrant.DisabledH\x00\x12,\n\x06\x62inary\x18\x04 \x01(\x0b\x32\x1a.qdrant.BinaryQuantizationH\x00\x42\x0e\n\x0cquantization\"\xa2\x06\n\x10StrictModeConfig\x12\x14\n\x07\x65nabled\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x1c\n\x0fmax_query_limit\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x18\n\x0bmax_timeout\x18\x03 \x01(\rH\x02\x88\x01\x01\x12)\n\x1cunindexed_filtering_retrieve\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12\'\n\x1aunindexed_filtering_update\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x1f\n\x12search_max_hnsw_ef\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1f\n\x12search_allow_exact\x18\x07 \x01(\x08H\x06\x88\x01\x01\x12$\n\x17search_max_oversampling\x18\x08 \x01(\x02H\x07\x88\x01\x01\x12!\n\x14upsert_max_batchsize\x18\t \x01(\x04H\x08\x88\x01\x01\x12-\n max_collection_vector_size_bytes\x18\n \x01(\x04H\t\x88\x01\x01\x12\x1c\n\x0fread_rate_limit\x18\x0b \x01(\rH\n\x88\x01\x01\x12\x1d\n\x10write_rate_limit\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12.\n!max_collection_payload_size_bytes\x18\r \x01(\x04H\x0c\x88\x01\x01\x42\n\n\x08_enabledB\x12\n\x10_max_query_limitB\x0e\n\x0c_max_timeoutB\x1f\n\x1d_unindexed_filtering_retrieveB\x1d\n\x1b_unindexed_filtering_updateB\x15\n\x13_search_max_hnsw_efB\x15\n\x13_search_allow_exactB\x1a\n\x18_search_max_oversamplingB\x17\n\x15_upsert_max_batchsizeB#\n!_max_collection_vector_size_bytesB\x12\n\x10_read_rate_limitB\x13\n\x11_write_rate_limitB$\n\"_max_collection_payload_size_bytes\"\xd7\x07\n\x10\x43reateCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x30\n\x0bhnsw_config\x18\x04 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x00\x88\x01\x01\x12.\n\nwal_config\x18\x05 \x01(\x0b\x32\x15.qdrant.WalConfigDiffH\x01\x88\x01\x01\x12<\n\x11optimizers_config\x18\x06 \x01(\x0b\x32\x1c.qdrant.OptimizersConfigDiffH\x02\x88\x01\x01\x12\x19\n\x0cshard_number\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1c\n\x0fon_disk_payload\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\t \x01(\x04H\x05\x88\x01\x01\x12\x32\n\x0evectors_config\x18\n \x01(\x0b\x32\x15.qdrant.VectorsConfigH\x06\x88\x01\x01\x12\x1f\n\x12replication_factor\x18\x0b \x01(\rH\x07\x88\x01\x01\x12%\n\x18write_consistency_factor\x18\x0c \x01(\rH\x08\x88\x01\x01\x12!\n\x14init_from_collection\x18\r \x01(\tH\t\x88\x01\x01\x12<\n\x13quantization_config\x18\x0e \x01(\x0b\x32\x1a.qdrant.QuantizationConfigH\n\x88\x01\x01\x12\x34\n\x0fsharding_method\x18\x0f \x01(\x0e\x32\x16.qdrant.ShardingMethodH\x0b\x88\x01\x01\x12>\n\x15sparse_vectors_config\x18\x10 \x01(\x0b\x32\x1a.qdrant.SparseVectorConfigH\x0c\x88\x01\x01\x12\x39\n\x12strict_mode_config\x18\x11 \x01(\x0b\x32\x18.qdrant.StrictModeConfigH\r\x88\x01\x01\x42\x0e\n\x0c_hnsw_configB\r\n\x0b_wal_configB\x14\n\x12_optimizers_configB\x0f\n\r_shard_numberB\x12\n\x10_on_disk_payloadB\n\n\x08_timeoutB\x11\n\x0f_vectors_configB\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x17\n\x15_init_from_collectionB\x16\n\x14_quantization_configB\x12\n\x10_sharding_methodB\x18\n\x16_sparse_vectors_configB\x15\n\x13_strict_mode_configJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"\xf2\x04\n\x10UpdateCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12<\n\x11optimizers_config\x18\x02 \x01(\x0b\x32\x1c.qdrant.OptimizersConfigDiffH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x31\n\x06params\x18\x04 \x01(\x0b\x32\x1c.qdrant.CollectionParamsDiffH\x02\x88\x01\x01\x12\x30\n\x0bhnsw_config\x18\x05 \x01(\x0b\x32\x16.qdrant.HnswConfigDiffH\x03\x88\x01\x01\x12\x36\n\x0evectors_config\x18\x06 \x01(\x0b\x32\x19.qdrant.VectorsConfigDiffH\x04\x88\x01\x01\x12@\n\x13quantization_config\x18\x07 \x01(\x0b\x32\x1e.qdrant.QuantizationConfigDiffH\x05\x88\x01\x01\x12>\n\x15sparse_vectors_config\x18\x08 \x01(\x0b\x32\x1a.qdrant.SparseVectorConfigH\x06\x88\x01\x01\x12\x39\n\x12strict_mode_config\x18\t \x01(\x0b\x32\x18.qdrant.StrictModeConfigH\x07\x88\x01\x01\x42\x14\n\x12_optimizers_configB\n\n\x08_timeoutB\t\n\x07_paramsB\x0e\n\x0c_hnsw_configB\x11\n\x0f_vectors_configB\x16\n\x14_quantization_configB\x18\n\x16_sparse_vectors_configB\x15\n\x13_strict_mode_config\"M\n\x10\x44\x65leteCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\";\n\x1b\x43ollectionOperationResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\x12\x0c\n\x04time\x18\x02 \x01(\x01\"\xee\x03\n\x10\x43ollectionParams\x12\x14\n\x0cshard_number\x18\x03 \x01(\r\x12\x17\n\x0fon_disk_payload\x18\x04 \x01(\x08\x12\x32\n\x0evectors_config\x18\x05 \x01(\x0b\x32\x15.qdrant.VectorsConfigH\x00\x88\x01\x01\x12\x1f\n\x12replication_factor\x18\x06 \x01(\rH\x01\x88\x01\x01\x12%\n\x18write_consistency_factor\x18\x07 \x01(\rH\x02\x88\x01\x01\x12 \n\x13read_fan_out_factor\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x34\n\x0fsharding_method\x18\t \x01(\x0e\x32\x16.qdrant.ShardingMethodH\x04\x88\x01\x01\x12>\n\x15sparse_vectors_config\x18\n \x01(\x0b\x32\x1a.qdrant.SparseVectorConfigH\x05\x88\x01\x01\x42\x11\n\x0f_vectors_configB\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x16\n\x14_read_fan_out_factorB\x12\n\x10_sharding_methodB\x18\n\x16_sparse_vectors_configJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03\"\xfe\x01\n\x14\x43ollectionParamsDiff\x12\x1f\n\x12replication_factor\x18\x01 \x01(\rH\x00\x88\x01\x01\x12%\n\x18write_consistency_factor\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x0fon_disk_payload\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12 \n\x13read_fan_out_factor\x18\x04 \x01(\rH\x03\x88\x01\x01\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x12\n\x10_on_disk_payloadB\x16\n\x14_read_fan_out_factor\"\xf4\x02\n\x10\x43ollectionConfig\x12(\n\x06params\x18\x01 \x01(\x0b\x32\x18.qdrant.CollectionParams\x12+\n\x0bhnsw_config\x18\x02 \x01(\x0b\x32\x16.qdrant.HnswConfigDiff\x12\x36\n\x10optimizer_config\x18\x03 \x01(\x0b\x32\x1c.qdrant.OptimizersConfigDiff\x12)\n\nwal_config\x18\x04 \x01(\x0b\x32\x15.qdrant.WalConfigDiff\x12<\n\x13quantization_config\x18\x05 \x01(\x0b\x32\x1a.qdrant.QuantizationConfigH\x00\x88\x01\x01\x12\x39\n\x12strict_mode_config\x18\x06 \x01(\x0b\x32\x18.qdrant.StrictModeConfigH\x01\x88\x01\x01\x42\x16\n\x14_quantization_configB\x15\n\x13_strict_mode_config\"\\\n\x12KeywordIndexParams\x12\x16\n\tis_tenant\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07on_disk\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_is_tenantB\n\n\x08_on_disk\"\xa0\x01\n\x12IntegerIndexParams\x12\x13\n\x06lookup\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\x05range\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x19\n\x0cis_principal\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x14\n\x07on_disk\x18\x04 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_lookupB\x08\n\x06_rangeB\x0f\n\r_is_principalB\n\n\x08_on_disk\"`\n\x10\x46loatIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x0cis_principal\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_on_diskB\x0f\n\r_is_principal\"2\n\x0eGeoIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_on_disk\"\xdf\x01\n\x0fTextIndexParams\x12(\n\ttokenizer\x18\x01 \x01(\x0e\x32\x15.qdrant.TokenizerType\x12\x16\n\tlowercase\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rmin_token_len\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1a\n\rmax_token_len\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x14\n\x07on_disk\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x0c\n\n_lowercaseB\x10\n\x0e_min_token_lenB\x10\n\x0e_max_token_lenB\n\n\x08_on_disk\"3\n\x0f\x42oolIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_on_disk\"c\n\x13\x44\x61tetimeIndexParams\x12\x14\n\x07on_disk\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x0cis_principal\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_on_diskB\x0f\n\r_is_principal\"Y\n\x0fUuidIndexParams\x12\x16\n\tis_tenant\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07on_disk\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_is_tenantB\n\n\x08_on_disk\"\xe8\x03\n\x12PayloadIndexParams\x12:\n\x14keyword_index_params\x18\x03 \x01(\x0b\x32\x1a.qdrant.KeywordIndexParamsH\x00\x12:\n\x14integer_index_params\x18\x02 \x01(\x0b\x32\x1a.qdrant.IntegerIndexParamsH\x00\x12\x36\n\x12\x66loat_index_params\x18\x04 \x01(\x0b\x32\x18.qdrant.FloatIndexParamsH\x00\x12\x32\n\x10geo_index_params\x18\x05 \x01(\x0b\x32\x16.qdrant.GeoIndexParamsH\x00\x12\x34\n\x11text_index_params\x18\x01 \x01(\x0b\x32\x17.qdrant.TextIndexParamsH\x00\x12\x34\n\x11\x62ool_index_params\x18\x06 \x01(\x0b\x32\x17.qdrant.BoolIndexParamsH\x00\x12<\n\x15\x64\x61tetime_index_params\x18\x07 \x01(\x0b\x32\x1b.qdrant.DatetimeIndexParamsH\x00\x12\x34\n\x11uuid_index_params\x18\x08 \x01(\x0b\x32\x17.qdrant.UuidIndexParamsH\x00\x42\x0e\n\x0cindex_params\"\x9d\x01\n\x11PayloadSchemaInfo\x12,\n\tdata_type\x18\x01 \x01(\x0e\x32\x19.qdrant.PayloadSchemaType\x12/\n\x06params\x18\x02 \x01(\x0b\x32\x1a.qdrant.PayloadIndexParamsH\x00\x88\x01\x01\x12\x13\n\x06points\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\t\n\x07_paramsB\t\n\x07_points\"\xe7\x03\n\x0e\x43ollectionInfo\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.qdrant.CollectionStatus\x12\x31\n\x10optimizer_status\x18\x02 \x01(\x0b\x32\x17.qdrant.OptimizerStatus\x12\x1a\n\rvectors_count\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x16\n\x0esegments_count\x18\x04 \x01(\x04\x12(\n\x06\x63onfig\x18\x07 \x01(\x0b\x32\x18.qdrant.CollectionConfig\x12\x41\n\x0epayload_schema\x18\x08 \x03(\x0b\x32).qdrant.CollectionInfo.PayloadSchemaEntry\x12\x19\n\x0cpoints_count\x18\t \x01(\x04H\x01\x88\x01\x01\x12\"\n\x15indexed_vectors_count\x18\n \x01(\x04H\x02\x88\x01\x01\x1aO\n\x12PayloadSchemaEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.qdrant.PayloadSchemaInfo:\x02\x38\x01\x42\x10\n\x0e_vectors_countB\x0f\n\r_points_countB\x18\n\x16_indexed_vectors_countJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"[\n\rChangeAliases\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.qdrant.AliasOperations\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\"\xa2\x01\n\x0f\x41liasOperations\x12+\n\x0c\x63reate_alias\x18\x01 \x01(\x0b\x32\x13.qdrant.CreateAliasH\x00\x12+\n\x0crename_alias\x18\x02 \x01(\x0b\x32\x13.qdrant.RenameAliasH\x00\x12+\n\x0c\x64\x65lete_alias\x18\x03 \x01(\x0b\x32\x13.qdrant.DeleteAliasH\x00\x42\x08\n\x06\x61\x63tion\":\n\x0b\x43reateAlias\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x12\n\nalias_name\x18\x02 \x01(\t\"=\n\x0bRenameAlias\x12\x16\n\x0eold_alias_name\x18\x01 \x01(\t\x12\x16\n\x0enew_alias_name\x18\x02 \x01(\t\"!\n\x0b\x44\x65leteAlias\x12\x12\n\nalias_name\x18\x01 \x01(\t\"\x14\n\x12ListAliasesRequest\"7\n\x1cListCollectionAliasesRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"?\n\x10\x41liasDescription\x12\x12\n\nalias_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\"N\n\x13ListAliasesResponse\x12)\n\x07\x61liases\x18\x01 \x03(\x0b\x32\x18.qdrant.AliasDescription\x12\x0c\n\x04time\x18\x02 \x01(\x01\"7\n\x1c\x43ollectionClusterInfoRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"6\n\x08ShardKey\x12\x11\n\x07keyword\x18\x01 \x01(\tH\x00\x12\x10\n\x06number\x18\x02 \x01(\x04H\x00\x42\x05\n\x03key\"\x95\x01\n\x0eLocalShardInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x14\n\x0cpoints_count\x18\x02 \x01(\x04\x12#\n\x05state\x18\x03 \x01(\x0e\x32\x14.qdrant.ReplicaState\x12(\n\tshard_key\x18\x04 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x00\x88\x01\x01\x42\x0c\n\n_shard_key\"\x91\x01\n\x0fRemoteShardInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\x12#\n\x05state\x18\x03 \x01(\x0e\x32\x14.qdrant.ReplicaState\x12(\n\tshard_key\x18\x04 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x00\x88\x01\x01\x42\x0c\n\n_shard_key\"w\n\x11ShardTransferInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04\x66rom\x18\x02 \x01(\x04\x12\n\n\x02to\x18\x03 \x01(\x04\x12\x0c\n\x04sync\x18\x04 \x01(\x08\x42\x0e\n\x0c_to_shard_id\"k\n\x0eReshardingInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\x12(\n\tshard_key\x18\x03 \x01(\x0b\x32\x10.qdrant.ShardKeyH\x00\x88\x01\x01\x42\x0c\n\n_shard_key\"\xd7\x01\n\x1d\x43ollectionClusterInfoResponse\x12\x0f\n\x07peer_id\x18\x01 \x01(\x04\x12\x13\n\x0bshard_count\x18\x02 \x01(\x04\x12,\n\x0clocal_shards\x18\x03 \x03(\x0b\x32\x16.qdrant.LocalShardInfo\x12.\n\rremote_shards\x18\x04 \x03(\x0b\x32\x17.qdrant.RemoteShardInfo\x12\x32\n\x0fshard_transfers\x18\x05 \x03(\x0b\x32\x19.qdrant.ShardTransferInfo\"\xae\x01\n\tMoveShard\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x12\x30\n\x06method\x18\x04 \x01(\x0e\x32\x1b.qdrant.ShardTransferMethodH\x01\x88\x01\x01\x42\x0e\n\x0c_to_shard_idB\t\n\x07_method\"\xb3\x01\n\x0eReplicateShard\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x12\x30\n\x06method\x18\x04 \x01(\x0e\x32\x1b.qdrant.ShardTransferMethodH\x01\x88\x01\x01\x42\x0e\n\x0c_to_shard_idB\t\n\x07_method\"z\n\x12\x41\x62ortShardTransfer\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x42\x0e\n\x0c_to_shard_id\"\xa4\x01\n\x0fRestartTransfer\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x18\n\x0bto_shard_id\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\x12+\n\x06method\x18\x04 \x01(\x0e\x32\x1b.qdrant.ShardTransferMethodB\x0e\n\x0c_to_shard_id\",\n\x07Replica\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\"\xae\x01\n\x0e\x43reateShardKey\x12#\n\tshard_key\x18\x01 \x01(\x0b\x32\x10.qdrant.ShardKey\x12\x1a\n\rshards_number\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x1f\n\x12replication_factor\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x11\n\tplacement\x18\x04 \x03(\x04\x42\x10\n\x0e_shards_numberB\x15\n\x13_replication_factor\"5\n\x0e\x44\x65leteShardKey\x12#\n\tshard_key\x18\x01 \x01(\x0b\x32\x10.qdrant.ShardKey\"\xc5\x03\n#UpdateCollectionClusterSetupRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\nmove_shard\x18\x02 \x01(\x0b\x32\x11.qdrant.MoveShardH\x00\x12\x31\n\x0freplicate_shard\x18\x03 \x01(\x0b\x32\x16.qdrant.ReplicateShardH\x00\x12\x34\n\x0e\x61\x62ort_transfer\x18\x04 \x01(\x0b\x32\x1a.qdrant.AbortShardTransferH\x00\x12\'\n\x0c\x64rop_replica\x18\x05 \x01(\x0b\x32\x0f.qdrant.ReplicaH\x00\x12\x32\n\x10\x63reate_shard_key\x18\x07 \x01(\x0b\x32\x16.qdrant.CreateShardKeyH\x00\x12\x32\n\x10\x64\x65lete_shard_key\x18\x08 \x01(\x0b\x32\x16.qdrant.DeleteShardKeyH\x00\x12\x33\n\x10restart_transfer\x18\t \x01(\x0b\x32\x17.qdrant.RestartTransferH\x00\x12\x14\n\x07timeout\x18\x06 \x01(\x04H\x01\x88\x01\x01\x42\x0b\n\toperationB\n\n\x08_timeout\"6\n$UpdateCollectionClusterSetupResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\"{\n\x15\x43reateShardKeyRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x07request\x18\x02 \x01(\x0b\x32\x16.qdrant.CreateShardKey\x12\x14\n\x07timeout\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\"{\n\x15\x44\x65leteShardKeyRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\'\n\x07request\x18\x02 \x01(\x0b\x32\x16.qdrant.DeleteShardKey\x12\x14\n\x07timeout\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_timeout\"(\n\x16\x43reateShardKeyResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\"(\n\x16\x44\x65leteShardKeyResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08*<\n\x08\x44\x61tatype\x12\x0b\n\x07\x44\x65\x66\x61ult\x10\x00\x12\x0b\n\x07\x46loat32\x10\x01\x12\t\n\x05Uint8\x10\x02\x12\x0b\n\x07\x46loat16\x10\x03*\x1d\n\x08Modifier\x12\x08\n\x04None\x10\x00\x12\x07\n\x03Idf\x10\x01*#\n\x15MultiVectorComparator\x12\n\n\x06MaxSim\x10\x00*O\n\x08\x44istance\x12\x13\n\x0fUnknownDistance\x10\x00\x12\n\n\x06\x43osine\x10\x01\x12\n\n\x06\x45uclid\x10\x02\x12\x07\n\x03\x44ot\x10\x03\x12\r\n\tManhattan\x10\x04*Y\n\x10\x43ollectionStatus\x12\x1b\n\x17UnknownCollectionStatus\x10\x00\x12\t\n\x05Green\x10\x01\x12\n\n\x06Yellow\x10\x02\x12\x07\n\x03Red\x10\x03\x12\x08\n\x04Grey\x10\x04*~\n\x11PayloadSchemaType\x12\x0f\n\x0bUnknownType\x10\x00\x12\x0b\n\x07Keyword\x10\x01\x12\x0b\n\x07Integer\x10\x02\x12\t\n\x05\x46loat\x10\x03\x12\x07\n\x03Geo\x10\x04\x12\x08\n\x04Text\x10\x05\x12\x08\n\x04\x42ool\x10\x06\x12\x0c\n\x08\x44\x61tetime\x10\x07\x12\x08\n\x04Uuid\x10\x08*5\n\x10QuantizationType\x12\x17\n\x13UnknownQuantization\x10\x00\x12\x08\n\x04Int8\x10\x01*=\n\x10\x43ompressionRatio\x12\x06\n\x02x4\x10\x00\x12\x06\n\x02x8\x10\x01\x12\x07\n\x03x16\x10\x02\x12\x07\n\x03x32\x10\x03\x12\x07\n\x03x64\x10\x04*&\n\x0eShardingMethod\x12\x08\n\x04\x41uto\x10\x00\x12\n\n\x06\x43ustom\x10\x01*T\n\rTokenizerType\x12\x0b\n\x07Unknown\x10\x00\x12\n\n\x06Prefix\x10\x01\x12\x0e\n\nWhitespace\x10\x02\x12\x08\n\x04Word\x10\x03\x12\x10\n\x0cMultilingual\x10\x04*\x9d\x01\n\x0cReplicaState\x12\n\n\x06\x41\x63tive\x10\x00\x12\x08\n\x04\x44\x65\x61\x64\x10\x01\x12\x0b\n\x07Partial\x10\x02\x12\x10\n\x0cInitializing\x10\x03\x12\x0c\n\x08Listener\x10\x04\x12\x13\n\x0fPartialSnapshot\x10\x05\x12\x0c\n\x08Recovery\x10\x06\x12\x0e\n\nResharding\x10\x07\x12\x17\n\x13ReshardingScaleDown\x10\x08*a\n\x13ShardTransferMethod\x12\x11\n\rStreamRecords\x10\x00\x12\x0c\n\x08Snapshot\x10\x01\x12\x0c\n\x08WalDelta\x10\x02\x12\x1b\n\x17ReshardingStreamRecords\x10\x03\x42\x15\xaa\x02\x12Qdrant.Client.Grpcb\x06proto3') _DATATYPE = DESCRIPTOR.enum_types_by_name['Datatype'] Datatype = enum_type_wrapper.EnumTypeWrapper(_DATATYPE) @@ -89,6 +89,7 @@ PartialSnapshot = 5 Recovery = 6 Resharding = 7 +ReshardingScaleDown = 8 StreamRecords = 0 Snapshot = 1 WalDelta = 2 @@ -115,6 +116,7 @@ _COLLECTIONDESCRIPTION = DESCRIPTOR.message_types_by_name['CollectionDescription'] _GETCOLLECTIONINFORESPONSE = DESCRIPTOR.message_types_by_name['GetCollectionInfoResponse'] _LISTCOLLECTIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListCollectionsResponse'] +_MAXOPTIMIZATIONTHREADS = DESCRIPTOR.message_types_by_name['MaxOptimizationThreads'] _OPTIMIZERSTATUS = DESCRIPTOR.message_types_by_name['OptimizerStatus'] _HNSWCONFIGDIFF = DESCRIPTOR.message_types_by_name['HnswConfigDiff'] _SPARSEINDEXCONFIG = DESCRIPTOR.message_types_by_name['SparseIndexConfig'] @@ -175,6 +177,7 @@ _DELETESHARDKEYREQUEST = DESCRIPTOR.message_types_by_name['DeleteShardKeyRequest'] _CREATESHARDKEYRESPONSE = DESCRIPTOR.message_types_by_name['CreateShardKeyResponse'] _DELETESHARDKEYRESPONSE = DESCRIPTOR.message_types_by_name['DeleteShardKeyResponse'] +_MAXOPTIMIZATIONTHREADS_SETTING = _MAXOPTIMIZATIONTHREADS.enum_types_by_name['Setting'] VectorParams = _reflection.GeneratedProtocolMessageType('VectorParams', (_message.Message,), { 'DESCRIPTOR' : _VECTORPARAMS, '__module__' : 'collections_pb2' @@ -318,6 +321,13 @@ }) _sym_db.RegisterMessage(ListCollectionsResponse) +MaxOptimizationThreads = _reflection.GeneratedProtocolMessageType('MaxOptimizationThreads', (_message.Message,), { + 'DESCRIPTOR' : _MAXOPTIMIZATIONTHREADS, + '__module__' : 'collections_pb2' + # @@protoc_insertion_point(class_scope:qdrant.MaxOptimizationThreads) + }) +_sym_db.RegisterMessage(MaxOptimizationThreads) + OptimizerStatus = _reflection.GeneratedProtocolMessageType('OptimizerStatus', (_message.Message,), { 'DESCRIPTOR' : _OPTIMIZERSTATUS, '__module__' : 'collections_pb2' @@ -751,30 +761,30 @@ _SPARSEVECTORCONFIG_MAPENTRY._serialized_options = b'8\001' _COLLECTIONINFO_PAYLOADSCHEMAENTRY._options = None _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_options = b'8\001' - _DATATYPE._serialized_start=12330 - _DATATYPE._serialized_end=12390 - _MODIFIER._serialized_start=12392 - _MODIFIER._serialized_end=12421 - _MULTIVECTORCOMPARATOR._serialized_start=12423 - _MULTIVECTORCOMPARATOR._serialized_end=12458 - _DISTANCE._serialized_start=12460 - _DISTANCE._serialized_end=12539 - _COLLECTIONSTATUS._serialized_start=12541 - _COLLECTIONSTATUS._serialized_end=12630 - _PAYLOADSCHEMATYPE._serialized_start=12632 - _PAYLOADSCHEMATYPE._serialized_end=12758 - _QUANTIZATIONTYPE._serialized_start=12760 - _QUANTIZATIONTYPE._serialized_end=12813 - _COMPRESSIONRATIO._serialized_start=12815 - _COMPRESSIONRATIO._serialized_end=12876 - _SHARDINGMETHOD._serialized_start=12878 - _SHARDINGMETHOD._serialized_end=12916 - _TOKENIZERTYPE._serialized_start=12918 - _TOKENIZERTYPE._serialized_end=13002 - _REPLICASTATE._serialized_start=13005 - _REPLICASTATE._serialized_end=13137 - _SHARDTRANSFERMETHOD._serialized_start=13139 - _SHARDTRANSFERMETHOD._serialized_end=13236 + _DATATYPE._serialized_start=13035 + _DATATYPE._serialized_end=13095 + _MODIFIER._serialized_start=13097 + _MODIFIER._serialized_end=13126 + _MULTIVECTORCOMPARATOR._serialized_start=13128 + _MULTIVECTORCOMPARATOR._serialized_end=13163 + _DISTANCE._serialized_start=13165 + _DISTANCE._serialized_end=13244 + _COLLECTIONSTATUS._serialized_start=13246 + _COLLECTIONSTATUS._serialized_end=13335 + _PAYLOADSCHEMATYPE._serialized_start=13337 + _PAYLOADSCHEMATYPE._serialized_end=13463 + _QUANTIZATIONTYPE._serialized_start=13465 + _QUANTIZATIONTYPE._serialized_end=13518 + _COMPRESSIONRATIO._serialized_start=13520 + _COMPRESSIONRATIO._serialized_end=13581 + _SHARDINGMETHOD._serialized_start=13583 + _SHARDINGMETHOD._serialized_end=13621 + _TOKENIZERTYPE._serialized_start=13623 + _TOKENIZERTYPE._serialized_end=13707 + _REPLICASTATE._serialized_start=13710 + _REPLICASTATE._serialized_end=13867 + _SHARDTRANSFERMETHOD._serialized_start=13869 + _SHARDTRANSFERMETHOD._serialized_end=13966 _VECTORPARAMS._serialized_start=30 _VECTORPARAMS._serialized_end=417 _VECTORPARAMSDIFF._serialized_start=420 @@ -815,124 +825,128 @@ _GETCOLLECTIONINFORESPONSE._serialized_end=1870 _LISTCOLLECTIONSRESPONSE._serialized_start=1872 _LISTCOLLECTIONSRESPONSE._serialized_end=1963 - _OPTIMIZERSTATUS._serialized_start=1965 - _OPTIMIZERSTATUS._serialized_end=2009 - _HNSWCONFIGDIFF._serialized_start=2012 - _HNSWCONFIGDIFF._serialized_end=2284 - _SPARSEINDEXCONFIG._serialized_start=2287 - _SPARSEINDEXCONFIG._serialized_end=2452 - _WALCONFIGDIFF._serialized_start=2454 - _WALCONFIGDIFF._serialized_end=2575 - _OPTIMIZERSCONFIGDIFF._serialized_start=2578 - _OPTIMIZERSCONFIGDIFF._serialized_end=3070 - _SCALARQUANTIZATION._serialized_start=3073 - _SCALARQUANTIZATION._serialized_end=3209 - _PRODUCTQUANTIZATION._serialized_start=3211 - _PRODUCTQUANTIZATION._serialized_end=3319 - _BINARYQUANTIZATION._serialized_start=3321 - _BINARYQUANTIZATION._serialized_end=3381 - _QUANTIZATIONCONFIG._serialized_start=3384 - _QUANTIZATIONCONFIG._serialized_end=3560 - _DISABLED._serialized_start=3562 - _DISABLED._serialized_end=3572 - _QUANTIZATIONCONFIGDIFF._serialized_start=3575 - _QUANTIZATIONCONFIGDIFF._serialized_end=3793 - _STRICTMODECONFIG._serialized_start=3796 - _STRICTMODECONFIG._serialized_end=4266 - _CREATECOLLECTION._serialized_start=4269 - _CREATECOLLECTION._serialized_end=5252 - _UPDATECOLLECTION._serialized_start=5255 - _UPDATECOLLECTION._serialized_end=5799 - _DELETECOLLECTION._serialized_start=5801 - _DELETECOLLECTION._serialized_end=5878 - _COLLECTIONOPERATIONRESPONSE._serialized_start=5880 - _COLLECTIONOPERATIONRESPONSE._serialized_end=5939 - _COLLECTIONPARAMS._serialized_start=5942 - _COLLECTIONPARAMS._serialized_end=6436 - _COLLECTIONPARAMSDIFF._serialized_start=6439 - _COLLECTIONPARAMSDIFF._serialized_end=6693 - _COLLECTIONCONFIG._serialized_start=6696 - _COLLECTIONCONFIG._serialized_end=7068 - _KEYWORDINDEXPARAMS._serialized_start=7070 - _KEYWORDINDEXPARAMS._serialized_end=7162 - _INTEGERINDEXPARAMS._serialized_start=7165 - _INTEGERINDEXPARAMS._serialized_end=7325 - _FLOATINDEXPARAMS._serialized_start=7327 - _FLOATINDEXPARAMS._serialized_end=7423 - _GEOINDEXPARAMS._serialized_start=7425 - _GEOINDEXPARAMS._serialized_end=7475 - _TEXTINDEXPARAMS._serialized_start=7478 - _TEXTINDEXPARAMS._serialized_end=7701 - _BOOLINDEXPARAMS._serialized_start=7703 - _BOOLINDEXPARAMS._serialized_end=7720 - _DATETIMEINDEXPARAMS._serialized_start=7722 - _DATETIMEINDEXPARAMS._serialized_end=7821 - _UUIDINDEXPARAMS._serialized_start=7823 - _UUIDINDEXPARAMS._serialized_end=7912 - _PAYLOADINDEXPARAMS._serialized_start=7915 - _PAYLOADINDEXPARAMS._serialized_end=8403 - _PAYLOADSCHEMAINFO._serialized_start=8406 - _PAYLOADSCHEMAINFO._serialized_end=8563 - _COLLECTIONINFO._serialized_start=8566 - _COLLECTIONINFO._serialized_end=9053 - _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_start=8901 - _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_end=8980 - _CHANGEALIASES._serialized_start=9055 - _CHANGEALIASES._serialized_end=9146 - _ALIASOPERATIONS._serialized_start=9149 - _ALIASOPERATIONS._serialized_end=9311 - _CREATEALIAS._serialized_start=9313 - _CREATEALIAS._serialized_end=9371 - _RENAMEALIAS._serialized_start=9373 - _RENAMEALIAS._serialized_end=9434 - _DELETEALIAS._serialized_start=9436 - _DELETEALIAS._serialized_end=9469 - _LISTALIASESREQUEST._serialized_start=9471 - _LISTALIASESREQUEST._serialized_end=9491 - _LISTCOLLECTIONALIASESREQUEST._serialized_start=9493 - _LISTCOLLECTIONALIASESREQUEST._serialized_end=9548 - _ALIASDESCRIPTION._serialized_start=9550 - _ALIASDESCRIPTION._serialized_end=9613 - _LISTALIASESRESPONSE._serialized_start=9615 - _LISTALIASESRESPONSE._serialized_end=9693 - _COLLECTIONCLUSTERINFOREQUEST._serialized_start=9695 - _COLLECTIONCLUSTERINFOREQUEST._serialized_end=9750 - _SHARDKEY._serialized_start=9752 - _SHARDKEY._serialized_end=9806 - _LOCALSHARDINFO._serialized_start=9809 - _LOCALSHARDINFO._serialized_end=9958 - _REMOTESHARDINFO._serialized_start=9961 - _REMOTESHARDINFO._serialized_end=10106 - _SHARDTRANSFERINFO._serialized_start=10108 - _SHARDTRANSFERINFO._serialized_end=10227 - _RESHARDINGINFO._serialized_start=10229 - _RESHARDINGINFO._serialized_end=10336 - _COLLECTIONCLUSTERINFORESPONSE._serialized_start=10339 - _COLLECTIONCLUSTERINFORESPONSE._serialized_end=10554 - _MOVESHARD._serialized_start=10557 - _MOVESHARD._serialized_end=10731 - _REPLICATESHARD._serialized_start=10734 - _REPLICATESHARD._serialized_end=10913 - _ABORTSHARDTRANSFER._serialized_start=10915 - _ABORTSHARDTRANSFER._serialized_end=11037 - _RESTARTTRANSFER._serialized_start=11040 - _RESTARTTRANSFER._serialized_end=11204 - _REPLICA._serialized_start=11206 - _REPLICA._serialized_end=11250 - _CREATESHARDKEY._serialized_start=11253 - _CREATESHARDKEY._serialized_end=11427 - _DELETESHARDKEY._serialized_start=11429 - _DELETESHARDKEY._serialized_end=11482 - _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_start=11485 - _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_end=11938 - _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_start=11940 - _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_end=11994 - _CREATESHARDKEYREQUEST._serialized_start=11996 - _CREATESHARDKEYREQUEST._serialized_end=12119 - _DELETESHARDKEYREQUEST._serialized_start=12121 - _DELETESHARDKEYREQUEST._serialized_end=12244 - _CREATESHARDKEYRESPONSE._serialized_start=12246 - _CREATESHARDKEYRESPONSE._serialized_end=12286 - _DELETESHARDKEYRESPONSE._serialized_start=12288 - _DELETESHARDKEYRESPONSE._serialized_end=12328 + _MAXOPTIMIZATIONTHREADS._serialized_start=1966 + _MAXOPTIMIZATIONTHREADS._serialized_end=2098 + _MAXOPTIMIZATIONTHREADS_SETTING._serialized_start=2068 + _MAXOPTIMIZATIONTHREADS_SETTING._serialized_end=2087 + _OPTIMIZERSTATUS._serialized_start=2100 + _OPTIMIZERSTATUS._serialized_end=2144 + _HNSWCONFIGDIFF._serialized_start=2147 + _HNSWCONFIGDIFF._serialized_end=2419 + _SPARSEINDEXCONFIG._serialized_start=2422 + _SPARSEINDEXCONFIG._serialized_end=2587 + _WALCONFIGDIFF._serialized_start=2589 + _WALCONFIGDIFF._serialized_end=2710 + _OPTIMIZERSCONFIGDIFF._serialized_start=2713 + _OPTIMIZERSCONFIGDIFF._serialized_end=3327 + _SCALARQUANTIZATION._serialized_start=3330 + _SCALARQUANTIZATION._serialized_end=3466 + _PRODUCTQUANTIZATION._serialized_start=3468 + _PRODUCTQUANTIZATION._serialized_end=3576 + _BINARYQUANTIZATION._serialized_start=3578 + _BINARYQUANTIZATION._serialized_end=3638 + _QUANTIZATIONCONFIG._serialized_start=3641 + _QUANTIZATIONCONFIG._serialized_end=3817 + _DISABLED._serialized_start=3819 + _DISABLED._serialized_end=3829 + _QUANTIZATIONCONFIGDIFF._serialized_start=3832 + _QUANTIZATIONCONFIGDIFF._serialized_end=4050 + _STRICTMODECONFIG._serialized_start=4053 + _STRICTMODECONFIG._serialized_end=4855 + _CREATECOLLECTION._serialized_start=4858 + _CREATECOLLECTION._serialized_end=5841 + _UPDATECOLLECTION._serialized_start=5844 + _UPDATECOLLECTION._serialized_end=6470 + _DELETECOLLECTION._serialized_start=6472 + _DELETECOLLECTION._serialized_end=6549 + _COLLECTIONOPERATIONRESPONSE._serialized_start=6551 + _COLLECTIONOPERATIONRESPONSE._serialized_end=6610 + _COLLECTIONPARAMS._serialized_start=6613 + _COLLECTIONPARAMS._serialized_end=7107 + _COLLECTIONPARAMSDIFF._serialized_start=7110 + _COLLECTIONPARAMSDIFF._serialized_end=7364 + _COLLECTIONCONFIG._serialized_start=7367 + _COLLECTIONCONFIG._serialized_end=7739 + _KEYWORDINDEXPARAMS._serialized_start=7741 + _KEYWORDINDEXPARAMS._serialized_end=7833 + _INTEGERINDEXPARAMS._serialized_start=7836 + _INTEGERINDEXPARAMS._serialized_end=7996 + _FLOATINDEXPARAMS._serialized_start=7998 + _FLOATINDEXPARAMS._serialized_end=8094 + _GEOINDEXPARAMS._serialized_start=8096 + _GEOINDEXPARAMS._serialized_end=8146 + _TEXTINDEXPARAMS._serialized_start=8149 + _TEXTINDEXPARAMS._serialized_end=8372 + _BOOLINDEXPARAMS._serialized_start=8374 + _BOOLINDEXPARAMS._serialized_end=8425 + _DATETIMEINDEXPARAMS._serialized_start=8427 + _DATETIMEINDEXPARAMS._serialized_end=8526 + _UUIDINDEXPARAMS._serialized_start=8528 + _UUIDINDEXPARAMS._serialized_end=8617 + _PAYLOADINDEXPARAMS._serialized_start=8620 + _PAYLOADINDEXPARAMS._serialized_end=9108 + _PAYLOADSCHEMAINFO._serialized_start=9111 + _PAYLOADSCHEMAINFO._serialized_end=9268 + _COLLECTIONINFO._serialized_start=9271 + _COLLECTIONINFO._serialized_end=9758 + _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_start=9606 + _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_end=9685 + _CHANGEALIASES._serialized_start=9760 + _CHANGEALIASES._serialized_end=9851 + _ALIASOPERATIONS._serialized_start=9854 + _ALIASOPERATIONS._serialized_end=10016 + _CREATEALIAS._serialized_start=10018 + _CREATEALIAS._serialized_end=10076 + _RENAMEALIAS._serialized_start=10078 + _RENAMEALIAS._serialized_end=10139 + _DELETEALIAS._serialized_start=10141 + _DELETEALIAS._serialized_end=10174 + _LISTALIASESREQUEST._serialized_start=10176 + _LISTALIASESREQUEST._serialized_end=10196 + _LISTCOLLECTIONALIASESREQUEST._serialized_start=10198 + _LISTCOLLECTIONALIASESREQUEST._serialized_end=10253 + _ALIASDESCRIPTION._serialized_start=10255 + _ALIASDESCRIPTION._serialized_end=10318 + _LISTALIASESRESPONSE._serialized_start=10320 + _LISTALIASESRESPONSE._serialized_end=10398 + _COLLECTIONCLUSTERINFOREQUEST._serialized_start=10400 + _COLLECTIONCLUSTERINFOREQUEST._serialized_end=10455 + _SHARDKEY._serialized_start=10457 + _SHARDKEY._serialized_end=10511 + _LOCALSHARDINFO._serialized_start=10514 + _LOCALSHARDINFO._serialized_end=10663 + _REMOTESHARDINFO._serialized_start=10666 + _REMOTESHARDINFO._serialized_end=10811 + _SHARDTRANSFERINFO._serialized_start=10813 + _SHARDTRANSFERINFO._serialized_end=10932 + _RESHARDINGINFO._serialized_start=10934 + _RESHARDINGINFO._serialized_end=11041 + _COLLECTIONCLUSTERINFORESPONSE._serialized_start=11044 + _COLLECTIONCLUSTERINFORESPONSE._serialized_end=11259 + _MOVESHARD._serialized_start=11262 + _MOVESHARD._serialized_end=11436 + _REPLICATESHARD._serialized_start=11439 + _REPLICATESHARD._serialized_end=11618 + _ABORTSHARDTRANSFER._serialized_start=11620 + _ABORTSHARDTRANSFER._serialized_end=11742 + _RESTARTTRANSFER._serialized_start=11745 + _RESTARTTRANSFER._serialized_end=11909 + _REPLICA._serialized_start=11911 + _REPLICA._serialized_end=11955 + _CREATESHARDKEY._serialized_start=11958 + _CREATESHARDKEY._serialized_end=12132 + _DELETESHARDKEY._serialized_start=12134 + _DELETESHARDKEY._serialized_end=12187 + _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_start=12190 + _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_end=12643 + _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_start=12645 + _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_end=12699 + _CREATESHARDKEYREQUEST._serialized_start=12701 + _CREATESHARDKEYREQUEST._serialized_end=12824 + _DELETESHARDKEYREQUEST._serialized_start=12826 + _DELETESHARDKEYREQUEST._serialized_end=12949 + _CREATESHARDKEYRESPONSE._serialized_start=12951 + _CREATESHARDKEYRESPONSE._serialized_end=12991 + _DELETESHARDKEYRESPONSE._serialized_start=12993 + _DELETESHARDKEYRESPONSE._serialized_end=13033 # @@protoc_insertion_point(module_scope) diff --git a/qdrant_client/grpc/points_pb2.py b/qdrant_client/grpc/points_pb2.py index 3dd2bba1e..1539448db 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\"\x96\x01\n\x08\x44ocument\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\r\n\x05model\x18\x03 \x01(\t\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\"\xa0\x01\n\x05Image\x12\x1c\n\x05image\x18\x01 \x01(\x0b\x32\r.qdrant.Value\x12\r\n\x05model\x18\x02 \x01(\t\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\"\xb5\x01\n\x0fInferenceObject\x12\x1d\n\x06object\x18\x01 \x01(\x0b\x32\r.qdrant.Value\x12\r\n\x05model\x18\x02 \x01(\t\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\"\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') +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\"\x96\x01\n\x08\x44ocument\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\r\n\x05model\x18\x03 \x01(\t\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\"\xa0\x01\n\x05Image\x12\x1c\n\x05image\x18\x01 \x01(\x0b\x32\r.qdrant.Value\x12\r\n\x05model\x18\x02 \x01(\t\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\"\xb5\x01\n\x0fInferenceObject\x12\x1d\n\x06object\x18\x01 \x01(\x0b\x32\r.qdrant.Value\x12\r\n\x05model\x18\x02 \x01(\t\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\"\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\"x\n\x0eSearchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"w\n\rQueryResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"|\n\x12QueryBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"~\n\x13QueryGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"2\n\x0b\x42\x61tchResult\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\"}\n\x13SearchBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\x7f\n\x14SearchGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"w\n\rCountResponse\x12#\n\x06result\x18\x01 \x01(\x0b\x32\x13.qdrant.CountResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\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\"{\n\x11RecommendResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\x80\x01\n\x16RecommendBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"z\n\x10\x44iscoverResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.ScoredPoint\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\x7f\n\x15\x44iscoverBatchResponse\x12#\n\x06result\x18\x01 \x03(\x0b\x32\x13.qdrant.BatchResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\x82\x01\n\x17RecommendGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"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\"\x89\x01\n\x19SearchMatrixPairsResponse\x12)\n\x06result\x18\x01 \x01(\x0b\x32\x19.qdrant.SearchMatrixPairs\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\x8d\x01\n\x1bSearchMatrixOffsetsResponse\x12+\n\x06result\x18\x01 \x01(\x0b\x32\x1b.qdrant.SearchMatrixOffsets\x12\x0c\n\x04time\x18\x02 \x01(\x01\x12)\n\x05usage\x18\x03 \x01(\x0b\x32\x15.qdrant.HardwareUsageH\x00\x88\x01\x01\x42\x08\n\x06_usage\"\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\"\xcb\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\x12\x30\n\nhas_vector\x18\x07 \x01(\x0b\x32\x1a.qdrant.HasVectorConditionH\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\x12HasVectorCondition\x12\x12\n\nhas_vector\x18\x01 \x01(\t\">\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\"\x1c\n\rHardwareUsage\x12\x0b\n\x03\x63pu\x18\x01 \x01(\x04*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) @@ -186,6 +186,7 @@ _ISEMPTYCONDITION = DESCRIPTOR.message_types_by_name['IsEmptyCondition'] _ISNULLCONDITION = DESCRIPTOR.message_types_by_name['IsNullCondition'] _HASIDCONDITION = DESCRIPTOR.message_types_by_name['HasIdCondition'] +_HASVECTORCONDITION = DESCRIPTOR.message_types_by_name['HasVectorCondition'] _NESTEDCONDITION = DESCRIPTOR.message_types_by_name['NestedCondition'] _FIELDCONDITION = DESCRIPTOR.message_types_by_name['FieldCondition'] _MATCH = DESCRIPTOR.message_types_by_name['Match'] @@ -203,6 +204,7 @@ _POINTSTRUCT = DESCRIPTOR.message_types_by_name['PointStruct'] _POINTSTRUCT_PAYLOADENTRY = _POINTSTRUCT.nested_types_by_name['PayloadEntry'] _GEOPOINT = DESCRIPTOR.message_types_by_name['GeoPoint'] +_HARDWAREUSAGE = DESCRIPTOR.message_types_by_name['HardwareUsage'] WriteOrdering = _reflection.GeneratedProtocolMessageType('WriteOrdering', (_message.Message,), { 'DESCRIPTOR' : _WRITEORDERING, '__module__' : 'points_pb2' @@ -1082,6 +1084,13 @@ }) _sym_db.RegisterMessage(HasIdCondition) +HasVectorCondition = _reflection.GeneratedProtocolMessageType('HasVectorCondition', (_message.Message,), { + 'DESCRIPTOR' : _HASVECTORCONDITION, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.HasVectorCondition) + }) +_sym_db.RegisterMessage(HasVectorCondition) + NestedCondition = _reflection.GeneratedProtocolMessageType('NestedCondition', (_message.Message,), { 'DESCRIPTOR' : _NESTEDCONDITION, '__module__' : 'points_pb2' @@ -1202,6 +1211,13 @@ }) _sym_db.RegisterMessage(GeoPoint) +HardwareUsage = _reflection.GeneratedProtocolMessageType('HardwareUsage', (_message.Message,), { + 'DESCRIPTOR' : _HARDWAREUSAGE, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.HardwareUsage) + }) +_sym_db.RegisterMessage(HardwareUsage) + if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None @@ -1232,22 +1248,22 @@ _RETRIEVEDPOINT_PAYLOADENTRY._serialized_options = b'8\001' _POINTSTRUCT_PAYLOADENTRY._options = None _POINTSTRUCT_PAYLOADENTRY._serialized_options = b'8\001' - _WRITEORDERINGTYPE._serialized_start=24220 - _WRITEORDERINGTYPE._serialized_end=24273 - _READCONSISTENCYTYPE._serialized_start=24275 - _READCONSISTENCYTYPE._serialized_end=24331 - _FIELDTYPE._serialized_start=24334 - _FIELDTYPE._serialized_end=24507 - _DIRECTION._serialized_start=24509 - _DIRECTION._serialized_end=24539 - _RECOMMENDSTRATEGY._serialized_start=24541 - _RECOMMENDSTRATEGY._serialized_end=24594 - _FUSION._serialized_start=24596 - _FUSION._serialized_end=24623 - _SAMPLE._serialized_start=24625 - _SAMPLE._serialized_end=24645 - _UPDATESTATUS._serialized_start=24647 - _UPDATESTATUS._serialized_end=24738 + _WRITEORDERINGTYPE._serialized_start=25088 + _WRITEORDERINGTYPE._serialized_end=25141 + _READCONSISTENCYTYPE._serialized_start=25143 + _READCONSISTENCYTYPE._serialized_end=25199 + _FIELDTYPE._serialized_start=25202 + _FIELDTYPE._serialized_end=25375 + _DIRECTION._serialized_start=25377 + _DIRECTION._serialized_end=25407 + _RECOMMENDSTRATEGY._serialized_start=25409 + _RECOMMENDSTRATEGY._serialized_end=25462 + _FUSION._serialized_start=25464 + _FUSION._serialized_end=25491 + _SAMPLE._serialized_start=25493 + _SAMPLE._serialized_end=25513 + _UPDATESTATUS._serialized_start=25515 + _UPDATESTATUS._serialized_end=25606 _WRITEORDERING._serialized_start=97 _WRITEORDERING._serialized_end=153 _READCONSISTENCY._serialized_start=155 @@ -1439,93 +1455,97 @@ _GROUPSRESULT._serialized_start=19768 _GROUPSRESULT._serialized_end=19818 _SEARCHRESPONSE._serialized_start=19820 - _SEARCHRESPONSE._serialized_end=19887 - _QUERYRESPONSE._serialized_start=19889 - _QUERYRESPONSE._serialized_end=19955 - _QUERYBATCHRESPONSE._serialized_start=19957 - _QUERYBATCHRESPONSE._serialized_end=20028 - _QUERYGROUPSRESPONSE._serialized_start=20030 - _QUERYGROUPSRESPONSE._serialized_end=20103 - _BATCHRESULT._serialized_start=20105 - _BATCHRESULT._serialized_end=20155 - _SEARCHBATCHRESPONSE._serialized_start=20157 - _SEARCHBATCHRESPONSE._serialized_end=20229 - _SEARCHGROUPSRESPONSE._serialized_start=20231 - _SEARCHGROUPSRESPONSE._serialized_end=20305 - _COUNTRESPONSE._serialized_start=20307 - _COUNTRESPONSE._serialized_end=20373 - _SCROLLRESPONSE._serialized_start=20376 - _SCROLLRESPONSE._serialized_end=20515 - _COUNTRESULT._serialized_start=20517 - _COUNTRESULT._serialized_end=20545 - _RETRIEVEDPOINT._serialized_start=20548 - _RETRIEVEDPOINT._serialized_end=20891 + _SEARCHRESPONSE._serialized_end=19940 + _QUERYRESPONSE._serialized_start=19942 + _QUERYRESPONSE._serialized_end=20061 + _QUERYBATCHRESPONSE._serialized_start=20063 + _QUERYBATCHRESPONSE._serialized_end=20187 + _QUERYGROUPSRESPONSE._serialized_start=20189 + _QUERYGROUPSRESPONSE._serialized_end=20315 + _BATCHRESULT._serialized_start=20317 + _BATCHRESULT._serialized_end=20367 + _SEARCHBATCHRESPONSE._serialized_start=20369 + _SEARCHBATCHRESPONSE._serialized_end=20494 + _SEARCHGROUPSRESPONSE._serialized_start=20496 + _SEARCHGROUPSRESPONSE._serialized_end=20623 + _COUNTRESPONSE._serialized_start=20625 + _COUNTRESPONSE._serialized_end=20744 + _SCROLLRESPONSE._serialized_start=20747 + _SCROLLRESPONSE._serialized_end=20886 + _COUNTRESULT._serialized_start=20888 + _COUNTRESULT._serialized_end=20916 + _RETRIEVEDPOINT._serialized_start=20919 + _RETRIEVEDPOINT._serialized_end=21262 _RETRIEVEDPOINT_PAYLOADENTRY._serialized_start=3811 _RETRIEVEDPOINT_PAYLOADENTRY._serialized_end=3872 - _GETRESPONSE._serialized_start=20893 - _GETRESPONSE._serialized_end=20960 - _RECOMMENDRESPONSE._serialized_start=20962 - _RECOMMENDRESPONSE._serialized_end=21032 - _RECOMMENDBATCHRESPONSE._serialized_start=21034 - _RECOMMENDBATCHRESPONSE._serialized_end=21109 - _DISCOVERRESPONSE._serialized_start=21111 - _DISCOVERRESPONSE._serialized_end=21180 - _DISCOVERBATCHRESPONSE._serialized_start=21182 - _DISCOVERBATCHRESPONSE._serialized_end=21256 - _RECOMMENDGROUPSRESPONSE._serialized_start=21258 - _RECOMMENDGROUPSRESPONSE._serialized_end=21335 - _UPDATEBATCHRESPONSE._serialized_start=21337 - _UPDATEBATCHRESPONSE._serialized_end=21410 - _FACETRESPONSE._serialized_start=21412 - _FACETRESPONSE._serialized_end=21473 - _SEARCHMATRIXPAIRSRESPONSE._serialized_start=21475 - _SEARCHMATRIXPAIRSRESPONSE._serialized_end=21559 - _SEARCHMATRIXOFFSETSRESPONSE._serialized_start=21561 - _SEARCHMATRIXOFFSETSRESPONSE._serialized_end=21649 - _FILTER._serialized_start=21652 - _FILTER._serialized_end=21824 - _MINSHOULD._serialized_start=21826 - _MINSHOULD._serialized_end=21895 - _CONDITION._serialized_start=21898 - _CONDITION._serialized_end=22179 - _ISEMPTYCONDITION._serialized_start=22181 - _ISEMPTYCONDITION._serialized_end=22212 - _ISNULLCONDITION._serialized_start=22214 - _ISNULLCONDITION._serialized_end=22244 - _HASIDCONDITION._serialized_start=22246 - _HASIDCONDITION._serialized_end=22295 - _NESTEDCONDITION._serialized_start=22297 - _NESTEDCONDITION._serialized_end=22359 - _FIELDCONDITION._serialized_start=22362 - _FIELDCONDITION._serialized_end=22671 - _MATCH._serialized_start=22674 - _MATCH._serialized_end=22965 - _REPEATEDSTRINGS._serialized_start=22967 - _REPEATEDSTRINGS._serialized_end=23001 - _REPEATEDINTEGERS._serialized_start=23003 - _REPEATEDINTEGERS._serialized_end=23039 - _RANGE._serialized_start=23041 - _RANGE._serialized_end=23148 - _DATETIMERANGE._serialized_start=23151 - _DATETIMERANGE._serialized_end=23378 - _GEOBOUNDINGBOX._serialized_start=23380 - _GEOBOUNDINGBOX._serialized_end=23472 - _GEORADIUS._serialized_start=23474 - _GEORADIUS._serialized_end=23535 - _GEOLINESTRING._serialized_start=23537 - _GEOLINESTRING._serialized_end=23586 - _GEOPOLYGON._serialized_start=23588 - _GEOPOLYGON._serialized_end=23683 - _VALUESCOUNT._serialized_start=23685 - _VALUESCOUNT._serialized_end=23798 - _POINTSSELECTOR._serialized_start=23800 - _POINTSSELECTOR._serialized_end=23917 - _POINTSIDSLIST._serialized_start=23919 - _POINTSIDSLIST._serialized_end=23964 - _POINTSTRUCT._serialized_start=23967 - _POINTSTRUCT._serialized_end=24180 + _GETRESPONSE._serialized_start=21264 + _GETRESPONSE._serialized_end=21331 + _RECOMMENDRESPONSE._serialized_start=21333 + _RECOMMENDRESPONSE._serialized_end=21456 + _RECOMMENDBATCHRESPONSE._serialized_start=21459 + _RECOMMENDBATCHRESPONSE._serialized_end=21587 + _DISCOVERRESPONSE._serialized_start=21589 + _DISCOVERRESPONSE._serialized_end=21711 + _DISCOVERBATCHRESPONSE._serialized_start=21713 + _DISCOVERBATCHRESPONSE._serialized_end=21840 + _RECOMMENDGROUPSRESPONSE._serialized_start=21843 + _RECOMMENDGROUPSRESPONSE._serialized_end=21973 + _UPDATEBATCHRESPONSE._serialized_start=21975 + _UPDATEBATCHRESPONSE._serialized_end=22048 + _FACETRESPONSE._serialized_start=22050 + _FACETRESPONSE._serialized_end=22111 + _SEARCHMATRIXPAIRSRESPONSE._serialized_start=22114 + _SEARCHMATRIXPAIRSRESPONSE._serialized_end=22251 + _SEARCHMATRIXOFFSETSRESPONSE._serialized_start=22254 + _SEARCHMATRIXOFFSETSRESPONSE._serialized_end=22395 + _FILTER._serialized_start=22398 + _FILTER._serialized_end=22570 + _MINSHOULD._serialized_start=22572 + _MINSHOULD._serialized_end=22641 + _CONDITION._serialized_start=22644 + _CONDITION._serialized_end=22975 + _ISEMPTYCONDITION._serialized_start=22977 + _ISEMPTYCONDITION._serialized_end=23008 + _ISNULLCONDITION._serialized_start=23010 + _ISNULLCONDITION._serialized_end=23040 + _HASIDCONDITION._serialized_start=23042 + _HASIDCONDITION._serialized_end=23091 + _HASVECTORCONDITION._serialized_start=23093 + _HASVECTORCONDITION._serialized_end=23133 + _NESTEDCONDITION._serialized_start=23135 + _NESTEDCONDITION._serialized_end=23197 + _FIELDCONDITION._serialized_start=23200 + _FIELDCONDITION._serialized_end=23509 + _MATCH._serialized_start=23512 + _MATCH._serialized_end=23803 + _REPEATEDSTRINGS._serialized_start=23805 + _REPEATEDSTRINGS._serialized_end=23839 + _REPEATEDINTEGERS._serialized_start=23841 + _REPEATEDINTEGERS._serialized_end=23877 + _RANGE._serialized_start=23879 + _RANGE._serialized_end=23986 + _DATETIMERANGE._serialized_start=23989 + _DATETIMERANGE._serialized_end=24216 + _GEOBOUNDINGBOX._serialized_start=24218 + _GEOBOUNDINGBOX._serialized_end=24310 + _GEORADIUS._serialized_start=24312 + _GEORADIUS._serialized_end=24373 + _GEOLINESTRING._serialized_start=24375 + _GEOLINESTRING._serialized_end=24424 + _GEOPOLYGON._serialized_start=24426 + _GEOPOLYGON._serialized_end=24521 + _VALUESCOUNT._serialized_start=24523 + _VALUESCOUNT._serialized_end=24636 + _POINTSSELECTOR._serialized_start=24638 + _POINTSSELECTOR._serialized_end=24755 + _POINTSIDSLIST._serialized_start=24757 + _POINTSIDSLIST._serialized_end=24802 + _POINTSTRUCT._serialized_start=24805 + _POINTSTRUCT._serialized_end=25018 _POINTSTRUCT_PAYLOADENTRY._serialized_start=3811 _POINTSTRUCT_PAYLOADENTRY._serialized_end=3872 - _GEOPOINT._serialized_start=24182 - _GEOPOINT._serialized_end=24218 + _GEOPOINT._serialized_start=25020 + _GEOPOINT._serialized_end=25056 + _HARDWAREUSAGE._serialized_start=25058 + _HARDWAREUSAGE._serialized_end=25086 # @@protoc_insertion_point(module_scope) diff --git a/qdrant_client/http/api/points_api.py b/qdrant_client/http/api/points_api.py index 65471caa8..df1cee4aa 100644 --- a/qdrant_client/http/api/points_api.py +++ b/qdrant_client/http/api/points_api.py @@ -77,7 +77,7 @@ def _build_for_batch_update( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20014, + type_=m.InlineResponse20015, method="POST", url="/collections/{collection_name}/points/batch", headers=headers if headers else None, @@ -142,7 +142,7 @@ def _build_for_count_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20019, + type_=m.InlineResponse20020, method="POST", url="/collections/{collection_name}/points/count", headers=headers if headers else None, @@ -278,7 +278,7 @@ def _build_for_facet( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20020, + type_=m.InlineResponse20021, method="POST", url="/collections/{collection_name}/facet", headers=headers if headers else None, @@ -307,7 +307,7 @@ def _build_for_get_point( headers = {} return self.api_client.request( - type_=m.InlineResponse20012, + type_=m.InlineResponse20013, method="GET", url="/collections/{collection_name}/points/{id}", headers=headers if headers else None, @@ -340,7 +340,7 @@ def _build_for_get_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20013, + type_=m.InlineResponse20014, method="POST", url="/collections/{collection_name}/points", headers=headers if headers else None, @@ -408,7 +408,7 @@ def _build_for_scroll_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20015, + type_=m.InlineResponse20016, method="POST", url="/collections/{collection_name}/points/scroll", headers=headers if headers else None, @@ -527,7 +527,7 @@ async def batch_update( wait: bool = None, ordering: WriteOrdering = None, update_operations: m.UpdateOperations = None, - ) -> m.InlineResponse20014: + ) -> m.InlineResponse20015: """ Apply a series of update operations for points, vectors and payloads """ @@ -560,7 +560,7 @@ async def count_points( collection_name: str, timeout: int = None, count_request: m.CountRequest = None, - ) -> m.InlineResponse20019: + ) -> m.InlineResponse20020: """ Count points which matches given filtering condition """ @@ -627,7 +627,7 @@ async def facet( timeout: int = None, consistency: m.ReadConsistency = None, facet_request: m.FacetRequest = None, - ) -> m.InlineResponse20020: + ) -> m.InlineResponse20021: """ Count points that satisfy the given filter for each unique value of a payload key. """ @@ -643,7 +643,7 @@ async def get_point( collection_name: str, id: m.ExtendedPointId, consistency: m.ReadConsistency = None, - ) -> m.InlineResponse20012: + ) -> m.InlineResponse20013: """ Retrieve full information of single point by id """ @@ -659,7 +659,7 @@ async def get_points( consistency: m.ReadConsistency = None, timeout: int = None, point_request: m.PointRequest = None, - ) -> m.InlineResponse20013: + ) -> m.InlineResponse20014: """ Retrieve multiple points by specified IDs """ @@ -693,7 +693,7 @@ async def scroll_points( consistency: m.ReadConsistency = None, timeout: int = None, scroll_request: m.ScrollRequest = None, - ) -> m.InlineResponse20015: + ) -> m.InlineResponse20016: """ Scroll request - paginate over all points which matches given filtering condition """ @@ -763,7 +763,7 @@ def batch_update( wait: bool = None, ordering: WriteOrdering = None, update_operations: m.UpdateOperations = None, - ) -> m.InlineResponse20014: + ) -> m.InlineResponse20015: """ Apply a series of update operations for points, vectors and payloads """ @@ -796,7 +796,7 @@ def count_points( collection_name: str, timeout: int = None, count_request: m.CountRequest = None, - ) -> m.InlineResponse20019: + ) -> m.InlineResponse20020: """ Count points which matches given filtering condition """ @@ -863,7 +863,7 @@ def facet( timeout: int = None, consistency: m.ReadConsistency = None, facet_request: m.FacetRequest = None, - ) -> m.InlineResponse20020: + ) -> m.InlineResponse20021: """ Count points that satisfy the given filter for each unique value of a payload key. """ @@ -879,7 +879,7 @@ def get_point( collection_name: str, id: m.ExtendedPointId, consistency: m.ReadConsistency = None, - ) -> m.InlineResponse20012: + ) -> m.InlineResponse20013: """ Retrieve full information of single point by id """ @@ -895,7 +895,7 @@ def get_points( consistency: m.ReadConsistency = None, timeout: int = None, point_request: m.PointRequest = None, - ) -> m.InlineResponse20013: + ) -> m.InlineResponse20014: """ Retrieve multiple points by specified IDs """ @@ -929,7 +929,7 @@ def scroll_points( consistency: m.ReadConsistency = None, timeout: int = None, scroll_request: m.ScrollRequest = None, - ) -> m.InlineResponse20015: + ) -> m.InlineResponse20016: """ Scroll request - paginate over all points which matches given filtering condition """ diff --git a/qdrant_client/http/api/search_api.py b/qdrant_client/http/api/search_api.py index 87fd7a6d2..35e1fb314 100644 --- a/qdrant_client/http/api/search_api.py +++ b/qdrant_client/http/api/search_api.py @@ -77,7 +77,7 @@ def _build_for_discover_batch_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20017, + type_=m.InlineResponse20018, method="POST", url="/collections/{collection_name}/points/discover/batch", headers=headers if headers else None, @@ -111,7 +111,7 @@ def _build_for_discover_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20016, + type_=m.InlineResponse20017, method="POST", url="/collections/{collection_name}/points/discover", headers=headers if headers else None, @@ -145,7 +145,7 @@ def _build_for_query_batch_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20022, + type_=m.InlineResponse20023, method="POST", url="/collections/{collection_name}/points/query/batch", headers=headers if headers else None, @@ -179,7 +179,7 @@ def _build_for_query_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20021, + type_=m.InlineResponse20022, method="POST", url="/collections/{collection_name}/points/query", headers=headers if headers else None, @@ -213,7 +213,7 @@ def _build_for_query_points_groups( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20018, + type_=m.InlineResponse20019, method="POST", url="/collections/{collection_name}/points/query/groups", headers=headers if headers else None, @@ -247,7 +247,7 @@ def _build_for_recommend_batch_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20017, + type_=m.InlineResponse20018, method="POST", url="/collections/{collection_name}/points/recommend/batch", headers=headers if headers else None, @@ -281,7 +281,7 @@ def _build_for_recommend_point_groups( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20018, + type_=m.InlineResponse20019, method="POST", url="/collections/{collection_name}/points/recommend/groups", headers=headers if headers else None, @@ -315,7 +315,7 @@ def _build_for_recommend_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20016, + type_=m.InlineResponse20017, method="POST", url="/collections/{collection_name}/points/recommend", headers=headers if headers else None, @@ -349,7 +349,7 @@ def _build_for_search_batch_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20017, + type_=m.InlineResponse20018, method="POST", url="/collections/{collection_name}/points/search/batch", headers=headers if headers else None, @@ -383,7 +383,7 @@ def _build_for_search_matrix_offsets( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20024, + type_=m.InlineResponse20025, method="POST", url="/collections/{collection_name}/points/search/matrix/offsets", headers=headers if headers else None, @@ -417,7 +417,7 @@ def _build_for_search_matrix_pairs( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20023, + type_=m.InlineResponse20024, method="POST", url="/collections/{collection_name}/points/search/matrix/pairs", headers=headers if headers else None, @@ -451,7 +451,7 @@ def _build_for_search_point_groups( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20018, + type_=m.InlineResponse20019, method="POST", url="/collections/{collection_name}/points/search/groups", headers=headers if headers else None, @@ -485,7 +485,7 @@ def _build_for_search_points( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse20016, + type_=m.InlineResponse20017, method="POST", url="/collections/{collection_name}/points/search", headers=headers if headers else None, @@ -502,7 +502,7 @@ async def discover_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, discover_request_batch: m.DiscoverRequestBatch = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Look for points based on target and/or positive and negative example pairs, in batch. """ @@ -519,7 +519,7 @@ async def discover_points( consistency: m.ReadConsistency = None, timeout: int = None, discover_request: m.DiscoverRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Use context and a target to find the most similar points to the target, constrained by the context. When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. """ @@ -536,7 +536,7 @@ async def query_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, query_request_batch: m.QueryRequestBatch = None, - ) -> m.InlineResponse20022: + ) -> m.InlineResponse20023: """ Universally query points in batch. This endpoint covers all capabilities of search, recommend, discover, filters. But also enables hybrid and multi-stage queries. """ @@ -553,7 +553,7 @@ async def query_points( consistency: m.ReadConsistency = None, timeout: int = None, query_request: m.QueryRequest = None, - ) -> m.InlineResponse20021: + ) -> m.InlineResponse20022: """ Universally query points. This endpoint covers all capabilities of search, recommend, discover, filters. But also enables hybrid and multi-stage queries. """ @@ -570,7 +570,7 @@ async def query_points_groups( consistency: m.ReadConsistency = None, timeout: int = None, query_groups_request: m.QueryGroupsRequest = None, - ) -> m.InlineResponse20018: + ) -> m.InlineResponse20019: """ Universally query points, grouped by a given payload field """ @@ -587,7 +587,7 @@ async def recommend_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, recommend_request_batch: m.RecommendRequestBatch = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -604,7 +604,7 @@ async def recommend_point_groups( consistency: m.ReadConsistency = None, timeout: int = None, recommend_groups_request: m.RecommendGroupsRequest = None, - ) -> m.InlineResponse20018: + ) -> m.InlineResponse20019: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples, grouped by a given payload field. """ @@ -621,7 +621,7 @@ async def recommend_points( consistency: m.ReadConsistency = None, timeout: int = None, recommend_request: m.RecommendRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -638,7 +638,7 @@ async def search_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, search_request_batch: m.SearchRequestBatch = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Retrieve by batch the closest points based on vector similarity and given filtering conditions """ @@ -655,7 +655,7 @@ async def search_matrix_offsets( consistency: m.ReadConsistency = None, timeout: int = None, search_matrix_request: m.SearchMatrixRequest = None, - ) -> m.InlineResponse20024: + ) -> m.InlineResponse20025: """ Compute distance matrix for sampled points with an offset based output format """ @@ -672,7 +672,7 @@ async def search_matrix_pairs( consistency: m.ReadConsistency = None, timeout: int = None, search_matrix_request: m.SearchMatrixRequest = None, - ) -> m.InlineResponse20023: + ) -> m.InlineResponse20024: """ Compute distance matrix for sampled points with a pair based output format """ @@ -689,7 +689,7 @@ async def search_point_groups( consistency: m.ReadConsistency = None, timeout: int = None, search_groups_request: m.SearchGroupsRequest = None, - ) -> m.InlineResponse20018: + ) -> m.InlineResponse20019: """ Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field """ @@ -706,7 +706,7 @@ async def search_points( consistency: m.ReadConsistency = None, timeout: int = None, search_request: m.SearchRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Retrieve closest points based on vector similarity and given filtering conditions """ @@ -725,7 +725,7 @@ def discover_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, discover_request_batch: m.DiscoverRequestBatch = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Look for points based on target and/or positive and negative example pairs, in batch. """ @@ -742,7 +742,7 @@ def discover_points( consistency: m.ReadConsistency = None, timeout: int = None, discover_request: m.DiscoverRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Use context and a target to find the most similar points to the target, constrained by the context. When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. """ @@ -759,7 +759,7 @@ def query_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, query_request_batch: m.QueryRequestBatch = None, - ) -> m.InlineResponse20022: + ) -> m.InlineResponse20023: """ Universally query points in batch. This endpoint covers all capabilities of search, recommend, discover, filters. But also enables hybrid and multi-stage queries. """ @@ -776,7 +776,7 @@ def query_points( consistency: m.ReadConsistency = None, timeout: int = None, query_request: m.QueryRequest = None, - ) -> m.InlineResponse20021: + ) -> m.InlineResponse20022: """ Universally query points. This endpoint covers all capabilities of search, recommend, discover, filters. But also enables hybrid and multi-stage queries. """ @@ -793,7 +793,7 @@ def query_points_groups( consistency: m.ReadConsistency = None, timeout: int = None, query_groups_request: m.QueryGroupsRequest = None, - ) -> m.InlineResponse20018: + ) -> m.InlineResponse20019: """ Universally query points, grouped by a given payload field """ @@ -810,7 +810,7 @@ def recommend_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, recommend_request_batch: m.RecommendRequestBatch = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -827,7 +827,7 @@ def recommend_point_groups( consistency: m.ReadConsistency = None, timeout: int = None, recommend_groups_request: m.RecommendGroupsRequest = None, - ) -> m.InlineResponse20018: + ) -> m.InlineResponse20019: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples, grouped by a given payload field. """ @@ -844,7 +844,7 @@ def recommend_points( consistency: m.ReadConsistency = None, timeout: int = None, recommend_request: m.RecommendRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -861,7 +861,7 @@ def search_batch_points( consistency: m.ReadConsistency = None, timeout: int = None, search_request_batch: m.SearchRequestBatch = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Retrieve by batch the closest points based on vector similarity and given filtering conditions """ @@ -878,7 +878,7 @@ def search_matrix_offsets( consistency: m.ReadConsistency = None, timeout: int = None, search_matrix_request: m.SearchMatrixRequest = None, - ) -> m.InlineResponse20024: + ) -> m.InlineResponse20025: """ Compute distance matrix for sampled points with an offset based output format """ @@ -895,7 +895,7 @@ def search_matrix_pairs( consistency: m.ReadConsistency = None, timeout: int = None, search_matrix_request: m.SearchMatrixRequest = None, - ) -> m.InlineResponse20023: + ) -> m.InlineResponse20024: """ Compute distance matrix for sampled points with a pair based output format """ @@ -912,7 +912,7 @@ def search_point_groups( consistency: m.ReadConsistency = None, timeout: int = None, search_groups_request: m.SearchGroupsRequest = None, - ) -> m.InlineResponse20018: + ) -> m.InlineResponse20019: """ Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field """ @@ -929,7 +929,7 @@ def search_points( consistency: m.ReadConsistency = None, timeout: int = None, search_request: m.SearchRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Retrieve closest points based on vector similarity and given filtering conditions """ diff --git a/qdrant_client/http/api/snapshots_api.py b/qdrant_client/http/api/snapshots_api.py index 6d3fca39c..460edbba5 100644 --- a/qdrant_client/http/api/snapshots_api.py +++ b/qdrant_client/http/api/snapshots_api.py @@ -65,7 +65,7 @@ def _build_for_create_full_snapshot( headers = {} return self.api_client.request( - type_=m.InlineResponse20011, + type_=m.InlineResponse20012, method="POST", url="/snapshots", headers=headers if headers else None, @@ -92,7 +92,7 @@ def _build_for_create_shard_snapshot( headers = {} return self.api_client.request( - type_=m.InlineResponse20011, + type_=m.InlineResponse20012, method="POST", url="/collections/{collection_name}/shards/{shard_id}/snapshots", headers=headers if headers else None, @@ -118,7 +118,7 @@ def _build_for_create_snapshot( headers = {} return self.api_client.request( - type_=m.InlineResponse20011, + type_=m.InlineResponse20012, method="POST", url="/collections/{collection_name}/snapshots", headers=headers if headers else None, @@ -144,7 +144,7 @@ def _build_for_delete_full_snapshot( headers = {} return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="DELETE", url="/snapshots/{snapshot_name}", headers=headers if headers else None, @@ -174,7 +174,7 @@ def _build_for_delete_shard_snapshot( headers = {} return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="DELETE", url="/collections/{collection_name}/shards/{shard_id}/snapshots/{snapshot_name}", headers=headers if headers else None, @@ -202,7 +202,7 @@ def _build_for_delete_snapshot( headers = {} return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="DELETE", url="/collections/{collection_name}/snapshots/{snapshot_name}", headers=headers if headers else None, @@ -284,7 +284,7 @@ def _build_for_list_full_snapshots( """ headers = {} return self.api_client.request( - type_=m.InlineResponse20010, + type_=m.InlineResponse20011, method="GET", url="/snapshots", headers=headers if headers else None, @@ -305,7 +305,7 @@ def _build_for_list_shard_snapshots( headers = {} return self.api_client.request( - type_=m.InlineResponse20010, + type_=m.InlineResponse20011, method="GET", url="/collections/{collection_name}/shards/{shard_id}/snapshots", headers=headers if headers else None, @@ -325,7 +325,7 @@ def _build_for_list_snapshots( headers = {} return self.api_client.request( - type_=m.InlineResponse20010, + type_=m.InlineResponse20011, method="GET", url="/collections/{collection_name}/snapshots", headers=headers if headers else None, @@ -354,7 +354,7 @@ def _build_for_recover_from_snapshot( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="PUT", url="/collections/{collection_name}/snapshots/recover", headers=headers if headers else None, @@ -393,7 +393,7 @@ def _build_for_recover_from_uploaded_snapshot( files["snapshot"] = snapshot return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="POST", url="/collections/{collection_name}/snapshots/upload", headers=headers if headers else None, @@ -427,7 +427,7 @@ def _build_for_recover_shard_from_snapshot( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="PUT", url="/collections/{collection_name}/shards/{shard_id}/snapshots/recover", headers=headers if headers else None, @@ -468,7 +468,7 @@ def _build_for_recover_shard_from_uploaded_snapshot( files["snapshot"] = snapshot return self.api_client.request( - type_=m.InlineResponse200, + type_=m.InlineResponse20010, method="POST", url="/collections/{collection_name}/shards/{shard_id}/snapshots/upload", headers=headers if headers else None, @@ -483,7 +483,7 @@ class AsyncSnapshotsApi(_SnapshotsApi): async def create_full_snapshot( self, wait: bool = None, - ) -> m.InlineResponse20011: + ) -> m.InlineResponse20012: """ Create new snapshot of the whole storage """ @@ -496,7 +496,7 @@ async def create_shard_snapshot( collection_name: str, shard_id: int, wait: bool = None, - ) -> m.InlineResponse20011: + ) -> m.InlineResponse20012: """ Create new snapshot of a shard for a collection """ @@ -510,7 +510,7 @@ async def create_snapshot( self, collection_name: str, wait: bool = None, - ) -> m.InlineResponse20011: + ) -> m.InlineResponse20012: """ Create new snapshot for a collection """ @@ -523,7 +523,7 @@ async def delete_full_snapshot( self, snapshot_name: str, wait: bool = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Delete snapshot of the whole storage """ @@ -538,7 +538,7 @@ async def delete_shard_snapshot( shard_id: int, snapshot_name: str, wait: bool = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Delete snapshot of a shard for a collection """ @@ -554,7 +554,7 @@ async def delete_snapshot( collection_name: str, snapshot_name: str, wait: bool = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Delete snapshot for a collection """ @@ -605,7 +605,7 @@ async def get_snapshot( async def list_full_snapshots( self, - ) -> m.InlineResponse20010: + ) -> m.InlineResponse20011: """ Get list of snapshots of the whole storage """ @@ -615,7 +615,7 @@ async def list_shard_snapshots( self, collection_name: str, shard_id: int, - ) -> m.InlineResponse20010: + ) -> m.InlineResponse20011: """ Get list of snapshots for a shard of a collection """ @@ -627,7 +627,7 @@ async def list_shard_snapshots( async def list_snapshots( self, collection_name: str, - ) -> m.InlineResponse20010: + ) -> m.InlineResponse20011: """ Get list of snapshots for a collection """ @@ -640,7 +640,7 @@ async def recover_from_snapshot( collection_name: str, wait: bool = None, snapshot_recover: m.SnapshotRecover = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover local collection data from a snapshot. This will overwrite any data, stored on this node, for the collection. If collection does not exist - it will be created. """ @@ -657,7 +657,7 @@ async def recover_from_uploaded_snapshot( priority: SnapshotPriority = None, checksum: str = None, snapshot: IO[Any] = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover local collection data from an uploaded snapshot. This will overwrite any data, stored on this node, for the collection. If collection does not exist - it will be created. """ @@ -675,7 +675,7 @@ async def recover_shard_from_snapshot( shard_id: int, wait: bool = None, shard_snapshot_recover: m.ShardSnapshotRecover = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover shard of a local collection data from a snapshot. This will overwrite any data, stored in this shard, for the collection. """ @@ -694,7 +694,7 @@ async def recover_shard_from_uploaded_snapshot( priority: SnapshotPriority = None, checksum: str = None, snapshot: IO[Any] = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover shard of a local collection from an uploaded snapshot. This will overwrite any data, stored on this node, for the collection shard. """ @@ -712,7 +712,7 @@ class SyncSnapshotsApi(_SnapshotsApi): def create_full_snapshot( self, wait: bool = None, - ) -> m.InlineResponse20011: + ) -> m.InlineResponse20012: """ Create new snapshot of the whole storage """ @@ -725,7 +725,7 @@ def create_shard_snapshot( collection_name: str, shard_id: int, wait: bool = None, - ) -> m.InlineResponse20011: + ) -> m.InlineResponse20012: """ Create new snapshot of a shard for a collection """ @@ -739,7 +739,7 @@ def create_snapshot( self, collection_name: str, wait: bool = None, - ) -> m.InlineResponse20011: + ) -> m.InlineResponse20012: """ Create new snapshot for a collection """ @@ -752,7 +752,7 @@ def delete_full_snapshot( self, snapshot_name: str, wait: bool = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Delete snapshot of the whole storage """ @@ -767,7 +767,7 @@ def delete_shard_snapshot( shard_id: int, snapshot_name: str, wait: bool = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Delete snapshot of a shard for a collection """ @@ -783,7 +783,7 @@ def delete_snapshot( collection_name: str, snapshot_name: str, wait: bool = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Delete snapshot for a collection """ @@ -834,7 +834,7 @@ def get_snapshot( def list_full_snapshots( self, - ) -> m.InlineResponse20010: + ) -> m.InlineResponse20011: """ Get list of snapshots of the whole storage """ @@ -844,7 +844,7 @@ def list_shard_snapshots( self, collection_name: str, shard_id: int, - ) -> m.InlineResponse20010: + ) -> m.InlineResponse20011: """ Get list of snapshots for a shard of a collection """ @@ -856,7 +856,7 @@ def list_shard_snapshots( def list_snapshots( self, collection_name: str, - ) -> m.InlineResponse20010: + ) -> m.InlineResponse20011: """ Get list of snapshots for a collection """ @@ -869,7 +869,7 @@ def recover_from_snapshot( collection_name: str, wait: bool = None, snapshot_recover: m.SnapshotRecover = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover local collection data from a snapshot. This will overwrite any data, stored on this node, for the collection. If collection does not exist - it will be created. """ @@ -886,7 +886,7 @@ def recover_from_uploaded_snapshot( priority: SnapshotPriority = None, checksum: str = None, snapshot: IO[Any] = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover local collection data from an uploaded snapshot. This will overwrite any data, stored on this node, for the collection. If collection does not exist - it will be created. """ @@ -904,7 +904,7 @@ def recover_shard_from_snapshot( shard_id: int, wait: bool = None, shard_snapshot_recover: m.ShardSnapshotRecover = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover shard of a local collection data from a snapshot. This will overwrite any data, stored in this shard, for the collection. """ @@ -923,7 +923,7 @@ def recover_shard_from_uploaded_snapshot( priority: SnapshotPriority = None, checksum: str = None, snapshot: IO[Any] = None, - ) -> m.InlineResponse200: + ) -> m.InlineResponse20010: """ Recover shard of a local collection from an uploaded snapshot. This will overwrite any data, stored on this node, for the collection shard. """ diff --git a/qdrant_client/http/models/models.py b/qdrant_client/http/models/models.py index 63907e0bd..646927239 100644 --- a/qdrant_client/http/models/models.py +++ b/qdrant_client/http/models/models.py @@ -1,6 +1,7 @@ from datetime import date, datetime from enum import Enum from typing import Any, Dict, List, Literal, Optional, Union +from uuid import UUID from pydantic import BaseModel, Field from pydantic.types import StrictBool, StrictFloat, StrictInt, StrictStr @@ -40,6 +41,7 @@ class AppFeaturesTelemetry(BaseModel): web_feature: bool = Field(..., description="") service_debug_feature: bool = Field(..., description="") recovery_mode: bool = Field(..., description="") + gpu: bool = Field(..., description="") class Batch(BaseModel, extra="forbid"): @@ -58,6 +60,7 @@ class BinaryQuantizationConfig(BaseModel, extra="forbid"): class BoolIndexParams(BaseModel, extra="forbid"): type: "BoolIndexType" = Field(..., description="") + on_disk: Optional[bool] = Field(default=None, description="If true, store the index on disk. Default: false.") class BoolIndexType(str, Enum): @@ -142,11 +145,32 @@ class CollectionClusterInfo(BaseModel): class CollectionConfig(BaseModel): + """ + Information about the collection configuration + """ + + params: "CollectionParams" = Field(..., description="Information about the collection configuration") + hnsw_config: "HnswConfig" = Field(..., description="Information about the collection configuration") + optimizer_config: "OptimizersConfig" = Field(..., description="Information about the collection configuration") + wal_config: Optional["WalConfig"] = Field( + default=None, description="Information about the collection configuration" + ) + quantization_config: Optional["QuantizationConfig"] = Field( + default=None, description="Information about the collection configuration" + ) + strict_mode_config: Optional["StrictModeConfig"] = Field( + default=None, description="Information about the collection configuration" + ) + + +class CollectionConfigInternal(BaseModel): params: "CollectionParams" = Field(..., description="") hnsw_config: "HnswConfig" = Field(..., description="") optimizer_config: "OptimizersConfig" = Field(..., description="") wal_config: "WalConfig" = Field(..., description="") quantization_config: Optional["QuantizationConfig"] = Field(default=None, description="") + strict_mode_config: Optional["StrictModeConfig"] = Field(default=None, description="") + uuid: Optional[UUID] = Field(default=None, description="") class CollectionDescription(BaseModel): @@ -206,8 +230,8 @@ class CollectionParams(BaseModel): description="Defines how many additional replicas should be processing read request at the same time. Default value is Auto, which means that fan-out will be determined automatically based on the busyness of the local replica. Having more than 0 might be useful to smooth latency spikes of individual nodes.", ) on_disk_payload: Optional[bool] = Field( - default=False, - description="If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM.", + default=True, + description="If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. Default: true", ) sparse_vectors: Optional[Dict[str, "SparseVectorParams"]] = Field( default=None, description="Configuration of the sparse vector storage" @@ -246,10 +270,11 @@ def __str__(self) -> str: class CollectionTelemetry(BaseModel): id: str = Field(..., description="") init_time_ms: int = Field(..., description="") - config: "CollectionConfig" = Field(..., description="") + config: "CollectionConfigInternal" = Field(..., description="") shards: List["ReplicaSetTelemetry"] = Field(..., description="") transfers: List["ShardTransferInfo"] = Field(..., description="") resharding: List["ReshardingInfo"] = Field(..., description="") + shard_clean_tasks: Dict[str, "ShardCleanStatusTelemetry"] = Field(..., description="") class CollectionsAggregatedTelemetry(BaseModel): @@ -389,7 +414,7 @@ class CreateCollection(BaseModel, extra="forbid"): ) on_disk_payload: Optional[bool] = Field( default=None, - description="If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM.", + description="If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. Default: true", ) hnsw_config: Optional["HnswConfigDiff"] = Field( default=None, @@ -792,6 +817,10 @@ class GeoRadius(BaseModel, extra="forbid"): radius: float = Field(..., description="Radius of the area in meters") +class GpuDeviceTelemetry(BaseModel): + name: str = Field(..., description="") + + class GroupsResult(BaseModel): groups: List["PointGroup"] = Field(..., description="") @@ -800,6 +829,18 @@ class GrpcTelemetry(BaseModel): responses: Dict[str, "OperationDurationStatistics"] = Field(..., description="") +class HardwareTelemetry(BaseModel): + collection_data: Dict[str, "HardwareUsage"] = Field(..., description="") + + +class HardwareUsage(BaseModel): + """ + Usage of the hardware resources, spent to process the request + """ + + cpu: int = Field(..., description="Usage of the hardware resources, spent to process the request") + + class HasIdCondition(BaseModel, extra="forbid"): """ ID-based filtering condition @@ -808,6 +849,14 @@ class HasIdCondition(BaseModel, extra="forbid"): has_id: List["ExtendedPointId"] = Field(..., description="ID-based filtering condition") +class HasVectorCondition(BaseModel, extra="forbid"): + """ + Filter points which have specific vector assigned + """ + + has_vector: str = Field(..., description="Filter points which have specific vector assigned") + + class HnswConfig(BaseModel): """ Config of HNSW index @@ -938,12 +987,14 @@ class InitFrom(BaseModel, extra="forbid"): class InlineResponse200(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional[bool] = Field(default=None, description="") class InlineResponse2001(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["TelemetryData"] = Field(default=None, description="") @@ -952,136 +1003,164 @@ class InlineResponse2001(BaseModel): class InlineResponse20010(BaseModel): time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional[List["SnapshotDescription"]] = Field(default=None, description="") + result: Optional[bool] = Field(default=None, description="") class InlineResponse20011(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["SnapshotDescription"] = Field(default=None, description="") + result: Optional[List["SnapshotDescription"]] = Field(default=None, description="") class InlineResponse20012(BaseModel): time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["Record"] = Field(default=None, description="") + result: Optional["SnapshotDescription"] = Field(default=None, description="") class InlineResponse20013(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional[List["Record"]] = Field(default=None, description="") + result: Optional["Record"] = Field(default=None, description="") class InlineResponse20014(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional[List["UpdateResult"]] = Field(default=None, description="") + result: Optional[List["Record"]] = Field(default=None, description="") class InlineResponse20015(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["ScrollResult"] = Field(default=None, description="") + result: Optional[List["UpdateResult"]] = Field(default=None, description="") class InlineResponse20016(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional[List["ScoredPoint"]] = Field(default=None, description="") + result: Optional["ScrollResult"] = Field(default=None, description="") class InlineResponse20017(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional[List[List["ScoredPoint"]]] = Field(default=None, description="") + result: Optional[List["ScoredPoint"]] = Field(default=None, description="") class InlineResponse20018(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["GroupsResult"] = Field(default=None, description="") + result: Optional[List[List["ScoredPoint"]]] = Field(default=None, description="") class InlineResponse20019(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["CountResult"] = Field(default=None, description="") + result: Optional["GroupsResult"] = Field(default=None, description="") class InlineResponse2002(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["LocksOption"] = Field(default=None, description="") class InlineResponse20020(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["FacetResponse"] = Field(default=None, description="") + result: Optional["CountResult"] = Field(default=None, description="") class InlineResponse20021(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["QueryResponse"] = Field(default=None, description="") + result: Optional["FacetResponse"] = Field(default=None, description="") class InlineResponse20022(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional[List["QueryResponse"]] = Field(default=None, description="") + result: Optional["QueryResponse"] = Field(default=None, description="") class InlineResponse20023(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") - result: Optional["SearchMatrixPairsResponse"] = Field(default=None, description="") + result: Optional[List["QueryResponse"]] = Field(default=None, description="") class InlineResponse20024(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") + time: Optional[float] = Field(default=None, description="Time spent to process this request") + status: Optional[str] = Field(default=None, description="") + result: Optional["SearchMatrixPairsResponse"] = Field(default=None, description="") + + +class InlineResponse20025(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["SearchMatrixOffsetsResponse"] = Field(default=None, description="") class InlineResponse2003(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["ClusterStatus"] = Field(default=None, description="") class InlineResponse2004(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["CollectionsResponse"] = Field(default=None, description="") class InlineResponse2005(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["CollectionInfo"] = Field(default=None, description="") class InlineResponse2006(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["UpdateResult"] = Field(default=None, description="") class InlineResponse2007(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["CollectionExistence"] = Field(default=None, description="") class InlineResponse2008(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["CollectionClusterInfo"] = Field(default=None, description="") class InlineResponse2009(BaseModel): + usage: Optional["HardwareUsage"] = Field(default=None, description="") time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Optional[str] = Field(default=None, description="") result: Optional["CollectionsAliasesResponse"] = Field(default=None, description="") @@ -1148,6 +1227,7 @@ class LocalShardTelemetry(BaseModel): total_optimized_points: int = Field(..., description="Total number of optimized points since the last start.") segments: List["SegmentTelemetry"] = Field(..., description="") optimizations: "OptimizerTelemetry" = Field(..., description="") + async_scorer: Optional[bool] = Field(default=None, description="") class LocksOption(BaseModel, extra="forbid"): @@ -1205,6 +1285,18 @@ class MatchValue(BaseModel, extra="forbid"): value: "ValueVariants" = Field(..., description="Exact match of the given value") +class MaxOptimizationThreadsSetting(str, Enum): + AUTO = "auto" + + +class MemoryTelemetry(BaseModel): + active_bytes: int = Field(..., description="Total number of bytes in active pages allocated by the application") + allocated_bytes: int = Field(..., description="Total number of bytes allocated by the application") + metadata_bytes: int = Field(..., description="Total number of bytes dedicated to metadata") + resident_bytes: int = Field(..., description="Maximum number of bytes in physically resident data pages mapped") + retained_bytes: int = Field(..., description="Total number of bytes in virtual memory mappings") + + class MessageSendErrors(BaseModel): """ Message send failures for a particular peer @@ -1330,7 +1422,7 @@ class OptimizersConfig(BaseModel): ) memmap_threshold: Optional[int] = Field( default=None, - description="Maximum size (in kilobytes) of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmaped file. Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value. To disable memmap storage, set this to `0`. Internally it will use the largest threshold possible. Note: 1Kb = 1 vector of size 256", + description="Maximum size (in kilobytes) of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmapped file. Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value. To disable memmap storage, set this to `0`. Internally it will use the largest threshold possible. Note: 1Kb = 1 vector of size 256", ) indexing_threshold: Optional[int] = Field( default=None, @@ -1361,16 +1453,16 @@ class OptimizersConfigDiff(BaseModel, extra="forbid"): ) memmap_threshold: Optional[int] = Field( default=None, - description="Maximum size (in kilobytes) of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmaped file. Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value. To disable memmap storage, set this to `0`. Note: 1Kb = 1 vector of size 256", + description="Maximum size (in kilobytes) of vectors to store in-memory per segment. Segments larger than this threshold will be stored as read-only memmapped file. Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value. To disable memmap storage, set this to `0`. Note: 1Kb = 1 vector of size 256", ) indexing_threshold: Optional[int] = Field( default=None, description="Maximum size (in kilobytes) of vectors allowed for plain index, exceeding this threshold will enable vector indexing Default value is 20,000, based on <https://github.com/google-research/google-research/blob/master/scann/docs/algorithms.md>. To disable vector indexing, set to `0`. Note: 1kB = 1 vector of size 256.", ) flush_interval_sec: Optional[int] = Field(default=None, description="Minimum interval between forced flushes.") - max_optimization_threads: Optional[int] = Field( + max_optimization_threads: Optional["MaxOptimizationThreads"] = Field( default=None, - description="Max number of threads (jobs) for running optimizations per shard. Note: each optimization job will also use `max_indexing_threads` threads by itself for index building. If null - have no limit and choose dynamically to saturate CPU. If 0 - no optimization threads, optimizations will be disabled.", + description="Max number of threads (jobs) for running optimizations per shard. Note: each optimization job will also use `max_indexing_threads` threads by itself for index building. If "auto" - have no limit and choose dynamically to saturate CPU. If 0 - no optimization threads, optimizations will be disabled.", ) @@ -1438,8 +1530,8 @@ class PayloadIndexInfo(BaseModel): class PayloadIndexTelemetry(BaseModel): field_name: Optional[str] = Field(default=None, description="") - points_values_count: int = Field(..., description="") - points_count: int = Field(..., description="") + points_values_count: int = Field(..., description="The amount of values indexed for all points.") + points_count: int = Field(..., description="The amount of points that have at least one value indexed.") histogram_bucket_size: Optional[int] = Field(default=None, description="") @@ -1481,6 +1573,12 @@ class PayloadStorageTypeOneOf1(BaseModel): ] = Field(..., description="") +class PayloadStorageTypeOneOf2(BaseModel): + type: Literal[ + "mmap", + ] = Field(..., description="") + + class PeerInfo(BaseModel): """ Information of a peer in the cluster @@ -1882,6 +1980,7 @@ class Replica(BaseModel, extra="forbid"): class ReplicaSetTelemetry(BaseModel): id: int = Field(..., description="") + key: Optional["ShardKey"] = Field(default=None, description="") local: Optional["LocalShardTelemetry"] = Field(default=None, description="") remote: List["RemoteShardTelemetry"] = Field(..., description="") replicate_states: Dict[str, "ReplicaState"] = Field(..., description="") @@ -1975,6 +2074,7 @@ class RunningEnvironmentTelemetry(BaseModel): disk_size: Optional[int] = Field(default=None, description="") cpu_flags: str = Field(..., description="") cpu_endian: Optional["CpuEndian"] = Field(default=None, description="") + gpu_devices: Optional[List["GpuDeviceTelemetry"]] = Field(default=None, description="") class Sample(str, Enum): @@ -2191,6 +2291,13 @@ class SegmentInfo(BaseModel): num_points: int = Field(..., description="Aggregated information about segment") num_indexed_vectors: int = Field(..., description="Aggregated information about segment") num_deleted_vectors: int = Field(..., description="Aggregated information about segment") + vectors_size_bytes: int = Field( + ..., + description="An ESTIMATION of effective amount of bytes used for vectors Do NOT rely on this number unless you know what you are doing", + ) + payloads_size_bytes: int = Field( + ..., description="An estimation of the effective amount of bytes used for payloads" + ) ram_usage_bytes: int = Field(..., description="Aggregated information about segment") disk_usage_bytes: int = Field(..., description="Aggregated information about segment") is_appendable: bool = Field(..., description="Aggregated information about segment") @@ -2244,6 +2351,28 @@ class SetPayloadOperation(BaseModel, extra="forbid"): set_payload: "SetPayload" = Field(..., description="") +class ShardCleanStatusFailedTelemetry(BaseModel): + reason: str = Field(..., description="") + + +class ShardCleanStatusProgressTelemetry(BaseModel): + deleted_points: int = Field(..., description="") + + +class ShardCleanStatusTelemetryOneOf(str, Enum): + STARTED = "started" + DONE = "done" + CANCELLED = "cancelled" + + +class ShardCleanStatusTelemetryOneOf1(BaseModel): + progress: "ShardCleanStatusProgressTelemetry" = Field(..., description="") + + +class ShardCleanStatusTelemetryOneOf2(BaseModel): + failed: "ShardCleanStatusFailedTelemetry" = Field(..., description="") + + class ShardSnapshotRecover(BaseModel, extra="forbid"): location: "ShardSnapshotLocation" = Field(..., description="") priority: Optional["SnapshotPriority"] = Field(default=None, description="") @@ -2440,6 +2569,9 @@ class SparseVectorDataConfig(BaseModel): """ index: "SparseIndexConfig" = Field(..., description="Config of single sparse vector data storage") + storage_type: Optional["SparseVectorStorageType"] = Field( + default=None, description="Config of single sparse vector data storage" + ) class SparseVectorParams(BaseModel, extra="forbid"): @@ -2455,6 +2587,28 @@ class SparseVectorParams(BaseModel, extra="forbid"): ) +class SparseVectorStorageTypeOneOf(str, Enum): + """ + Storage on disk + """ + + def __str__(self) -> str: + return str(self.value) + + ON_DISK = "on_disk" + + +class SparseVectorStorageTypeOneOf1(str, Enum): + """ + Storage in memory maps + """ + + def __str__(self) -> str: + return str(self.value) + + MMAP = "mmap" + + class StateRole(str, Enum): """ Role of the peer in the consensus @@ -2486,14 +2640,29 @@ class StrictModeConfig(BaseModel, extra="forbid"): search_max_oversampling: Optional[float] = Field( default=None, description="Max oversampling value allowed in search." ) + upsert_max_batchsize: Optional[int] = Field(default=None, description="Max batchsize when upserting") + max_collection_vector_size_bytes: Optional[int] = Field( + default=None, description="Max size of a collections vector storage in bytes, ignoring replicas." + ) + read_rate_limit: Optional[int] = Field( + default=None, description="Max number of read operations per minute per replica" + ) + write_rate_limit: Optional[int] = Field( + default=None, description="Max number of write operations per minute per replica" + ) + max_collection_payload_size_bytes: Optional[int] = Field( + default=None, description="Max size of a collections payload storage in bytes" + ) class TelemetryData(BaseModel): id: str = Field(..., description="") app: "AppBuildTelemetry" = Field(..., description="") collections: "CollectionsTelemetry" = Field(..., description="") - cluster: "ClusterTelemetry" = Field(..., description="") - requests: "RequestsTelemetry" = Field(..., description="") + cluster: Optional["ClusterTelemetry"] = Field(default=None, description="") + requests: Optional["RequestsTelemetry"] = Field(default=None, description="") + memory: Optional["MemoryTelemetry"] = Field(default=None, description="") + hardware: Optional["HardwareTelemetry"] = Field(default=None, description="") class TextIndexParams(BaseModel, extra="forbid"): @@ -2838,6 +3007,7 @@ def __str__(self) -> str: IsEmptyCondition, IsNullCondition, HasIdCondition, + HasVectorCondition, NestedCondition, Filter, ] @@ -2873,6 +3043,10 @@ def __str__(self) -> str: MatchAny, MatchExcept, ] +MaxOptimizationThreads = Union[ + StrictInt, + MaxOptimizationThreadsSetting, +] NamedVectorStruct = Union[ List[StrictFloat], NamedVector, @@ -2907,6 +3081,7 @@ def __str__(self) -> str: PayloadStorageType = Union[ PayloadStorageTypeOneOf, PayloadStorageTypeOneOf1, + PayloadStorageTypeOneOf2, ] PointInsertOperations = Union[ PointsBatch, @@ -2948,6 +3123,11 @@ def __str__(self) -> str: ReshardingDirectionOneOf, ReshardingDirectionOneOf1, ] +ShardCleanStatusTelemetry = Union[ + ShardCleanStatusTelemetryOneOf, + ShardCleanStatusTelemetryOneOf1, + ShardCleanStatusTelemetryOneOf2, +] ShardKey = Union[ StrictInt, StrictStr, @@ -2965,6 +3145,10 @@ def __str__(self) -> str: SparseIndexTypeOneOf1, SparseIndexTypeOneOf2, ] +SparseVectorStorageType = Union[ + SparseVectorStorageTypeOneOf, + SparseVectorStorageTypeOneOf1, +] StartFrom = Union[ StrictInt, StrictFloat, diff --git a/qdrant_client/local/local_collection.py b/qdrant_client/local/local_collection.py index ab679ad13..bddfcf3f3 100644 --- a/qdrant_client/local/local_collection.py +++ b/qdrant_client/local/local_collection.py @@ -501,6 +501,7 @@ def _payload_and_non_deleted_mask( payloads=self.payload, payload_filter=payload_filter, ids_inv=self.ids_inv, + deleted_per_vector=self.deleted_per_vector, ) # in deleted: 1 - deleted, 0 - not deleted diff --git a/qdrant_client/local/payload_filters.py b/qdrant_client/local/payload_filters.py index 8067c7cff..4a8682e42 100644 --- a/qdrant_client/local/payload_filters.py +++ b/qdrant_client/local/payload_filters.py @@ -1,5 +1,5 @@ from datetime import date, datetime, timezone -from typing import Any, Optional, Union +from typing import Any, Optional, Union, Dict import numpy as np @@ -159,11 +159,14 @@ def check_match(condition: models.Match, value: Any) -> bool: def check_nested_filter(nested_filter: models.Filter, values: list[Any]) -> bool: - return any(check_filter(nested_filter, v, point_id=-1) for v in values) + return any(check_filter(nested_filter, v, point_id=-1, has_vector={}) for v in values) def check_condition( - condition: models.Condition, payload: dict, point_id: models.ExtendedPointId + condition: models.Condition, + payload: dict, + point_id: models.ExtendedPointId, + has_vector: Dict[str, bool], ) -> bool: if isinstance(condition, models.IsNullCondition): values = value_by_key(payload, condition.is_null.key, flat=False) @@ -182,6 +185,9 @@ def check_condition( elif isinstance(condition, models.HasIdCondition): if point_id in condition.has_id: return True + elif isinstance(condition, models.HasVectorCondition): + if condition.has_vector in has_vector and has_vector[condition.has_vector]: + return True elif isinstance(condition, models.FieldCondition): values = value_by_key(payload, condition.key) if condition.match is not None: @@ -213,58 +219,79 @@ def check_condition( return False return check_nested_filter(condition.nested.filter, values) elif isinstance(condition, models.Filter): - return check_filter(condition, payload, point_id) + return check_filter(condition, payload, point_id, has_vector) else: raise ValueError(f"Unknown condition: {condition}") return False def check_must( - conditions: list[models.Condition], payload: dict, point_id: models.ExtendedPointId + conditions: list[models.Condition], + payload: dict, + point_id: models.ExtendedPointId, + has_vector: Dict[str, bool], ) -> bool: - return all(check_condition(condition, payload, point_id) for condition in conditions) + return all( + check_condition(condition, payload, point_id, has_vector) for condition in conditions + ) def check_must_not( - conditions: list[models.Condition], payload: dict, point_id: models.ExtendedPointId + conditions: list[models.Condition], + payload: dict, + point_id: models.ExtendedPointId, + has_vector: Dict[str, bool], ) -> bool: - return all(not check_condition(condition, payload, point_id) for condition in conditions) + return all( + not check_condition(condition, payload, point_id, has_vector) for condition in conditions + ) def check_should( - conditions: list[models.Condition], payload: dict, point_id: models.ExtendedPointId + conditions: list[models.Condition], + payload: dict, + point_id: models.ExtendedPointId, + has_vector: Dict[str, bool], ) -> bool: - return any(check_condition(condition, payload, point_id) for condition in conditions) + return any( + check_condition(condition, payload, point_id, has_vector) for condition in conditions + ) def check_min_should( conditions: list[models.Condition], payload: dict, point_id: models.ExtendedPointId, + vectors: Dict[str, Any], min_count: int, ) -> bool: return ( - sum(check_condition(condition, payload, point_id) for condition in conditions) >= min_count + sum(check_condition(condition, payload, point_id, vectors) for condition in conditions) + >= min_count ) def check_filter( - payload_filter: models.Filter, payload: dict, point_id: models.ExtendedPointId + payload_filter: models.Filter, + payload: dict, + point_id: models.ExtendedPointId, + has_vector: Dict[str, bool], ) -> bool: if payload_filter.must is not None: - if not check_must(payload_filter.must, payload, point_id): + if not check_must(payload_filter.must, payload, point_id, has_vector): return False if payload_filter.must_not is not None: - if not check_must_not(payload_filter.must_not, payload, point_id): + if not check_must_not(payload_filter.must_not, payload, point_id, has_vector): return False if payload_filter.should is not None: - if not check_should(payload_filter.should, payload, point_id): + if not check_should(payload_filter.should, payload, point_id, has_vector): return False if payload_filter.min_should is not None: if not check_min_should( payload_filter.min_should.conditions, payload, point_id, + has_vector, payload_filter.min_should.min_count, ): return False @@ -275,12 +302,18 @@ def calculate_payload_mask( payloads: list[dict], payload_filter: Optional[models.Filter], ids_inv: list[models.ExtendedPointId], + deleted_per_vector: Dict[str, np.ndarray], ) -> np.ndarray: if payload_filter is None: return np.ones(len(payloads), dtype=bool) mask = np.zeros(len(payloads), dtype=bool) for i, payload in enumerate(payloads): - if check_filter(payload_filter, payload, ids_inv[i]): + has_vector = {} + for vector_name, deleted in deleted_per_vector.items(): + if not deleted[i]: + has_vector[vector_name] = True + + if check_filter(payload_filter, payload, ids_inv[i], has_vector): mask[i] = True return mask diff --git a/qdrant_client/local/tests/test_payload_filters.py b/qdrant_client/local/tests/test_payload_filters.py index 7a7d9abf6..baf0c7a0b 100644 --- a/qdrant_client/local/tests/test_payload_filters.py +++ b/qdrant_client/local/tests/test_payload_filters.py @@ -62,7 +62,7 @@ def test_nested_payload_filters(): } ) - res = check_filter(query, payload, 0) + res = check_filter(query, payload, 0, has_vector={}) assert res is False query = models.Filter( @@ -87,7 +87,7 @@ def test_nested_payload_filters(): } ) - res = check_filter(query, payload, 0) + res = check_filter(query, payload, 0, has_vector={}) assert res is True query = models.Filter( @@ -113,7 +113,7 @@ def test_nested_payload_filters(): } ) - res = check_filter(query, payload, 0) + res = check_filter(query, payload, 0, has_vector={}) assert res is False query = models.Filter( @@ -138,7 +138,7 @@ def test_nested_payload_filters(): } ) - res = check_filter(query, payload, 0) + res = check_filter(query, payload, 0, has_vector={}) assert res is False @@ -173,7 +173,7 @@ def test_geo_polygon_filter_query(): } ) - res = check_filter(query, payload, 0) + res = check_filter(query, payload, 0, has_vector={}) assert res is True payload = { @@ -185,5 +185,5 @@ def test_geo_polygon_filter_query(): ] } - res = check_filter(query, payload, 0) + res = check_filter(query, payload, 0, has_vector={}) assert res is False diff --git a/qdrant_client/proto/collections.proto b/qdrant_client/proto/collections.proto index 474735f62..71afa870f 100644 --- a/qdrant_client/proto/collections.proto +++ b/qdrant_client/proto/collections.proto @@ -145,6 +145,17 @@ enum CompressionRatio { x64 = 4; } +message MaxOptimizationThreads { + enum Setting { + Auto = 0; + } + + oneof variant { + uint64 value = 1; + Setting setting = 2; + } +} + message OptimizerStatus { bool ok = 1; string error = 2; @@ -237,7 +248,7 @@ message OptimizersConfigDiff { optional uint64 max_segment_size = 4; /* Maximum size (in kilobytes) of vectors to store in-memory per segment. - Segments larger than this threshold will be stored as read-only memmaped file. + Segments larger than this threshold will be stored as read-only memmapped file. Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value. @@ -260,13 +271,17 @@ message OptimizersConfigDiff { Interval between forced flushes. */ optional uint64 flush_interval_sec = 7; + + // Deprecated in favor of `max_optimization_threads` + optional uint64 deprecated_max_optimization_threads = 8; + /* Max number of threads (jobs) for running optimizations per shard. Note: each optimization job will also use `max_indexing_threads` threads by itself for index building. - If null - have no limit and choose dynamically to saturate CPU. + If "auto" - have no limit and choose dynamically to saturate CPU. If 0 - no optimization threads, optimizations will be disabled. */ - optional uint64 max_optimization_threads = 8; + optional MaxOptimizationThreads max_optimization_threads = 9; } message ScalarQuantization { @@ -320,6 +335,11 @@ message StrictModeConfig { optional uint32 search_max_hnsw_ef = 6; optional bool search_allow_exact = 7; optional float search_max_oversampling = 8; + optional uint64 upsert_max_batchsize = 9; + optional uint64 max_collection_vector_size_bytes = 10; + optional uint32 read_rate_limit = 11; // Max number of read operations per minute per replica + optional uint32 write_rate_limit = 12; // Max number of write operations per minute per replica + optional uint64 max_collection_payload_size_bytes = 13; } message CreateCollection { @@ -351,6 +371,7 @@ message UpdateCollection { optional VectorsConfigDiff vectors_config = 6; // New vector parameters optional QuantizationConfigDiff quantization_config = 7; // Quantization configuration of vector optional SparseVectorConfig sparse_vectors_config = 8; // New sparse vector parameters + optional StrictModeConfig strict_mode_config = 9; // New strict mode configuration } message DeleteCollection { @@ -430,6 +451,7 @@ message TextIndexParams { } message BoolIndexParams { + optional bool on_disk = 1; // If true - store index on disk. } message DatetimeIndexParams { @@ -530,7 +552,8 @@ enum ReplicaState { Listener = 4; // A shard which receives data, but is not used for search; Useful for backup shards PartialSnapshot = 5; // Deprecated: snapshot shard transfer is in progress; Updates should not be sent to (and are ignored by) the shard Recovery = 6; // Shard is undergoing recovered by an external node; Normally rejects updates, accepts updates if force is true - Resharding = 7; // Points are being migrated to this shard as part of resharding + Resharding = 7; // Points are being migrated to this shard as part of scale-up resharding + ReshardingScaleDown = 8; // Points are being migrated to this shard as part of scale-down resharding } message ShardKey { diff --git a/qdrant_client/proto/points.proto b/qdrant_client/proto/points.proto index baca3150d..6da4eeaf1 100644 --- a/qdrant_client/proto/points.proto +++ b/qdrant_client/proto/points.proto @@ -817,21 +817,25 @@ message GroupsResult { message SearchResponse { repeated ScoredPoint result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message QueryResponse { repeated ScoredPoint result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message QueryBatchResponse { repeated BatchResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message QueryGroupsResponse { GroupsResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message BatchResult { @@ -841,16 +845,19 @@ message BatchResult { message SearchBatchResponse { repeated BatchResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message SearchGroupsResponse { GroupsResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message CountResponse { CountResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message ScrollResponse { @@ -880,26 +887,31 @@ message GetResponse { message RecommendResponse { repeated ScoredPoint result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message RecommendBatchResponse { repeated BatchResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message DiscoverResponse { repeated ScoredPoint result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message DiscoverBatchResponse { repeated BatchResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message RecommendGroupsResponse { GroupsResult result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message UpdateBatchResponse { @@ -915,11 +927,13 @@ message FacetResponse { message SearchMatrixPairsResponse { SearchMatrixPairs result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } message SearchMatrixOffsetsResponse { SearchMatrixOffsets result = 1; double time = 2; // Time spent to process + optional HardwareUsage usage = 3; } // --------------------------------------------- @@ -946,6 +960,7 @@ message Condition { Filter filter = 4; IsNullCondition is_null = 5; NestedCondition nested = 6; + HasVectorCondition has_vector = 7; } } @@ -961,6 +976,10 @@ message HasIdCondition { repeated PointId has_id = 1; } +message HasVectorCondition { + string has_vector = 1; +} + message NestedCondition { string key = 1; // Path to nested object Filter filter = 2; // Filter condition @@ -1072,3 +1091,11 @@ message GeoPoint { double lon = 1; double lat = 2; } + +// --------------------------------------------- +// ------------ Hardware measurements ---------- +// --------------------------------------------- + +message HardwareUsage { + uint64 cpu = 1; +} diff --git a/qdrant_client/qdrant_client.py b/qdrant_client/qdrant_client.py index 7ea647646..e6f2ad2c7 100644 --- a/qdrant_client/qdrant_client.py +++ b/qdrant_client/qdrant_client.py @@ -2174,6 +2174,7 @@ def update_collection( quantization_config: Optional[types.QuantizationConfigDiff] = None, timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: """Update parameters of the collection @@ -2189,6 +2190,7 @@ def update_collection( Wait for operation commit timeout in seconds. If timeout is reached - request will return with service error. sparse_vectors_config: Override for sparse vector-specific configuration + strict_mode_config: Override for strict mode configuration Returns: Operation result """ @@ -2211,6 +2213,7 @@ def update_collection( quantization_config=quantization_config, timeout=timeout, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, **kwargs, ) @@ -2250,6 +2253,7 @@ def create_collection( quantization_config: Optional[types.QuantizationConfig] = None, init_from: Optional[types.InitFrom] = None, timeout: Optional[int] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: """Create empty collection with given parameters @@ -2295,6 +2299,7 @@ def create_collection( timeout: Wait for operation commit timeout in seconds. If timeout is reached - request will return with service error. + strict_mode_config: Configure limitations for the collection, such as max size, rate limits, etc. Returns: Operation result @@ -2316,6 +2321,7 @@ def create_collection( init_from=init_from, timeout=timeout, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, **kwargs, ) @@ -2337,6 +2343,7 @@ def recreate_collection( quantization_config: Optional[types.QuantizationConfig] = None, init_from: Optional[types.InitFrom] = None, timeout: Optional[int] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: """Delete and create empty collection with given parameters @@ -2382,6 +2389,7 @@ def recreate_collection( timeout: Wait for operation commit timeout in seconds. If timeout is reached - request will return with service error. + strict_mode_config: Configure limitations for the collection, such as max size, rate limits, etc. Returns: Operation result @@ -2410,6 +2418,7 @@ def recreate_collection( init_from=init_from, timeout=timeout, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, **kwargs, ) diff --git a/qdrant_client/qdrant_remote.py b/qdrant_client/qdrant_remote.py index 3c3c151ad..a7de1888a 100644 --- a/qdrant_client/qdrant_remote.py +++ b/qdrant_client/qdrant_remote.py @@ -274,7 +274,6 @@ def _init_grpc_root_client(self) -> None: self._init_grpc_channel() self._grpc_root_client = grpc.QdrantStub(self._grpc_channel) - @property def grpc_collections(self) -> grpc.CollectionsStub: """gRPC client for collections methods @@ -2579,6 +2578,7 @@ def update_collection( quantization_config: Optional[types.QuantizationConfigDiff] = None, timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: if self._prefer_grpc: @@ -2604,6 +2604,9 @@ def update_collection( sparse_vectors_config ) + if isinstance(strict_mode_config, models.StrictModeConfig): + strict_mode_config = RestToGrpc.convert_strict_mode_config(strict_mode_config) + return self.grpc_collections.Update( grpc.UpdateCollection( collection_name=collection_name, @@ -2613,6 +2616,7 @@ def update_collection( hnsw_config=hnsw_config, quantization_config=quantization_config, sparse_vectors_config=sparse_vectors_config, + strict_mode_config=strict_mode_config, timeout=timeout, ), timeout=timeout if timeout is not None else self._timeout, @@ -2642,6 +2646,7 @@ def update_collection( hnsw_config=hnsw_config, quantization_config=quantization_config, sparse_vectors=sparse_vectors_config, + strict_mode_config=strict_mode_config, ), timeout=timeout, ).result @@ -2679,6 +2684,7 @@ def create_collection( timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, sharding_method: Optional[types.ShardingMethod] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: if init_from is not None: @@ -2714,6 +2720,9 @@ def create_collection( if isinstance(sharding_method, models.ShardingMethod): sharding_method = RestToGrpc.convert_sharding_method(sharding_method) + if isinstance(strict_mode_config, models.StrictModeConfig): + strict_mode_config = RestToGrpc.convert_strict_mode_config(strict_mode_config) + create_collection = grpc.CreateCollection( collection_name=collection_name, hnsw_config=hnsw_config, @@ -2729,6 +2738,7 @@ def create_collection( quantization_config=quantization_config, sparse_vectors_config=sparse_vectors_config, sharding_method=sharding_method, + strict_mode_config=strict_mode_config, ) return self.grpc_collections.Create(create_collection, timeout=self._timeout).result @@ -2760,6 +2770,7 @@ def create_collection( init_from=init_from, sparse_vectors=sparse_vectors_config, sharding_method=sharding_method, + strict_mode_config=strict_mode_config, ) result: Optional[bool] = self.http.collections_api.create_collection( @@ -2787,6 +2798,7 @@ def recreate_collection( timeout: Optional[int] = None, sparse_vectors_config: Optional[Mapping[str, types.SparseVectorParams]] = None, sharding_method: Optional[types.ShardingMethod] = None, + strict_mode_config: Optional[types.StrictModeConfig] = None, **kwargs: Any, ) -> bool: self.delete_collection(collection_name, timeout=timeout) @@ -2806,6 +2818,7 @@ def recreate_collection( timeout=timeout, sparse_vectors_config=sparse_vectors_config, sharding_method=sharding_method, + strict_mode_config=strict_mode_config, ) @property diff --git a/tests/congruence_tests/test_has_vector.py b/tests/congruence_tests/test_has_vector.py new file mode 100644 index 000000000..523e7bc2b --- /dev/null +++ b/tests/congruence_tests/test_has_vector.py @@ -0,0 +1,85 @@ +from qdrant_client import models + +from tests.congruence_tests.test_common import ( + COLLECTION_NAME, + compare_client_results, + generate_fixtures, + generate_sparse_fixtures, + init_local, + init_client, + init_remote, + sparse_vectors_config, + generate_multivector_fixtures, + multi_vector_config, +) + + +def test_has_vector(local_client, remote_client): + points = generate_fixtures(100, skip_vectors=True) + + local_client.upload_points(COLLECTION_NAME, points) + remote_client.upload_points(COLLECTION_NAME, points, wait=True) + + local_client.upload_points(COLLECTION_NAME, points) + remote_client.upload_points(COLLECTION_NAME, points, wait=True) + + compare_client_results( + local_client, + remote_client, + lambda c: c.scroll( + COLLECTION_NAME, + limit=50, + scroll_filter=models.Filter(must=[models.HasVectorCondition(has_vector="image")]), + )[0], + ) + + +def test_has_vector_sparse(): + points = generate_sparse_fixtures(100, skip_vectors=True) + + local_client = init_local() + init_client(local_client, [], sparse_vectors_config=sparse_vectors_config) + + remote_client = init_remote() + init_client(remote_client, [], sparse_vectors_config=sparse_vectors_config) + + local_client.upload_points(COLLECTION_NAME, points) + remote_client.upload_points(COLLECTION_NAME, points, wait=True) + + compare_client_results( + local_client, + remote_client, + lambda c: c.scroll( + COLLECTION_NAME, + limit=50, + scroll_filter=models.Filter( + must=[models.HasVectorCondition(has_vector="sparse-image")] + ), + )[0], + ) + + +def test_has_vector_multi(): + points = generate_multivector_fixtures(100, skip_vectors=True) + + local_client = init_local() + init_client(local_client, [], vectors_config=multi_vector_config) + + remote_client = init_remote() + init_client(remote_client, [], vectors_config=multi_vector_config) + + local_client.upload_points(COLLECTION_NAME, points) + remote_client.upload_points(COLLECTION_NAME, points, wait=True) + + local_client.upload_points(COLLECTION_NAME, points) + remote_client.upload_points(COLLECTION_NAME, points, wait=True) + + compare_client_results( + local_client, + remote_client, + lambda c: c.scroll( + COLLECTION_NAME, + limit=50, + scroll_filter=models.Filter(must=[models.HasVectorCondition(has_vector="multi-code")]), + )[0], + ) diff --git a/tests/conversions/fixtures.py b/tests/conversions/fixtures.py index 2221ed4e4..ad3a703c7 100644 --- a/tests/conversions/fixtures.py +++ b/tests/conversions/fixtures.py @@ -11,13 +11,14 @@ point_id_1 = grpc.PointId(num=2) point_id_2 = grpc.PointId(uuid="f9bcf279-5e66-40f7-856b-3a9d9b6617ee") -has_id_condition = grpc.HasIdCondition( +has_id = grpc.HasIdCondition( has_id=[ point_id, point_id_1, point_id_2, ] ) +has_vector = grpc.HasVectorCondition(has_vector="vector") is_empty = grpc.IsEmptyCondition(key="my.field") is_null = grpc.IsNullCondition(key="my.field") @@ -88,7 +89,8 @@ field_condition_values_count = grpc.FieldCondition(key="match_field", values_count=values_count) -condition_has_id = grpc.Condition(has_id=has_id_condition) +condition_has_id = grpc.Condition(has_id=has_id) +condition_has_vector = grpc.Condition(has_vector=has_vector) condition_is_empty = grpc.Condition(is_empty=is_empty) condition_is_null = grpc.Condition(is_null=is_null) @@ -115,6 +117,7 @@ filter_ = grpc.Filter( must=[ condition_has_id, + condition_has_vector, condition_is_empty, condition_is_null, condition_keywords, @@ -132,6 +135,7 @@ min_should=grpc.MinShould( conditions=[ condition_has_id, + condition_has_vector, condition_is_empty, condition_except_keywords, condition_except_integers, @@ -253,7 +257,8 @@ memmap_threshold=50000, indexing_threshold=10000, flush_interval_sec=10, - max_optimization_threads=0, + max_optimization_threads=grpc.MaxOptimizationThreads(value=0), + deprecated_max_optimization_threads=0, ) optimizer_config_half = grpc.OptimizersConfigDiff( @@ -261,15 +266,34 @@ vacuum_min_vector_number=10000, default_segment_number=5, max_segment_size=200000, + max_optimization_threads=grpc.MaxOptimizationThreads( + setting=grpc.MaxOptimizationThreads.Setting.Auto + ), ) wal_config = grpc.WalConfigDiff(wal_capacity_mb=32, wal_segments_ahead=2) +strict_mode_config = grpc.StrictModeConfig( + enabled=True, + max_query_limit=100, + max_timeout=10, + unindexed_filtering_retrieve=False, + unindexed_filtering_update=False, + search_max_hnsw_ef=256, + search_allow_exact=False, + search_max_oversampling=10, + upsert_max_batchsize=64, + max_collection_vector_size_bytes=1024 * 1024 * 1024, + # read_rate_limit=model.read_rate_limit, test empty field + write_rate_limit=2000, + max_collection_payload_size_bytes=10 * 1024 * 1024 * 1024, +) collection_config = grpc.CollectionConfig( params=collection_params, hnsw_config=hnsw_config, optimizer_config=optimizer_config, wal_config=wal_config, + strict_mode_config=strict_mode_config, ) payload_value = { @@ -444,6 +468,7 @@ float_index_params_1 = grpc.FloatIndexParams(on_disk=True, is_principal=True) bool_index_params = grpc.BoolIndexParams() +bool_index_params_1 = grpc.BoolIndexParams(on_disk=True) geo_index_params_0 = grpc.GeoIndexParams() geo_index_params_1 = grpc.GeoIndexParams(on_disk=True) @@ -518,6 +543,12 @@ points=0, ) +payload_schema_bool_w_params_on_disk = grpc.PayloadSchemaInfo( + data_type=grpc.PayloadSchemaType.Bool, + params=grpc.PayloadIndexParams(bool_index_params=bool_index_params_1), + points=0, +) + payload_schema_geo_w_params_no_disk = grpc.PayloadSchemaInfo( data_type=grpc.PayloadSchemaType.Geo, params=grpc.PayloadIndexParams(geo_index_params=geo_index_params_0), @@ -588,6 +619,7 @@ "float_no_disk_not_principal": payload_schema_float_no_disk_not_principal, "float_on_disk_is_principal": payload_schema_float_on_disk_is_principal, "bool_w_params": payload_schema_bool_w_params, + "bool_w_params_on_disk": payload_schema_bool_w_params_on_disk, "geo_w_params_no_disk": payload_schema_geo_w_params_no_disk, "geo_w_params_on_disk": payload_schema_geo_w_params_on_disk, "datetime_no_disk_not_principal": payload_schema_datetime_no_disk_not_principal, @@ -1363,7 +1395,7 @@ "CreateAlias": [create_alias], "GeoBoundingBox": [geo_bounding_box], "SearchParams": [search_params, search_params_2, search_params_3], - "HasIdCondition": [has_id_condition], + "HasIdCondition": [has_id], "RenameAlias": [rename_alias], "ValuesCount": [values_count], "Filter": [filter_nested, filter_], @@ -1511,6 +1543,7 @@ "HealthCheckReply": [health_check_reply], "SearchMatrixPairs": [search_matrix_pairs], "SearchMatrixOffsets": [search_matrix_offsets], + "StrictModeConfig": [strict_mode_config], }