diff --git a/qdrant_client/conversions/conversion.py b/qdrant_client/conversions/conversion.py index 05cfeaa1..f7fc112b 100644 --- a/qdrant_client/conversions/conversion.py +++ b/qdrant_client/conversions/conversion.py @@ -388,6 +388,7 @@ def convert_search_params(cls, model: grpc.SearchParams) -> rest.SearchParams: quantization=cls.convert_quantization_search_params(model.quantization) if model.HasField("quantization") else None, + indexed_only=model.indexed_only if model.HasField("indexed_only") else None, ) @classmethod @@ -854,6 +855,14 @@ def convert_product_quantization_config( always_ram=model.always_ram if model.HasField("always_ram") else None, ) + @classmethod + def convert_binary_quantization_config( + cls, model: grpc.BinaryQuantization + ) -> rest.BinaryQuantizationConfig: + return rest.BinaryQuantizationConfig( + always_ram=model.always_ram if model.HasField("always_ram") else None, + ) + @classmethod def convert_compression_ratio(cls, model: grpc.CompressionRatio) -> rest.CompressionRatio: if model == grpc.x4: @@ -878,6 +887,8 @@ def convert_quantization_config( return rest.ScalarQuantization(scalar=cls.convert_scalar_quantization_config(val)) if name == "product": return rest.ProductQuantization(product=cls.convert_product_quantization_config(val)) + if name == "binary": + return rest.BinaryQuantization(binary=cls.convert_binary_quantization_config(val)) raise ValueError(f"invalid QuantizationConfig model: {model}") # pragma: no cover @classmethod @@ -939,6 +950,8 @@ def convert_quantization_config_diff( return rest.ScalarQuantization(scalar=cls.convert_scalar_quantization_config(val)) if name == "product": return rest.ProductQuantization(product=cls.convert_product_quantization_config(val)) + if name == "binary": + return rest.BinaryQuantization(binary=cls.convert_binary_quantization_config(val)) if name == "disabled": return rest.Disabled.DISABLED raise ValueError(f"invalid QuantizationConfigDiff model: {model}") # pragma: no cover @@ -1142,6 +1155,7 @@ def convert_search_params(cls, model: rest.SearchParams) -> grpc.SearchParams: quantization=cls.convert_quantization_search_params(model.quantization) if model.quantization is not None else None, + indexed_only=model.indexed_only, ) @classmethod @@ -1733,6 +1747,14 @@ def convert_product_quantization_config( always_ram=model.always_ram, ) + @classmethod + def convert_binary_quantization_config( + cls, model: rest.BinaryQuantizationConfig + ) -> grpc.BinaryQuantization: + return grpc.BinaryQuantization( + always_ram=model.always_ram, + ) + @classmethod def convert_compression_ratio(cls, model: rest.CompressionRatio) -> grpc.CompressionRatio: if model == rest.CompressionRatio.X4: @@ -1760,6 +1782,10 @@ def convert_quantization_config( return grpc.QuantizationConfig( product=cls.convert_product_quantization_config(model.product) ) + if isinstance(model, rest.BinaryQuantization): + return grpc.QuantizationConfig( + binary=cls.convert_binary_quantization_config(model.binary) + ) else: raise ValueError(f"invalid QuantizationConfig model: {model}") @@ -1836,6 +1862,10 @@ def convert_quantization_config_diff( return grpc.QuantizationConfigDiff( product=cls.convert_product_quantization_config(model.product) ) + if isinstance(model, rest.BinaryQuantization): + return grpc.QuantizationConfigDiff( + binary=cls.convert_binary_quantization_config(model.binary) + ) if model == rest.Disabled.DISABLED: return grpc.QuantizationConfigDiff( disabled=grpc.Disabled(), diff --git a/qdrant_client/grpc/collections_pb2.py b/qdrant_client/grpc/collections_pb2.py index 99f00353..429206b1 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\"\xfa\x01\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\x42\x0e\n\x0c_hnsw_configB\x16\n\x14_quantization_configB\n\n\x08_on_disk\"\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\"3\n\x18GetCollectionInfoRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"\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\"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\"\x82\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\x42\x0e\n\x0cquantization\"\n\n\x08\x44isabled\"\xac\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\x42\x0e\n\x0cquantization\"\xe1\x05\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\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_configJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"\xc6\x03\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\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_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\"\x90\x02\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\x42\x11\n\x0f_vectors_configB\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03\"\xc4\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\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x12\n\x10_on_disk_payload\"\xa2\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\x42\x16\n\x14_quantization_config\"\xbd\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\x42\x0c\n\n_lowercaseB\x10\n\x0e_min_token_lenB\x10\n\x0e_max_token_len\"Z\n\x12PayloadIndexParams\x12\x34\n\x11text_index_params\x18\x01 \x01(\x0b\x32\x17.qdrant.TextIndexParamsH\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\"\xba\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\x15\n\rvectors_count\x18\x03 \x01(\x04\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\x14\n\x0cpoints_count\x18\t \x01(\x04\x12\"\n\x15indexed_vectors_count\x18\n \x01(\x04H\x00\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\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\"]\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\"Y\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\"M\n\x11ShardTransferInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\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\"\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\"G\n\tMoveShard\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\",\n\x07Replica\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\"\x9a\x02\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,\n\x0freplicate_shard\x18\x03 \x01(\x0b\x32\x11.qdrant.MoveShardH\x00\x12+\n\x0e\x61\x62ort_transfer\x18\x04 \x01(\x0b\x32\x11.qdrant.MoveShardH\x00\x12\'\n\x0c\x64rop_replica\x18\x05 \x01(\x0b\x32\x0f.qdrant.ReplicaH\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\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*O\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*f\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*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*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*Q\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\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x63ollections.proto\x12\x06qdrant\"\xfa\x01\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\x42\x0e\n\x0c_hnsw_configB\x16\n\x14_quantization_configB\n\n\x08_on_disk\"\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\"3\n\x18GetCollectionInfoRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\"\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\"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\"\xe1\x05\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\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_configJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"\xc6\x03\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\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_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\"\x90\x02\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\x42\x11\n\x0f_vectors_configB\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03\"\xc4\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\x42\x15\n\x13_replication_factorB\x1b\n\x19_write_consistency_factorB\x12\n\x10_on_disk_payload\"\xa2\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\x42\x16\n\x14_quantization_config\"\xbd\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\x42\x0c\n\n_lowercaseB\x10\n\x0e_min_token_lenB\x10\n\x0e_max_token_len\"Z\n\x12PayloadIndexParams\x12\x34\n\x11text_index_params\x18\x01 \x01(\x0b\x32\x17.qdrant.TextIndexParamsH\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\"\xba\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\x15\n\rvectors_count\x18\x03 \x01(\x04\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\x14\n\x0cpoints_count\x18\t \x01(\x04\x12\"\n\x15indexed_vectors_count\x18\n \x01(\x04H\x00\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\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\"]\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\"Y\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\"M\n\x11ShardTransferInfo\x12\x10\n\x08shard_id\x18\x01 \x01(\r\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\"\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\"G\n\tMoveShard\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x14\n\x0c\x66rom_peer_id\x18\x02 \x01(\x04\x12\x12\n\nto_peer_id\x18\x03 \x01(\x04\",\n\x07Replica\x12\x10\n\x08shard_id\x18\x01 \x01(\r\x12\x0f\n\x07peer_id\x18\x02 \x01(\x04\"\x9a\x02\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,\n\x0freplicate_shard\x18\x03 \x01(\x0b\x32\x11.qdrant.MoveShardH\x00\x12+\n\x0e\x61\x62ort_transfer\x18\x04 \x01(\x0b\x32\x11.qdrant.MoveShardH\x00\x12\'\n\x0c\x64rop_replica\x18\x05 \x01(\x0b\x32\x0f.qdrant.ReplicaH\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\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*O\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*f\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*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*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*Q\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\x62\x06proto3') _DISTANCE = DESCRIPTOR.enum_types_by_name['Distance'] Distance = enum_type_wrapper.EnumTypeWrapper(_DISTANCE) @@ -84,6 +84,7 @@ _OPTIMIZERSCONFIGDIFF = DESCRIPTOR.message_types_by_name['OptimizersConfigDiff'] _SCALARQUANTIZATION = DESCRIPTOR.message_types_by_name['ScalarQuantization'] _PRODUCTQUANTIZATION = DESCRIPTOR.message_types_by_name['ProductQuantization'] +_BINARYQUANTIZATION = DESCRIPTOR.message_types_by_name['BinaryQuantization'] _QUANTIZATIONCONFIG = DESCRIPTOR.message_types_by_name['QuantizationConfig'] _DISABLED = DESCRIPTOR.message_types_by_name['Disabled'] _QUANTIZATIONCONFIGDIFF = DESCRIPTOR.message_types_by_name['QuantizationConfigDiff'] @@ -252,6 +253,13 @@ }) _sym_db.RegisterMessage(ProductQuantization) +BinaryQuantization = _reflection.GeneratedProtocolMessageType('BinaryQuantization', (_message.Message,), { + 'DESCRIPTOR' : _BINARYQUANTIZATION, + '__module__' : 'collections_pb2' + # @@protoc_insertion_point(class_scope:qdrant.BinaryQuantization) + }) +_sym_db.RegisterMessage(BinaryQuantization) + QuantizationConfig = _reflection.GeneratedProtocolMessageType('QuantizationConfig', (_message.Message,), { 'DESCRIPTOR' : _QUANTIZATIONCONFIG, '__module__' : 'collections_pb2' @@ -493,20 +501,20 @@ _VECTORPARAMSDIFFMAP_MAPENTRY._serialized_options = b'8\001' _COLLECTIONINFO_PAYLOADSCHEMAENTRY._options = None _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_options = b'8\001' - _DISTANCE._serialized_start=7446 - _DISTANCE._serialized_end=7510 - _COLLECTIONSTATUS._serialized_start=7512 - _COLLECTIONSTATUS._serialized_end=7591 - _PAYLOADSCHEMATYPE._serialized_start=7593 - _PAYLOADSCHEMATYPE._serialized_end=7695 - _QUANTIZATIONTYPE._serialized_start=7697 - _QUANTIZATIONTYPE._serialized_end=7750 - _COMPRESSIONRATIO._serialized_start=7752 - _COMPRESSIONRATIO._serialized_end=7813 - _TOKENIZERTYPE._serialized_start=7815 - _TOKENIZERTYPE._serialized_end=7899 - _REPLICASTATE._serialized_start=7901 - _REPLICASTATE._serialized_end=7982 + _DISTANCE._serialized_start=7600 + _DISTANCE._serialized_end=7664 + _COLLECTIONSTATUS._serialized_start=7666 + _COLLECTIONSTATUS._serialized_end=7745 + _PAYLOADSCHEMATYPE._serialized_start=7747 + _PAYLOADSCHEMATYPE._serialized_end=7849 + _QUANTIZATIONTYPE._serialized_start=7851 + _QUANTIZATIONTYPE._serialized_end=7904 + _COMPRESSIONRATIO._serialized_start=7906 + _COMPRESSIONRATIO._serialized_end=7967 + _TOKENIZERTYPE._serialized_start=7969 + _TOKENIZERTYPE._serialized_end=8053 + _REPLICASTATE._serialized_start=8055 + _REPLICASTATE._serialized_end=8136 _VECTORPARAMS._serialized_start=30 _VECTORPARAMS._serialized_end=280 _VECTORPARAMSDIFF._serialized_start=283 @@ -545,70 +553,72 @@ _SCALARQUANTIZATION._serialized_end=2381 _PRODUCTQUANTIZATION._serialized_start=2383 _PRODUCTQUANTIZATION._serialized_end=2491 - _QUANTIZATIONCONFIG._serialized_start=2494 - _QUANTIZATIONCONFIG._serialized_end=2624 - _DISABLED._serialized_start=2626 - _DISABLED._serialized_end=2636 - _QUANTIZATIONCONFIGDIFF._serialized_start=2639 - _QUANTIZATIONCONFIGDIFF._serialized_end=2811 - _CREATECOLLECTION._serialized_start=2814 - _CREATECOLLECTION._serialized_end=3551 - _UPDATECOLLECTION._serialized_start=3554 - _UPDATECOLLECTION._serialized_end=4008 - _DELETECOLLECTION._serialized_start=4010 - _DELETECOLLECTION._serialized_end=4087 - _COLLECTIONOPERATIONRESPONSE._serialized_start=4089 - _COLLECTIONOPERATIONRESPONSE._serialized_end=4148 - _COLLECTIONPARAMS._serialized_start=4151 - _COLLECTIONPARAMS._serialized_end=4423 - _COLLECTIONPARAMSDIFF._serialized_start=4426 - _COLLECTIONPARAMSDIFF._serialized_end=4622 - _COLLECTIONCONFIG._serialized_start=4625 - _COLLECTIONCONFIG._serialized_end=4915 - _TEXTINDEXPARAMS._serialized_start=4918 - _TEXTINDEXPARAMS._serialized_end=5107 - _PAYLOADINDEXPARAMS._serialized_start=5109 - _PAYLOADINDEXPARAMS._serialized_end=5199 - _PAYLOADSCHEMAINFO._serialized_start=5202 - _PAYLOADSCHEMAINFO._serialized_end=5359 - _COLLECTIONINFO._serialized_start=5362 - _COLLECTIONINFO._serialized_end=5804 - _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_start=5687 - _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_end=5766 - _CHANGEALIASES._serialized_start=5806 - _CHANGEALIASES._serialized_end=5897 - _ALIASOPERATIONS._serialized_start=5900 - _ALIASOPERATIONS._serialized_end=6062 - _CREATEALIAS._serialized_start=6064 - _CREATEALIAS._serialized_end=6122 - _RENAMEALIAS._serialized_start=6124 - _RENAMEALIAS._serialized_end=6185 - _DELETEALIAS._serialized_start=6187 - _DELETEALIAS._serialized_end=6220 - _LISTALIASESREQUEST._serialized_start=6222 - _LISTALIASESREQUEST._serialized_end=6242 - _LISTCOLLECTIONALIASESREQUEST._serialized_start=6244 - _LISTCOLLECTIONALIASESREQUEST._serialized_end=6299 - _ALIASDESCRIPTION._serialized_start=6301 - _ALIASDESCRIPTION._serialized_end=6364 - _LISTALIASESRESPONSE._serialized_start=6366 - _LISTALIASESRESPONSE._serialized_end=6444 - _COLLECTIONCLUSTERINFOREQUEST._serialized_start=6446 - _COLLECTIONCLUSTERINFOREQUEST._serialized_end=6501 - _LOCALSHARDINFO._serialized_start=6503 - _LOCALSHARDINFO._serialized_end=6596 - _REMOTESHARDINFO._serialized_start=6598 - _REMOTESHARDINFO._serialized_end=6687 - _SHARDTRANSFERINFO._serialized_start=6689 - _SHARDTRANSFERINFO._serialized_end=6766 - _COLLECTIONCLUSTERINFORESPONSE._serialized_start=6769 - _COLLECTIONCLUSTERINFORESPONSE._serialized_end=6984 - _MOVESHARD._serialized_start=6986 - _MOVESHARD._serialized_end=7057 - _REPLICA._serialized_start=7059 - _REPLICA._serialized_end=7103 - _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_start=7106 - _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_end=7388 - _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_start=7390 - _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_end=7444 + _BINARYQUANTIZATION._serialized_start=2493 + _BINARYQUANTIZATION._serialized_end=2553 + _QUANTIZATIONCONFIG._serialized_start=2556 + _QUANTIZATIONCONFIG._serialized_end=2732 + _DISABLED._serialized_start=2734 + _DISABLED._serialized_end=2744 + _QUANTIZATIONCONFIGDIFF._serialized_start=2747 + _QUANTIZATIONCONFIGDIFF._serialized_end=2965 + _CREATECOLLECTION._serialized_start=2968 + _CREATECOLLECTION._serialized_end=3705 + _UPDATECOLLECTION._serialized_start=3708 + _UPDATECOLLECTION._serialized_end=4162 + _DELETECOLLECTION._serialized_start=4164 + _DELETECOLLECTION._serialized_end=4241 + _COLLECTIONOPERATIONRESPONSE._serialized_start=4243 + _COLLECTIONOPERATIONRESPONSE._serialized_end=4302 + _COLLECTIONPARAMS._serialized_start=4305 + _COLLECTIONPARAMS._serialized_end=4577 + _COLLECTIONPARAMSDIFF._serialized_start=4580 + _COLLECTIONPARAMSDIFF._serialized_end=4776 + _COLLECTIONCONFIG._serialized_start=4779 + _COLLECTIONCONFIG._serialized_end=5069 + _TEXTINDEXPARAMS._serialized_start=5072 + _TEXTINDEXPARAMS._serialized_end=5261 + _PAYLOADINDEXPARAMS._serialized_start=5263 + _PAYLOADINDEXPARAMS._serialized_end=5353 + _PAYLOADSCHEMAINFO._serialized_start=5356 + _PAYLOADSCHEMAINFO._serialized_end=5513 + _COLLECTIONINFO._serialized_start=5516 + _COLLECTIONINFO._serialized_end=5958 + _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_start=5841 + _COLLECTIONINFO_PAYLOADSCHEMAENTRY._serialized_end=5920 + _CHANGEALIASES._serialized_start=5960 + _CHANGEALIASES._serialized_end=6051 + _ALIASOPERATIONS._serialized_start=6054 + _ALIASOPERATIONS._serialized_end=6216 + _CREATEALIAS._serialized_start=6218 + _CREATEALIAS._serialized_end=6276 + _RENAMEALIAS._serialized_start=6278 + _RENAMEALIAS._serialized_end=6339 + _DELETEALIAS._serialized_start=6341 + _DELETEALIAS._serialized_end=6374 + _LISTALIASESREQUEST._serialized_start=6376 + _LISTALIASESREQUEST._serialized_end=6396 + _LISTCOLLECTIONALIASESREQUEST._serialized_start=6398 + _LISTCOLLECTIONALIASESREQUEST._serialized_end=6453 + _ALIASDESCRIPTION._serialized_start=6455 + _ALIASDESCRIPTION._serialized_end=6518 + _LISTALIASESRESPONSE._serialized_start=6520 + _LISTALIASESRESPONSE._serialized_end=6598 + _COLLECTIONCLUSTERINFOREQUEST._serialized_start=6600 + _COLLECTIONCLUSTERINFOREQUEST._serialized_end=6655 + _LOCALSHARDINFO._serialized_start=6657 + _LOCALSHARDINFO._serialized_end=6750 + _REMOTESHARDINFO._serialized_start=6752 + _REMOTESHARDINFO._serialized_end=6841 + _SHARDTRANSFERINFO._serialized_start=6843 + _SHARDTRANSFERINFO._serialized_end=6920 + _COLLECTIONCLUSTERINFORESPONSE._serialized_start=6923 + _COLLECTIONCLUSTERINFORESPONSE._serialized_end=7138 + _MOVESHARD._serialized_start=7140 + _MOVESHARD._serialized_end=7211 + _REPLICA._serialized_start=7213 + _REPLICA._serialized_end=7257 + _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_start=7260 + _UPDATECOLLECTIONCLUSTERSETUPREQUEST._serialized_end=7542 + _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_start=7544 + _UPDATECOLLECTIONCLUSTERSETUPRESPONSE._serialized_end=7598 # @@protoc_insertion_point(module_scope) diff --git a/qdrant_client/grpc/points_pb2.py b/qdrant_client/grpc/points_pb2.py index fbdd64b8..56d40c7f 100644 --- a/qdrant_client/grpc/points_pb2.py +++ b/qdrant_client/grpc/points_pb2.py @@ -17,7 +17,7 @@ from . import collections_pb2 as collections__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cpoints.proto\x12\x06qdrant\x1a\x13json_with_int.proto\x1a\x11\x63ollections.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\"\x16\n\x06Vector\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\"\xa3\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\xa6\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\x91\x02\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\x42\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyJ\x04\x08\x03\x10\x04\"\xaa\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"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\"\xdf\x01\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\xc9\x02\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\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_orderingJ\x04\x08\x04\x10\x05\"\xe3\x01\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\x42\x07\n\x05_waitB\x12\n\x10_points_selectorB\x0b\n\t_orderingJ\x04\x08\x04\x10\x05\"\xac\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\xaf\x02\n\x1a\x43reateFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12*\n\nfield_type\x18\x04 \x01(\x0e\x32\x11.qdrant.FieldTypeH\x01\x88\x01\x01\x12;\n\x12\x66ield_index_params\x18\x05 \x01(\x0b\x32\x1a.qdrant.PayloadIndexParamsH\x02\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x03\x88\x01\x01\x42\x07\n\x05_waitB\r\n\x0b_field_typeB\x15\n\x13_field_index_paramsB\x0b\n\t_ordering\"\xa0\x01\n\x1a\x44\x65leteFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_ordering\"(\n\x16PayloadIncludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"(\n\x16PayloadExcludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"\xa1\x01\n\x13WithPayloadSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12\x31\n\x07include\x18\x02 \x01(\x0b\x32\x1e.qdrant.PayloadIncludeSelectorH\x00\x12\x31\n\x07\x65xclude\x18\x03 \x01(\x0b\x32\x1e.qdrant.PayloadExcludeSelectorH\x00\x42\x12\n\x10selector_options\"\x82\x01\n\x0cNamedVectors\x12\x32\n\x07vectors\x18\x01 \x03(\x0b\x32!.qdrant.NamedVectors.VectorsEntry\x1a>\n\x0cVectorsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.qdrant.Vector:\x02\x38\x01\"g\n\x07Vectors\x12 \n\x06vector\x18\x01 \x01(\x0b\x32\x0e.qdrant.VectorH\x00\x12\'\n\x07vectors\x18\x02 \x01(\x0b\x32\x14.qdrant.NamedVectorsH\x00\x42\x11\n\x0fvectors_options\" \n\x0fVectorsSelector\x12\r\n\x05names\x18\x01 \x03(\t\"g\n\x13WithVectorsSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12*\n\x07include\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelectorH\x00\x42\x12\n\x10selector_options\"\x88\x01\n\x18QuantizationSearchParams\x12\x13\n\x06ignore\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07rescore\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x19\n\x0coversampling\x18\x03 \x01(\x01H\x02\x88\x01\x01\x42\t\n\x07_ignoreB\n\n\x08_rescoreB\x0f\n\r_oversampling\"\x9c\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\x42\n\n\x08_hnsw_efB\x08\n\x06_exactB\x0f\n\r_quantization\"\xd7\x03\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\x42\x12\n\x10_score_thresholdB\t\n\x07_offsetB\x0e\n\x0c_vector_nameB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyJ\x04\x08\x05\x10\x06\"\xa6\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\x42\x13\n\x11_read_consistency\"\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\"\x9a\x04\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\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_lookup\"\xe5\x02\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\x42\t\n\x07_offsetB\x08\n\x06_limitB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyJ\x04\x08\x05\x10\x06\"S\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\x42\x0e\n\x0c_vector_name\"\xc6\x04\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\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_consistencyJ\x04\x08\x06\x10\x07\"\xaf\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\x42\x13\n\x11_read_consistency\"\x89\x05\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\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_lookup\"d\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\x42\x08\n\x06_exact\"M\n\x17PointsOperationResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.UpdateResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"J\n\x0cUpdateResult\x12\x14\n\x0coperation_id\x18\x01 \x01(\x04\x12$\n\x06status\x18\x02 \x01(\x0e\x32\x14.qdrant.UpdateStatus\"\xf5\x01\n\x0bScoredPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x07payload\x18\x02 \x03(\x0b\x32 .qdrant.ScoredPoint.PayloadEntry\x12\r\n\x05score\x18\x03 \x01(\x02\x12\x0f\n\x07version\x18\x05 \x01(\x04\x12%\n\x07vectors\x18\x06 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\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\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\"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\"\xdb\x01\n\x0eRetrievedPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x34\n\x07payload\x18\x02 \x03(\x0b\x32#.qdrant.RetrievedPoint.PayloadEntry\x12%\n\x07vectors\x18\x04 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\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\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\"M\n\x17RecommendGroupsResponse\x12$\n\x06result\x18\x01 \x01(\x0b\x32\x14.qdrant.GroupsResult\x12\x0c\n\x04time\x18\x02 \x01(\x01\"q\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\"\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\"\xdd\x01\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\"\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\"\\\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\".\n\nGeoPolygon\x12 \n\x06points\x18\x01 \x03(\x0b\x32\x10.qdrant.GeoPoint\"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*\x83\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*H\n\x0cUpdateStatus\x12\x17\n\x13UnknownUpdateStatus\x10\x00\x12\x10\n\x0c\x41\x63knowledged\x10\x01\x12\r\n\tCompleted\x10\x02\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cpoints.proto\x12\x06qdrant\x1a\x13json_with_int.proto\x1a\x11\x63ollections.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\"\x16\n\x06Vector\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\"\xa3\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\xa6\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\x91\x02\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\x42\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyJ\x04\x08\x03\x10\x04\"\xaa\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"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\"\xdf\x01\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\xc9\x02\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\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_orderingJ\x04\x08\x04\x10\x05\"\xe3\x01\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\x42\x07\n\x05_waitB\x12\n\x10_points_selectorB\x0b\n\t_orderingJ\x04\x08\x04\x10\x05\"\xac\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\x42\x07\n\x05_waitB\x0b\n\t_ordering\"\xaf\x02\n\x1a\x43reateFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12*\n\nfield_type\x18\x04 \x01(\x0e\x32\x11.qdrant.FieldTypeH\x01\x88\x01\x01\x12;\n\x12\x66ield_index_params\x18\x05 \x01(\x0b\x32\x1a.qdrant.PayloadIndexParamsH\x02\x88\x01\x01\x12,\n\x08ordering\x18\x06 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x03\x88\x01\x01\x42\x07\n\x05_waitB\r\n\x0b_field_typeB\x15\n\x13_field_index_paramsB\x0b\n\t_ordering\"\xa0\x01\n\x1a\x44\x65leteFieldIndexCollection\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x11\n\x04wait\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\nfield_name\x18\x03 \x01(\t\x12,\n\x08ordering\x18\x04 \x01(\x0b\x32\x15.qdrant.WriteOrderingH\x01\x88\x01\x01\x42\x07\n\x05_waitB\x0b\n\t_ordering\"(\n\x16PayloadIncludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"(\n\x16PayloadExcludeSelector\x12\x0e\n\x06\x66ields\x18\x01 \x03(\t\"\xa1\x01\n\x13WithPayloadSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12\x31\n\x07include\x18\x02 \x01(\x0b\x32\x1e.qdrant.PayloadIncludeSelectorH\x00\x12\x31\n\x07\x65xclude\x18\x03 \x01(\x0b\x32\x1e.qdrant.PayloadExcludeSelectorH\x00\x42\x12\n\x10selector_options\"\x82\x01\n\x0cNamedVectors\x12\x32\n\x07vectors\x18\x01 \x03(\x0b\x32!.qdrant.NamedVectors.VectorsEntry\x1a>\n\x0cVectorsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.qdrant.Vector:\x02\x38\x01\"g\n\x07Vectors\x12 \n\x06vector\x18\x01 \x01(\x0b\x32\x0e.qdrant.VectorH\x00\x12\'\n\x07vectors\x18\x02 \x01(\x0b\x32\x14.qdrant.NamedVectorsH\x00\x42\x11\n\x0fvectors_options\" \n\x0fVectorsSelector\x12\r\n\x05names\x18\x01 \x03(\t\"g\n\x13WithVectorsSelector\x12\x10\n\x06\x65nable\x18\x01 \x01(\x08H\x00\x12*\n\x07include\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelectorH\x00\x42\x12\n\x10selector_options\"\x88\x01\n\x18QuantizationSearchParams\x12\x13\n\x06ignore\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07rescore\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x19\n\x0coversampling\x18\x03 \x01(\x01H\x02\x88\x01\x01\x42\t\n\x07_ignoreB\n\n\x08_rescoreB\x0f\n\r_oversampling\"\xc8\x01\n\x0cSearchParams\x12\x14\n\x07hnsw_ef\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\x05\x65xact\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12;\n\x0cquantization\x18\x03 \x01(\x0b\x32 .qdrant.QuantizationSearchParamsH\x02\x88\x01\x01\x12\x19\n\x0cindexed_only\x18\x04 \x01(\x08H\x03\x88\x01\x01\x42\n\n\x08_hnsw_efB\x08\n\x06_exactB\x0f\n\r_quantizationB\x0f\n\r_indexed_only\"\xd7\x03\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\x42\x12\n\x10_score_thresholdB\t\n\x07_offsetB\x0e\n\x0c_vector_nameB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyJ\x04\x08\x05\x10\x06\"\xa6\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\x42\x13\n\x11_read_consistency\"\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\"\x9a\x04\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\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_lookup\"\xe5\x02\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\x42\t\n\x07_offsetB\x08\n\x06_limitB\x0f\n\r_with_vectorsB\x13\n\x11_read_consistencyJ\x04\x08\x05\x10\x06\"S\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\x42\x0e\n\x0c_vector_name\"\xc6\x04\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\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_consistencyJ\x04\x08\x06\x10\x07\"\xaf\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\x42\x13\n\x11_read_consistency\"\x89\x05\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\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_lookup\"d\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\x42\x08\n\x06_exact\"\xc1\x08\n\x15PointsUpdateOperation\x12?\n\x06upsert\x18\x01 \x01(\x0b\x32-.qdrant.PointsUpdateOperation.PointStructListH\x00\x12(\n\x06\x64\x65lete\x18\x02 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\x00\x12?\n\x0bset_payload\x18\x03 \x01(\x0b\x32(.qdrant.PointsUpdateOperation.SetPayloadH\x00\x12\x45\n\x11overwrite_payload\x18\x04 \x01(\x0b\x32(.qdrant.PointsUpdateOperation.SetPayloadH\x00\x12\x45\n\x0e\x64\x65lete_payload\x18\x05 \x01(\x0b\x32+.qdrant.PointsUpdateOperation.DeletePayloadH\x00\x12/\n\rclear_payload\x18\x06 \x01(\x0b\x32\x16.qdrant.PointsSelectorH\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\x1a\x36\n\x0fPointStructList\x12#\n\x06points\x18\x01 \x03(\x0b\x32\x13.qdrant.PointStruct\x1a\xdd\x01\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\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_selector\x1ag\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\x42\x12\n\x10_points_selector\x1a\x35\n\rUpdateVectors\x12$\n\x06points\x18\x01 \x03(\x0b\x32\x14.qdrant.PointVectors\x1aj\n\rDeleteVectors\x12/\n\x0fpoints_selector\x18\x01 \x01(\x0b\x32\x16.qdrant.PointsSelector\x12(\n\x07vectors\x18\x02 \x01(\x0b\x32\x17.qdrant.VectorsSelectorB\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\"J\n\x0cUpdateResult\x12\x14\n\x0coperation_id\x18\x01 \x01(\x04\x12$\n\x06status\x18\x02 \x01(\x0e\x32\x14.qdrant.UpdateStatus\"\xf5\x01\n\x0bScoredPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x31\n\x07payload\x18\x02 \x03(\x0b\x32 .qdrant.ScoredPoint.PayloadEntry\x12\r\n\x05score\x18\x03 \x01(\x02\x12\x0f\n\x07version\x18\x05 \x01(\x04\x12%\n\x07vectors\x18\x06 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\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\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\"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\"\xdb\x01\n\x0eRetrievedPoint\x12\x1b\n\x02id\x18\x01 \x01(\x0b\x32\x0f.qdrant.PointId\x12\x34\n\x07payload\x18\x02 \x03(\x0b\x32#.qdrant.RetrievedPoint.PayloadEntry\x12%\n\x07vectors\x18\x04 \x01(\x0b\x32\x0f.qdrant.VectorsH\x00\x88\x01\x01\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\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\"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\"q\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\"\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\"\xdd\x01\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\"\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\"\\\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\".\n\nGeoPolygon\x12 \n\x06points\x18\x01 \x03(\x0b\x32\x10.qdrant.GeoPoint\"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*\x83\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*H\n\x0cUpdateStatus\x12\x17\n\x13UnknownUpdateStatus\x10\x00\x12\x10\n\x0c\x41\x63knowledged\x10\x01\x12\r\n\tCompleted\x10\x02\x62\x06proto3') _WRITEORDERINGTYPE = DESCRIPTOR.enum_types_by_name['WriteOrderingType'] WriteOrderingType = enum_type_wrapper.EnumTypeWrapper(_WRITEORDERINGTYPE) @@ -80,6 +80,14 @@ _RECOMMENDBATCHPOINTS = DESCRIPTOR.message_types_by_name['RecommendBatchPoints'] _RECOMMENDPOINTGROUPS = DESCRIPTOR.message_types_by_name['RecommendPointGroups'] _COUNTPOINTS = DESCRIPTOR.message_types_by_name['CountPoints'] +_POINTSUPDATEOPERATION = DESCRIPTOR.message_types_by_name['PointsUpdateOperation'] +_POINTSUPDATEOPERATION_POINTSTRUCTLIST = _POINTSUPDATEOPERATION.nested_types_by_name['PointStructList'] +_POINTSUPDATEOPERATION_SETPAYLOAD = _POINTSUPDATEOPERATION.nested_types_by_name['SetPayload'] +_POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY = _POINTSUPDATEOPERATION_SETPAYLOAD.nested_types_by_name['PayloadEntry'] +_POINTSUPDATEOPERATION_DELETEPAYLOAD = _POINTSUPDATEOPERATION.nested_types_by_name['DeletePayload'] +_POINTSUPDATEOPERATION_UPDATEVECTORS = _POINTSUPDATEOPERATION.nested_types_by_name['UpdateVectors'] +_POINTSUPDATEOPERATION_DELETEVECTORS = _POINTSUPDATEOPERATION.nested_types_by_name['DeleteVectors'] +_UPDATEBATCHPOINTS = DESCRIPTOR.message_types_by_name['UpdateBatchPoints'] _POINTSOPERATIONRESPONSE = DESCRIPTOR.message_types_by_name['PointsOperationResponse'] _UPDATERESULT = DESCRIPTOR.message_types_by_name['UpdateResult'] _SCOREDPOINT = DESCRIPTOR.message_types_by_name['ScoredPoint'] @@ -100,6 +108,7 @@ _RECOMMENDRESPONSE = DESCRIPTOR.message_types_by_name['RecommendResponse'] _RECOMMENDBATCHRESPONSE = DESCRIPTOR.message_types_by_name['RecommendBatchResponse'] _RECOMMENDGROUPSRESPONSE = DESCRIPTOR.message_types_by_name['RecommendGroupsResponse'] +_UPDATEBATCHRESPONSE = DESCRIPTOR.message_types_by_name['UpdateBatchResponse'] _FILTER = DESCRIPTOR.message_types_by_name['Filter'] _CONDITION = DESCRIPTOR.message_types_by_name['Condition'] _ISEMPTYCONDITION = DESCRIPTOR.message_types_by_name['IsEmptyCondition'] @@ -374,6 +383,68 @@ }) _sym_db.RegisterMessage(CountPoints) +PointsUpdateOperation = _reflection.GeneratedProtocolMessageType('PointsUpdateOperation', (_message.Message,), { + + 'PointStructList' : _reflection.GeneratedProtocolMessageType('PointStructList', (_message.Message,), { + 'DESCRIPTOR' : _POINTSUPDATEOPERATION_POINTSTRUCTLIST, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation.PointStructList) + }) + , + + 'SetPayload' : _reflection.GeneratedProtocolMessageType('SetPayload', (_message.Message,), { + + 'PayloadEntry' : _reflection.GeneratedProtocolMessageType('PayloadEntry', (_message.Message,), { + 'DESCRIPTOR' : _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation.SetPayload.PayloadEntry) + }) + , + 'DESCRIPTOR' : _POINTSUPDATEOPERATION_SETPAYLOAD, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation.SetPayload) + }) + , + + 'DeletePayload' : _reflection.GeneratedProtocolMessageType('DeletePayload', (_message.Message,), { + 'DESCRIPTOR' : _POINTSUPDATEOPERATION_DELETEPAYLOAD, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation.DeletePayload) + }) + , + + 'UpdateVectors' : _reflection.GeneratedProtocolMessageType('UpdateVectors', (_message.Message,), { + 'DESCRIPTOR' : _POINTSUPDATEOPERATION_UPDATEVECTORS, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation.UpdateVectors) + }) + , + + 'DeleteVectors' : _reflection.GeneratedProtocolMessageType('DeleteVectors', (_message.Message,), { + 'DESCRIPTOR' : _POINTSUPDATEOPERATION_DELETEVECTORS, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation.DeleteVectors) + }) + , + 'DESCRIPTOR' : _POINTSUPDATEOPERATION, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.PointsUpdateOperation) + }) +_sym_db.RegisterMessage(PointsUpdateOperation) +_sym_db.RegisterMessage(PointsUpdateOperation.PointStructList) +_sym_db.RegisterMessage(PointsUpdateOperation.SetPayload) +_sym_db.RegisterMessage(PointsUpdateOperation.SetPayload.PayloadEntry) +_sym_db.RegisterMessage(PointsUpdateOperation.DeletePayload) +_sym_db.RegisterMessage(PointsUpdateOperation.UpdateVectors) +_sym_db.RegisterMessage(PointsUpdateOperation.DeleteVectors) + +UpdateBatchPoints = _reflection.GeneratedProtocolMessageType('UpdateBatchPoints', (_message.Message,), { + 'DESCRIPTOR' : _UPDATEBATCHPOINTS, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.UpdateBatchPoints) + }) +_sym_db.RegisterMessage(UpdateBatchPoints) + PointsOperationResponse = _reflection.GeneratedProtocolMessageType('PointsOperationResponse', (_message.Message,), { 'DESCRIPTOR' : _POINTSOPERATIONRESPONSE, '__module__' : 'points_pb2' @@ -516,6 +587,13 @@ }) _sym_db.RegisterMessage(RecommendGroupsResponse) +UpdateBatchResponse = _reflection.GeneratedProtocolMessageType('UpdateBatchResponse', (_message.Message,), { + 'DESCRIPTOR' : _UPDATEBATCHRESPONSE, + '__module__' : 'points_pb2' + # @@protoc_insertion_point(class_scope:qdrant.UpdateBatchResponse) + }) +_sym_db.RegisterMessage(UpdateBatchResponse) + Filter = _reflection.GeneratedProtocolMessageType('Filter', (_message.Message,), { 'DESCRIPTOR' : _FILTER, '__module__' : 'points_pb2' @@ -664,20 +742,22 @@ _SETPAYLOADPOINTS_PAYLOADENTRY._serialized_options = b'8\001' _NAMEDVECTORS_VECTORSENTRY._options = None _NAMEDVECTORS_VECTORSENTRY._serialized_options = b'8\001' + _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._options = None + _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_options = b'8\001' _SCOREDPOINT_PAYLOADENTRY._options = None _SCOREDPOINT_PAYLOADENTRY._serialized_options = b'8\001' _RETRIEVEDPOINT_PAYLOADENTRY._options = None _RETRIEVEDPOINT_PAYLOADENTRY._serialized_options = b'8\001' _POINTSTRUCT_PAYLOADENTRY._options = None _POINTSTRUCT_PAYLOADENTRY._serialized_options = b'8\001' - _WRITEORDERINGTYPE._serialized_start=10561 - _WRITEORDERINGTYPE._serialized_end=10614 - _READCONSISTENCYTYPE._serialized_start=10616 - _READCONSISTENCYTYPE._serialized_end=10672 - _FIELDTYPE._serialized_start=10675 - _FIELDTYPE._serialized_end=10806 - _UPDATESTATUS._serialized_start=10808 - _UPDATESTATUS._serialized_end=10880 + _WRITEORDERINGTYPE._serialized_start=11957 + _WRITEORDERINGTYPE._serialized_end=12010 + _READCONSISTENCYTYPE._serialized_start=12012 + _READCONSISTENCYTYPE._serialized_end=12068 + _FIELDTYPE._serialized_start=12071 + _FIELDTYPE._serialized_end=12202 + _UPDATESTATUS._serialized_start=12204 + _UPDATESTATUS._serialized_end=12276 _WRITEORDERING._serialized_start=64 _WRITEORDERING._serialized_end=120 _READCONSISTENCY._serialized_start=122 @@ -729,105 +809,123 @@ _QUANTIZATIONSEARCHPARAMS._serialized_start=3220 _QUANTIZATIONSEARCHPARAMS._serialized_end=3356 _SEARCHPARAMS._serialized_start=3359 - _SEARCHPARAMS._serialized_end=3515 - _SEARCHPOINTS._serialized_start=3518 - _SEARCHPOINTS._serialized_end=3989 - _SEARCHBATCHPOINTS._serialized_start=3992 - _SEARCHBATCHPOINTS._serialized_end=4158 - _WITHLOOKUP._serialized_start=4161 - _WITHLOOKUP._serialized_end=4339 - _SEARCHPOINTGROUPS._serialized_start=4342 - _SEARCHPOINTGROUPS._serialized_end=4880 - _SCROLLPOINTS._serialized_start=4883 - _SCROLLPOINTS._serialized_end=5240 - _LOOKUPLOCATION._serialized_start=5242 - _LOOKUPLOCATION._serialized_end=5325 - _RECOMMENDPOINTS._serialized_start=5328 - _RECOMMENDPOINTS._serialized_end=5910 - _RECOMMENDBATCHPOINTS._serialized_start=5913 - _RECOMMENDBATCHPOINTS._serialized_end=6088 - _RECOMMENDPOINTGROUPS._serialized_start=6091 - _RECOMMENDPOINTGROUPS._serialized_end=6740 - _COUNTPOINTS._serialized_start=6742 - _COUNTPOINTS._serialized_end=6842 - _POINTSOPERATIONRESPONSE._serialized_start=6844 - _POINTSOPERATIONRESPONSE._serialized_end=6921 - _UPDATERESULT._serialized_start=6923 - _UPDATERESULT._serialized_end=6997 - _SCOREDPOINT._serialized_start=7000 - _SCOREDPOINT._serialized_end=7245 + _SEARCHPARAMS._serialized_end=3559 + _SEARCHPOINTS._serialized_start=3562 + _SEARCHPOINTS._serialized_end=4033 + _SEARCHBATCHPOINTS._serialized_start=4036 + _SEARCHBATCHPOINTS._serialized_end=4202 + _WITHLOOKUP._serialized_start=4205 + _WITHLOOKUP._serialized_end=4383 + _SEARCHPOINTGROUPS._serialized_start=4386 + _SEARCHPOINTGROUPS._serialized_end=4924 + _SCROLLPOINTS._serialized_start=4927 + _SCROLLPOINTS._serialized_end=5284 + _LOOKUPLOCATION._serialized_start=5286 + _LOOKUPLOCATION._serialized_end=5369 + _RECOMMENDPOINTS._serialized_start=5372 + _RECOMMENDPOINTS._serialized_end=5954 + _RECOMMENDBATCHPOINTS._serialized_start=5957 + _RECOMMENDBATCHPOINTS._serialized_end=6132 + _RECOMMENDPOINTGROUPS._serialized_start=6135 + _RECOMMENDPOINTGROUPS._serialized_end=6784 + _COUNTPOINTS._serialized_start=6786 + _COUNTPOINTS._serialized_end=6886 + _POINTSUPDATEOPERATION._serialized_start=6889 + _POINTSUPDATEOPERATION._serialized_end=7978 + _POINTSUPDATEOPERATION_POINTSTRUCTLIST._serialized_start=7419 + _POINTSUPDATEOPERATION_POINTSTRUCTLIST._serialized_end=7473 + _POINTSUPDATEOPERATION_SETPAYLOAD._serialized_start=7476 + _POINTSUPDATEOPERATION_SETPAYLOAD._serialized_end=7697 + _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_start=1609 + _POINTSUPDATEOPERATION_SETPAYLOAD_PAYLOADENTRY._serialized_end=1670 + _POINTSUPDATEOPERATION_DELETEPAYLOAD._serialized_start=7699 + _POINTSUPDATEOPERATION_DELETEPAYLOAD._serialized_end=7802 + _POINTSUPDATEOPERATION_UPDATEVECTORS._serialized_start=7804 + _POINTSUPDATEOPERATION_UPDATEVECTORS._serialized_end=7857 + _POINTSUPDATEOPERATION_DELETEVECTORS._serialized_start=7859 + _POINTSUPDATEOPERATION_DELETEVECTORS._serialized_end=7965 + _UPDATEBATCHPOINTS._serialized_start=7981 + _UPDATEBATCHPOINTS._serialized_end=8163 + _POINTSOPERATIONRESPONSE._serialized_start=8165 + _POINTSOPERATIONRESPONSE._serialized_end=8242 + _UPDATERESULT._serialized_start=8244 + _UPDATERESULT._serialized_end=8318 + _SCOREDPOINT._serialized_start=8321 + _SCOREDPOINT._serialized_end=8566 _SCOREDPOINT_PAYLOADENTRY._serialized_start=1609 _SCOREDPOINT_PAYLOADENTRY._serialized_end=1670 - _GROUPID._serialized_start=7247 - _GROUPID._serialized_end=7339 - _POINTGROUP._serialized_start=7341 - _POINTGROUP._serialized_end=7457 - _GROUPSRESULT._serialized_start=7459 - _GROUPSRESULT._serialized_end=7509 - _SEARCHRESPONSE._serialized_start=7511 - _SEARCHRESPONSE._serialized_end=7578 - _BATCHRESULT._serialized_start=7580 - _BATCHRESULT._serialized_end=7630 - _SEARCHBATCHRESPONSE._serialized_start=7632 - _SEARCHBATCHRESPONSE._serialized_end=7704 - _SEARCHGROUPSRESPONSE._serialized_start=7706 - _SEARCHGROUPSRESPONSE._serialized_end=7780 - _COUNTRESPONSE._serialized_start=7782 - _COUNTRESPONSE._serialized_end=7848 - _SCROLLRESPONSE._serialized_start=7851 - _SCROLLRESPONSE._serialized_end=7990 - _COUNTRESULT._serialized_start=7992 - _COUNTRESULT._serialized_end=8020 - _RETRIEVEDPOINT._serialized_start=8023 - _RETRIEVEDPOINT._serialized_end=8242 + _GROUPID._serialized_start=8568 + _GROUPID._serialized_end=8660 + _POINTGROUP._serialized_start=8662 + _POINTGROUP._serialized_end=8778 + _GROUPSRESULT._serialized_start=8780 + _GROUPSRESULT._serialized_end=8830 + _SEARCHRESPONSE._serialized_start=8832 + _SEARCHRESPONSE._serialized_end=8899 + _BATCHRESULT._serialized_start=8901 + _BATCHRESULT._serialized_end=8951 + _SEARCHBATCHRESPONSE._serialized_start=8953 + _SEARCHBATCHRESPONSE._serialized_end=9025 + _SEARCHGROUPSRESPONSE._serialized_start=9027 + _SEARCHGROUPSRESPONSE._serialized_end=9101 + _COUNTRESPONSE._serialized_start=9103 + _COUNTRESPONSE._serialized_end=9169 + _SCROLLRESPONSE._serialized_start=9172 + _SCROLLRESPONSE._serialized_end=9311 + _COUNTRESULT._serialized_start=9313 + _COUNTRESULT._serialized_end=9341 + _RETRIEVEDPOINT._serialized_start=9344 + _RETRIEVEDPOINT._serialized_end=9563 _RETRIEVEDPOINT_PAYLOADENTRY._serialized_start=1609 _RETRIEVEDPOINT_PAYLOADENTRY._serialized_end=1670 - _GETRESPONSE._serialized_start=8244 - _GETRESPONSE._serialized_end=8311 - _RECOMMENDRESPONSE._serialized_start=8313 - _RECOMMENDRESPONSE._serialized_end=8383 - _RECOMMENDBATCHRESPONSE._serialized_start=8385 - _RECOMMENDBATCHRESPONSE._serialized_end=8460 - _RECOMMENDGROUPSRESPONSE._serialized_start=8462 - _RECOMMENDGROUPSRESPONSE._serialized_end=8539 - _FILTER._serialized_start=8541 - _FILTER._serialized_end=8654 - _CONDITION._serialized_start=8657 - _CONDITION._serialized_end=8938 - _ISEMPTYCONDITION._serialized_start=8940 - _ISEMPTYCONDITION._serialized_end=8971 - _ISNULLCONDITION._serialized_start=8973 - _ISNULLCONDITION._serialized_end=9003 - _HASIDCONDITION._serialized_start=9005 - _HASIDCONDITION._serialized_end=9054 - _NESTEDCONDITION._serialized_start=9056 - _NESTEDCONDITION._serialized_end=9118 - _FIELDCONDITION._serialized_start=9121 - _FIELDCONDITION._serialized_end=9342 - _MATCH._serialized_start=9345 - _MATCH._serialized_end=9636 - _REPEATEDSTRINGS._serialized_start=9638 - _REPEATEDSTRINGS._serialized_end=9672 - _REPEATEDINTEGERS._serialized_start=9674 - _REPEATEDINTEGERS._serialized_end=9710 - _RANGE._serialized_start=9712 - _RANGE._serialized_end=9819 - _GEOBOUNDINGBOX._serialized_start=9821 - _GEOBOUNDINGBOX._serialized_end=9913 - _GEORADIUS._serialized_start=9915 - _GEORADIUS._serialized_end=9976 - _GEOPOLYGON._serialized_start=9978 - _GEOPOLYGON._serialized_end=10024 - _VALUESCOUNT._serialized_start=10026 - _VALUESCOUNT._serialized_end=10139 - _POINTSSELECTOR._serialized_start=10141 - _POINTSSELECTOR._serialized_end=10258 - _POINTSIDSLIST._serialized_start=10260 - _POINTSIDSLIST._serialized_end=10305 - _POINTSTRUCT._serialized_start=10308 - _POINTSTRUCT._serialized_end=10521 + _GETRESPONSE._serialized_start=9565 + _GETRESPONSE._serialized_end=9632 + _RECOMMENDRESPONSE._serialized_start=9634 + _RECOMMENDRESPONSE._serialized_end=9704 + _RECOMMENDBATCHRESPONSE._serialized_start=9706 + _RECOMMENDBATCHRESPONSE._serialized_end=9781 + _RECOMMENDGROUPSRESPONSE._serialized_start=9783 + _RECOMMENDGROUPSRESPONSE._serialized_end=9860 + _UPDATEBATCHRESPONSE._serialized_start=9862 + _UPDATEBATCHRESPONSE._serialized_end=9935 + _FILTER._serialized_start=9937 + _FILTER._serialized_end=10050 + _CONDITION._serialized_start=10053 + _CONDITION._serialized_end=10334 + _ISEMPTYCONDITION._serialized_start=10336 + _ISEMPTYCONDITION._serialized_end=10367 + _ISNULLCONDITION._serialized_start=10369 + _ISNULLCONDITION._serialized_end=10399 + _HASIDCONDITION._serialized_start=10401 + _HASIDCONDITION._serialized_end=10450 + _NESTEDCONDITION._serialized_start=10452 + _NESTEDCONDITION._serialized_end=10514 + _FIELDCONDITION._serialized_start=10517 + _FIELDCONDITION._serialized_end=10738 + _MATCH._serialized_start=10741 + _MATCH._serialized_end=11032 + _REPEATEDSTRINGS._serialized_start=11034 + _REPEATEDSTRINGS._serialized_end=11068 + _REPEATEDINTEGERS._serialized_start=11070 + _REPEATEDINTEGERS._serialized_end=11106 + _RANGE._serialized_start=11108 + _RANGE._serialized_end=11215 + _GEOBOUNDINGBOX._serialized_start=11217 + _GEOBOUNDINGBOX._serialized_end=11309 + _GEORADIUS._serialized_start=11311 + _GEORADIUS._serialized_end=11372 + _GEOPOLYGON._serialized_start=11374 + _GEOPOLYGON._serialized_end=11420 + _VALUESCOUNT._serialized_start=11422 + _VALUESCOUNT._serialized_end=11535 + _POINTSSELECTOR._serialized_start=11537 + _POINTSSELECTOR._serialized_end=11654 + _POINTSIDSLIST._serialized_start=11656 + _POINTSIDSLIST._serialized_end=11701 + _POINTSTRUCT._serialized_start=11704 + _POINTSTRUCT._serialized_end=11917 _POINTSTRUCT_PAYLOADENTRY._serialized_start=1609 _POINTSTRUCT_PAYLOADENTRY._serialized_end=1670 - _GEOPOINT._serialized_start=10523 - _GEOPOINT._serialized_end=10559 + _GEOPOINT._serialized_start=11919 + _GEOPOINT._serialized_end=11955 # @@protoc_insertion_point(module_scope) diff --git a/qdrant_client/grpc/points_service_pb2.py b/qdrant_client/grpc/points_service_pb2.py index 56e2b3fc..fc3a8c25 100644 --- a/qdrant_client/grpc/points_service_pb2.py +++ b/qdrant_client/grpc/points_service_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14points_service.proto\x12\x06qdrant\x1a\x0cpoints.proto\x1a\x1cgoogle/protobuf/struct.proto2\xf9\n\n\x06Points\x12\x41\n\x06Upsert\x12\x14.qdrant.UpsertPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12\x41\n\x06\x44\x65lete\x12\x14.qdrant.DeletePoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12/\n\x03Get\x12\x11.qdrant.GetPoints\x1a\x13.qdrant.GetResponse\"\x00\x12N\n\rUpdateVectors\x12\x1a.qdrant.UpdatePointVectors\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12N\n\rDeleteVectors\x12\x1a.qdrant.DeletePointVectors\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12I\n\nSetPayload\x12\x18.qdrant.SetPayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12O\n\x10OverwritePayload\x12\x18.qdrant.SetPayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12O\n\rDeletePayload\x12\x1b.qdrant.DeletePayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12M\n\x0c\x43learPayload\x12\x1a.qdrant.ClearPayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12Y\n\x10\x43reateFieldIndex\x12\".qdrant.CreateFieldIndexCollection\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12Y\n\x10\x44\x65leteFieldIndex\x12\".qdrant.DeleteFieldIndexCollection\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12\x38\n\x06Search\x12\x14.qdrant.SearchPoints\x1a\x16.qdrant.SearchResponse\"\x00\x12G\n\x0bSearchBatch\x12\x19.qdrant.SearchBatchPoints\x1a\x1b.qdrant.SearchBatchResponse\"\x00\x12I\n\x0cSearchGroups\x12\x19.qdrant.SearchPointGroups\x1a\x1c.qdrant.SearchGroupsResponse\"\x00\x12\x38\n\x06Scroll\x12\x14.qdrant.ScrollPoints\x1a\x16.qdrant.ScrollResponse\"\x00\x12\x41\n\tRecommend\x12\x17.qdrant.RecommendPoints\x1a\x19.qdrant.RecommendResponse\"\x00\x12P\n\x0eRecommendBatch\x12\x1c.qdrant.RecommendBatchPoints\x1a\x1e.qdrant.RecommendBatchResponse\"\x00\x12R\n\x0fRecommendGroups\x12\x1c.qdrant.RecommendPointGroups\x1a\x1f.qdrant.RecommendGroupsResponse\"\x00\x12\x35\n\x05\x43ount\x12\x13.qdrant.CountPoints\x1a\x15.qdrant.CountResponse\"\x00\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14points_service.proto\x12\x06qdrant\x1a\x0cpoints.proto\x1a\x1cgoogle/protobuf/struct.proto2\xc2\x0b\n\x06Points\x12\x41\n\x06Upsert\x12\x14.qdrant.UpsertPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12\x41\n\x06\x44\x65lete\x12\x14.qdrant.DeletePoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12/\n\x03Get\x12\x11.qdrant.GetPoints\x1a\x13.qdrant.GetResponse\"\x00\x12N\n\rUpdateVectors\x12\x1a.qdrant.UpdatePointVectors\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12N\n\rDeleteVectors\x12\x1a.qdrant.DeletePointVectors\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12I\n\nSetPayload\x12\x18.qdrant.SetPayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12O\n\x10OverwritePayload\x12\x18.qdrant.SetPayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12O\n\rDeletePayload\x12\x1b.qdrant.DeletePayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12M\n\x0c\x43learPayload\x12\x1a.qdrant.ClearPayloadPoints\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12Y\n\x10\x43reateFieldIndex\x12\".qdrant.CreateFieldIndexCollection\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12Y\n\x10\x44\x65leteFieldIndex\x12\".qdrant.DeleteFieldIndexCollection\x1a\x1f.qdrant.PointsOperationResponse\"\x00\x12\x38\n\x06Search\x12\x14.qdrant.SearchPoints\x1a\x16.qdrant.SearchResponse\"\x00\x12G\n\x0bSearchBatch\x12\x19.qdrant.SearchBatchPoints\x1a\x1b.qdrant.SearchBatchResponse\"\x00\x12I\n\x0cSearchGroups\x12\x19.qdrant.SearchPointGroups\x1a\x1c.qdrant.SearchGroupsResponse\"\x00\x12\x38\n\x06Scroll\x12\x14.qdrant.ScrollPoints\x1a\x16.qdrant.ScrollResponse\"\x00\x12\x41\n\tRecommend\x12\x17.qdrant.RecommendPoints\x1a\x19.qdrant.RecommendResponse\"\x00\x12P\n\x0eRecommendBatch\x12\x1c.qdrant.RecommendBatchPoints\x1a\x1e.qdrant.RecommendBatchResponse\"\x00\x12R\n\x0fRecommendGroups\x12\x1c.qdrant.RecommendPointGroups\x1a\x1f.qdrant.RecommendGroupsResponse\"\x00\x12\x35\n\x05\x43ount\x12\x13.qdrant.CountPoints\x1a\x15.qdrant.CountResponse\"\x00\x12G\n\x0bUpdateBatch\x12\x19.qdrant.UpdateBatchPoints\x1a\x1b.qdrant.UpdateBatchResponse\"\x00\x62\x06proto3') @@ -25,5 +25,5 @@ DESCRIPTOR._options = None _POINTS._serialized_start=77 - _POINTS._serialized_end=1478 + _POINTS._serialized_end=1551 # @@protoc_insertion_point(module_scope) diff --git a/qdrant_client/grpc/points_service_pb2_grpc.py b/qdrant_client/grpc/points_service_pb2_grpc.py index 2e8f4fb9..552b0631 100644 --- a/qdrant_client/grpc/points_service_pb2_grpc.py +++ b/qdrant_client/grpc/points_service_pb2_grpc.py @@ -109,6 +109,11 @@ def __init__(self, channel): request_serializer=points__pb2.CountPoints.SerializeToString, response_deserializer=points__pb2.CountResponse.FromString, ) + self.UpdateBatch = channel.unary_unary( + '/qdrant.Points/UpdateBatch', + request_serializer=points__pb2.UpdateBatchPoints.SerializeToString, + response_deserializer=points__pb2.UpdateBatchResponse.FromString, + ) class PointsServicer(object): @@ -266,6 +271,14 @@ def Count(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def UpdateBatch(self, request, context): + """ + Perform multiple update operations in one request + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_PointsServicer_to_server(servicer, server): rpc_method_handlers = { @@ -364,6 +377,11 @@ def add_PointsServicer_to_server(servicer, server): request_deserializer=points__pb2.CountPoints.FromString, response_serializer=points__pb2.CountResponse.SerializeToString, ), + 'UpdateBatch': grpc.unary_unary_rpc_method_handler( + servicer.UpdateBatch, + request_deserializer=points__pb2.UpdateBatchPoints.FromString, + response_serializer=points__pb2.UpdateBatchResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'qdrant.Points', rpc_method_handlers) @@ -696,3 +714,20 @@ def Count(request, points__pb2.CountResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdateBatch(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/qdrant.Points/UpdateBatch', + points__pb2.UpdateBatchPoints.SerializeToString, + points__pb2.UpdateBatchResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/qdrant_client/http/api/points_api.py b/qdrant_client/http/api/points_api.py index 7cc53f7a..d9f32d6a 100644 --- a/qdrant_client/http/api/points_api.py +++ b/qdrant_client/http/api/points_api.py @@ -1,5 +1,5 @@ # flake8: noqa E501 -from typing import TYPE_CHECKING, Any, Dict, Set, Union +from typing import TYPE_CHECKING, Any, Dict, List, Set, Union from qdrant_client._pydantic_compat import to_json from qdrant_client.http.models import * @@ -38,6 +38,37 @@ class _PointsApi: def __init__(self, api_client: "Union[ApiClient, AsyncApiClient]"): self.api_client = api_client + def _build_for_batch_update( + self, + collection_name: str, + wait: bool = None, + ordering: WriteOrdering = None, + update_operation: List[m.UpdateOperation] = None, + ): + path_params = { + "collection_name": str(collection_name), + } + + query_params = {} + if wait is not None: + query_params["wait"] = str(wait).lower() + if ordering is not None: + query_params["ordering"] = str(ordering) + + headers = {} + body = jsonable_encoder(update_operation) + if "Content-Type" not in headers: + headers["Content-Type"] = "application/json" + return self.api_client.request( + type_=m.InlineResponse20013, + method="POST", + url="/collections/{collection_name}/points/batch", + headers=headers if headers else None, + path_params=path_params, + params=query_params, + data=body, + ) + def _build_for_clear_payload( self, collection_name: str, @@ -89,7 +120,7 @@ def _build_for_count_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/count", headers=headers if headers else None, @@ -314,7 +345,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.InlineResponse20015, + type_=m.InlineResponse20016, method="POST", url="/collections/{collection_name}/points/recommend/batch", headers=headers if headers else None, @@ -345,7 +376,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.InlineResponse20016, + type_=m.InlineResponse20017, method="POST", url="/collections/{collection_name}/points/recommend/groups", headers=headers if headers else None, @@ -376,7 +407,7 @@ def _build_for_recommend_points( 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/recommend", headers=headers if headers else None, @@ -407,7 +438,7 @@ def _build_for_scroll_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/scroll", headers=headers if headers else None, @@ -438,7 +469,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.InlineResponse20015, + type_=m.InlineResponse20016, method="POST", url="/collections/{collection_name}/points/search/batch", headers=headers if headers else None, @@ -469,7 +500,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.InlineResponse20016, + type_=m.InlineResponse20017, method="POST", url="/collections/{collection_name}/points/search/groups", headers=headers if headers else None, @@ -500,7 +531,7 @@ def _build_for_search_points( 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/search", headers=headers if headers else None, @@ -613,6 +644,20 @@ def _build_for_upsert_points( class AsyncPointsApi(_PointsApi): + async def batch_update( + self, + collection_name: str, + wait: bool = None, + ordering: WriteOrdering = None, + update_operation: List[m.UpdateOperation] = None, + ) -> m.InlineResponse20013: + return await self._build_for_batch_update( + collection_name=collection_name, + wait=wait, + ordering=ordering, + update_operation=update_operation, + ) + async def clear_payload( self, collection_name: str, @@ -634,7 +679,7 @@ async def count_points( self, collection_name: str, count_request: m.CountRequest = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Count points which matches given filtering condition """ @@ -746,7 +791,7 @@ async def recommend_batch_points( collection_name: str, consistency: m.ReadConsistency = None, recommend_request_batch: m.RecommendRequestBatch = None, - ) -> m.InlineResponse20015: + ) -> m.InlineResponse20016: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -761,7 +806,7 @@ async def recommend_point_groups( collection_name: str, consistency: m.ReadConsistency = None, recommend_groups_request: m.RecommendGroupsRequest = 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, grouped by a given payload field. """ @@ -776,7 +821,7 @@ async def recommend_points( collection_name: str, consistency: m.ReadConsistency = None, recommend_request: m.RecommendRequest = None, - ) -> m.InlineResponse20014: + ) -> m.InlineResponse20015: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -791,7 +836,7 @@ async def scroll_points( collection_name: str, consistency: m.ReadConsistency = None, scroll_request: m.ScrollRequest = None, - ) -> m.InlineResponse20013: + ) -> m.InlineResponse20014: """ Scroll request - paginate over all points which matches given filtering condition """ @@ -806,7 +851,7 @@ async def search_batch_points( collection_name: str, consistency: m.ReadConsistency = None, search_request_batch: m.SearchRequestBatch = None, - ) -> m.InlineResponse20015: + ) -> m.InlineResponse20016: """ Retrieve by batch the closest points based on vector similarity and given filtering conditions """ @@ -821,7 +866,7 @@ async def search_point_groups( collection_name: str, consistency: m.ReadConsistency = None, search_groups_request: m.SearchGroupsRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field """ @@ -836,7 +881,7 @@ async def search_points( collection_name: str, consistency: m.ReadConsistency = None, search_request: m.SearchRequest = None, - ) -> m.InlineResponse20014: + ) -> m.InlineResponse20015: """ Retrieve closest points based on vector similarity and given filtering conditions """ @@ -899,6 +944,20 @@ async def upsert_points( class SyncPointsApi(_PointsApi): + def batch_update( + self, + collection_name: str, + wait: bool = None, + ordering: WriteOrdering = None, + update_operation: List[m.UpdateOperation] = None, + ) -> m.InlineResponse20013: + return self._build_for_batch_update( + collection_name=collection_name, + wait=wait, + ordering=ordering, + update_operation=update_operation, + ) + def clear_payload( self, collection_name: str, @@ -920,7 +979,7 @@ def count_points( self, collection_name: str, count_request: m.CountRequest = None, - ) -> m.InlineResponse20017: + ) -> m.InlineResponse20018: """ Count points which matches given filtering condition """ @@ -1032,7 +1091,7 @@ def recommend_batch_points( collection_name: str, consistency: m.ReadConsistency = None, recommend_request_batch: m.RecommendRequestBatch = None, - ) -> m.InlineResponse20015: + ) -> m.InlineResponse20016: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -1047,7 +1106,7 @@ def recommend_point_groups( collection_name: str, consistency: m.ReadConsistency = None, recommend_groups_request: m.RecommendGroupsRequest = 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, grouped by a given payload field. """ @@ -1062,7 +1121,7 @@ def recommend_points( collection_name: str, consistency: m.ReadConsistency = None, recommend_request: m.RecommendRequest = None, - ) -> m.InlineResponse20014: + ) -> m.InlineResponse20015: """ Look for the points which are closer to stored positive examples and at the same time further to negative examples. """ @@ -1077,7 +1136,7 @@ def scroll_points( collection_name: str, consistency: m.ReadConsistency = None, scroll_request: m.ScrollRequest = None, - ) -> m.InlineResponse20013: + ) -> m.InlineResponse20014: """ Scroll request - paginate over all points which matches given filtering condition """ @@ -1092,7 +1151,7 @@ def search_batch_points( collection_name: str, consistency: m.ReadConsistency = None, search_request_batch: m.SearchRequestBatch = None, - ) -> m.InlineResponse20015: + ) -> m.InlineResponse20016: """ Retrieve by batch the closest points based on vector similarity and given filtering conditions """ @@ -1107,7 +1166,7 @@ def search_point_groups( collection_name: str, consistency: m.ReadConsistency = None, search_groups_request: m.SearchGroupsRequest = None, - ) -> m.InlineResponse20016: + ) -> m.InlineResponse20017: """ Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field """ @@ -1122,7 +1181,7 @@ def search_points( collection_name: str, consistency: m.ReadConsistency = None, search_request: m.SearchRequest = None, - ) -> m.InlineResponse20014: + ) -> m.InlineResponse20015: """ Retrieve closest points based on vector similarity and given filtering conditions """ diff --git a/qdrant_client/http/models/models.py b/qdrant_client/http/models/models.py index fbafce35..e1757adc 100644 --- a/qdrant_client/http/models/models.py +++ b/qdrant_client/http/models/models.py @@ -1,12 +1,6 @@ from datetime import datetime from enum import Enum -from typing import Any, Dict, List, Optional, Union - -try: - from typing import Literal -except ImportError: - # Python 3.7 backport - from typing_extensions import Literal +from typing import Any, Dict, List, Literal, Optional, Union from pydantic import BaseModel, Field from pydantic.types import StrictBool, StrictFloat, StrictInt, StrictStr @@ -45,6 +39,14 @@ class Batch(BaseModel, extra="forbid"): payloads: Optional[List["Payload"]] = Field(default=None, description="") +class BinaryQuantization(BaseModel, extra="forbid"): + binary: "BinaryQuantizationConfig" = Field(..., description="") + + +class BinaryQuantizationConfig(BaseModel, extra="forbid"): + always_ram: Optional[bool] = Field(default=None, description="") + + class ChangeAliasesOperation(BaseModel, extra="forbid"): """ Operation for performing changes of collection aliases. Alias changes are atomic, meaning that no collection modifications can happen between alias operations. @@ -607,7 +609,7 @@ class InlineResponse20013(BaseModel, extra="forbid"): status: Literal[ "ok", ] = Field(None, description="") - result: Optional["ScrollResult"] = Field(default=None, description="") + result: Optional[List["UpdateResult"]] = Field(default=None, description="") class InlineResponse20014(BaseModel, extra="forbid"): @@ -615,7 +617,7 @@ class InlineResponse20014(BaseModel, extra="forbid"): status: Literal[ "ok", ] = Field(None, description="") - result: Optional[List["ScoredPoint"]] = Field(default=None, description="") + result: Optional["ScrollResult"] = Field(default=None, description="") class InlineResponse20015(BaseModel, extra="forbid"): @@ -623,7 +625,7 @@ class InlineResponse20015(BaseModel, extra="forbid"): status: Literal[ "ok", ] = Field(None, description="") - result: Optional[List[List["ScoredPoint"]]] = Field(default=None, description="") + result: Optional[List["ScoredPoint"]] = Field(default=None, description="") class InlineResponse20016(BaseModel, extra="forbid"): @@ -631,10 +633,18 @@ class InlineResponse20016(BaseModel, extra="forbid"): status: Literal[ "ok", ] = Field(None, description="") - result: Optional["GroupsResult"] = Field(default=None, description="") + result: Optional[List[List["ScoredPoint"]]] = Field(default=None, description="") class InlineResponse20017(BaseModel, extra="forbid"): + time: Optional[float] = Field(default=None, description="Time spent to process this request") + status: Literal[ + "ok", + ] = Field(None, description="") + result: Optional["GroupsResult"] = Field(default=None, description="") + + +class InlineResponse20018(BaseModel, extra="forbid"): time: Optional[float] = Field(default=None, description="Time spent to process this request") status: Literal[ "ok", @@ -1337,6 +1347,10 @@ class SearchParams(BaseModel, extra="forbid"): description="Search without approximation. If set to true, search may run long but with exact results.", ) quantization: Optional["QuantizationSearchParams"] = Field(default=None, description="Quantization params") + indexed_only: Optional[bool] = Field( + default=False, + description="If enabled, the engine will only perform search among indexed or small segments. Using this option prevents slow searches in case of delayed index, but does not guarantee that all uploaded vectors will be included in search results", + ) class SearchRequest(BaseModel, extra="forbid"): @@ -1384,11 +1398,13 @@ class SegmentInfo(BaseModel, extra="forbid"): segment_type: "SegmentType" = Field(..., description="Aggregated information about segment") num_vectors: int = Field(..., description="Aggregated information about segment") 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") 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") index_schema: Dict[str, "PayloadIndexInfo"] = Field(..., description="Aggregated information about segment") + vector_data: Dict[str, "VectorDataInfo"] = Field(..., description="Aggregated information about segment") class SegmentTelemetry(BaseModel, extra="forbid"): @@ -1504,6 +1520,38 @@ class UpdateCollection(BaseModel, extra="forbid"): ) +class UpdateOperationOneOf(BaseModel, extra="forbid"): + upsert: "PointInsertOperations" = Field(..., description="") + + +class UpdateOperationOneOf1(BaseModel, extra="forbid"): + delete: "PointsSelector" = Field(..., description="") + + +class UpdateOperationOneOf2(BaseModel, extra="forbid"): + set_payload: "SetPayload" = Field(..., description="") + + +class UpdateOperationOneOf3(BaseModel, extra="forbid"): + overwrite_payload: "SetPayload" = Field(..., description="") + + +class UpdateOperationOneOf4(BaseModel, extra="forbid"): + delete_payload: "DeletePayload" = Field(..., description="") + + +class UpdateOperationOneOf5(BaseModel, extra="forbid"): + clear_payload: "PointsSelector" = Field(..., description="") + + +class UpdateOperationOneOf6(BaseModel, extra="forbid"): + update_vectors: "UpdateVectors" = Field(..., description="") + + +class UpdateOperationOneOf7(BaseModel, extra="forbid"): + delete_vectors: "DeleteVectors" = Field(..., description="") + + class UpdateResult(BaseModel, extra="forbid"): operation_id: int = Field(..., description="Sequential number of the operation") status: "UpdateStatus" = Field(..., description="") @@ -1543,6 +1591,12 @@ class VectorDataConfig(BaseModel, extra="forbid"): ) +class VectorDataInfo(BaseModel, extra="forbid"): + num_vectors: int = Field(..., description="") + num_indexed_vectors: int = Field(..., description="") + num_deleted_vectors: int = Field(..., description="") + + class VectorIndexSearchesTelemetry(BaseModel, extra="forbid"): index_name: Optional[str] = Field(default=None, description="") unfiltered_plain: "OperationDurationStatistics" = Field(..., description="") @@ -1719,16 +1773,28 @@ class WriteOrdering(str, Enum): QuantizationConfig = Union[ ScalarQuantization, ProductQuantization, + BinaryQuantization, ] QuantizationConfigDiff = Union[ ScalarQuantization, ProductQuantization, + BinaryQuantization, Disabled, ] ReadConsistency = Union[ ReadConsistencyType, StrictInt, ] +UpdateOperation = Union[ + UpdateOperationOneOf, + UpdateOperationOneOf1, + UpdateOperationOneOf2, + UpdateOperationOneOf3, + UpdateOperationOneOf4, + UpdateOperationOneOf5, + UpdateOperationOneOf6, + UpdateOperationOneOf7, +] UsingVector = Union[ StrictStr, ] diff --git a/qdrant_client/proto/collections.proto b/qdrant_client/proto/collections.proto index cf1b11ed..687b6025 100644 --- a/qdrant_client/proto/collections.proto +++ b/qdrant_client/proto/collections.proto @@ -208,10 +208,15 @@ message ProductQuantization { optional bool always_ram = 2; // If true - quantized vectors always will be stored in RAM, ignoring the config of main storage } +message BinaryQuantization { + optional bool always_ram = 1; // If true - quantized vectors always will be stored in RAM, ignoring the config of main storage +} + message QuantizationConfig { oneof quantization { ScalarQuantization scalar = 1; ProductQuantization product = 2; + BinaryQuantization binary = 3; } } @@ -224,6 +229,7 @@ message QuantizationConfigDiff { ScalarQuantization scalar = 1; ProductQuantization product = 2; Disabled disabled = 3; + BinaryQuantization binary = 4; } } diff --git a/qdrant_client/proto/points.proto b/qdrant_client/proto/points.proto index cf9b036a..5f73ffdf 100644 --- a/qdrant_client/proto/points.proto +++ b/qdrant_client/proto/points.proto @@ -218,6 +218,12 @@ message SearchParams { If set to true, search will ignore quantized vector data */ optional QuantizationSearchParams quantization = 3; + /* + If enabled, the engine will only perform search among indexed or small segments. + Using this option prevents slow searches in case of delayed index, but does not + guarantee that all uploaded vectors will be included in search results + */ + optional bool indexed_only = 4; } message SearchPoints { @@ -327,6 +333,45 @@ message CountPoints { optional bool exact = 3; // If `true` - return exact count, if `false` - return approximate count } +message PointsUpdateOperation { + message PointStructList { + repeated PointStruct points = 1; + } + message SetPayload { + map payload = 1; + optional PointsSelector points_selector = 2; // Affected points + } + message DeletePayload { + repeated string keys = 1; + optional PointsSelector points_selector = 2; // Affected points + } + message UpdateVectors { + repeated PointVectors points = 1; // List of points and vectors to update + } + message DeleteVectors { + PointsSelector points_selector = 1; // Affected points + VectorsSelector vectors = 2; // List of vector names to delete + } + + oneof operation { + PointStructList upsert = 1; + PointsSelector delete = 2; + SetPayload set_payload = 3; + SetPayload overwrite_payload = 4; + DeletePayload delete_payload = 5; + PointsSelector clear_payload = 6; + UpdateVectors update_vectors = 7; + DeleteVectors delete_vectors = 8; + } +} + +message UpdateBatchPoints { + string collection_name = 1; // name of the collection + optional bool wait = 2; // Wait until the changes have been applied? + repeated PointsUpdateOperation operations = 3; + optional WriteOrdering ordering = 4; // Write ordering guarantees +} + // --------------------------------------------- // ---------------- RPC Response --------------- // --------------------------------------------- @@ -438,6 +483,11 @@ message RecommendGroupsResponse { double time = 2; // Time spent to process } +message UpdateBatchResponse { + repeated UpdateResult result = 1; + double time = 2; // Time spent to process +} + // --------------------------------------------- // ------------- Filter Conditions ------------- // --------------------------------------------- diff --git a/qdrant_client/proto/points_service.proto b/qdrant_client/proto/points_service.proto index 7fe792fa..607e1169 100644 --- a/qdrant_client/proto/points_service.proto +++ b/qdrant_client/proto/points_service.proto @@ -83,4 +83,9 @@ service Points { Count points in collection with given filtering conditions */ rpc Count (CountPoints) returns (CountResponse) {} + + /* + Perform multiple update operations in one request + */ + rpc UpdateBatch (UpdateBatchPoints) returns (UpdateBatchResponse) {} } diff --git a/qdrant_client/proto/qdrant.proto b/qdrant_client/proto/qdrant.proto index f526ea40..ccbfa608 100644 --- a/qdrant_client/proto/qdrant.proto +++ b/qdrant_client/proto/qdrant.proto @@ -10,8 +10,7 @@ service Qdrant { rpc HealthCheck (HealthCheckRequest) returns (HealthCheckReply) {} } -message HealthCheckRequest { -} +message HealthCheckRequest {} message HealthCheckReply { string title = 1; diff --git a/tests/conversions/fixtures.py b/tests/conversions/fixtures.py index 03180ad1..16148127 100644 --- a/tests/conversions/fixtures.py +++ b/tests/conversions/fixtures.py @@ -150,6 +150,10 @@ always_ram=True, ) +binary_quantization = grpc.BinaryQuantization( + always_ram=True, +) + vector_param_with_quant = grpc.VectorParams( size=100, distance=grpc.Distance.Cosine, @@ -252,6 +256,7 @@ search_params_2 = grpc.SearchParams( exact=True, + indexed_only=True, ) search_params_3 = grpc.SearchParams( @@ -381,6 +386,10 @@ scalar=scalar_quantization, ) +binary_quantization_config = grpc.QuantizationConfig( + binary=binary_quantization, +) + create_collection = grpc.CreateCollection( collection_name="my_collection", vectors_config=grpc.VectorsConfig( @@ -713,7 +722,8 @@ read_consistency_2, ], "WriteOrdering": [ordering_0, ordering_1, ordering_2], - "QuantizationConfig": [quantization_config] + product_quantizations, + "QuantizationConfig": [quantization_config, binary_quantization_config] + + product_quantizations, "QuantizationSearchParams": [quantization_search_params], "PointVectors": [point_vector_1, point_vector_2], "GroupId": [group_id_1, group_id_2, group_id_3], diff --git a/tools/generate_grpc_client.sh b/tools/generate_grpc_client.sh index 5f202590..859c7025 100755 --- a/tools/generate_grpc_client.sh +++ b/tools/generate_grpc_client.sh @@ -22,10 +22,14 @@ cp $PROTO_DIR/*.proto $CLIENT_DIR/ # Remove internal services *.proto rm $CLIENT_DIR/points_internal_service.proto rm $CLIENT_DIR/collections_internal_service.proto +rm $CLIENT_DIR/qdrant_internal_service.proto + + rm $CLIENT_DIR/raft_service.proto cat $CLIENT_DIR/qdrant.proto \ | grep -v 'collections_internal_service.proto' \ | grep -v 'points_internal_service.proto' \ + | grep -v 'qdrant_internal_service.proto' \ | grep -v 'raft_service.proto' \ > $CLIENT_DIR/qdrant_tmp.proto mv $CLIENT_DIR/qdrant_tmp.proto $CLIENT_DIR/qdrant.proto