diff --git a/examples/node-js-basic/index.js b/examples/node-js-basic/index.js index d55140c..c7105aa 100644 --- a/examples/node-js-basic/index.js +++ b/examples/node-js-basic/index.js @@ -93,93 +93,55 @@ async function main() { // { id: 2, payload: { city: [Array] }, vector: null } // ] - // -------- Search ---------------- + // -------- Query ---------------- const queryVector = [0.2, 0.1, 0.9, 0.7]; - const res1 = await client.search(collectionName, { - vector: queryVector, + const res1 = await client.query(collectionName, { + query: queryVector, limit: 3, }); - console.log('search result: ', res1); + console.log('query result: ', res1.points); // prints: - // search result: [ - // { - // id: 4, - // version: 3, - // score: 0.99248314, - // payload: { city: [Array] }, - // vector: null - // }, - // { - // id: 1, - // version: 3, - // score: 0.89463294, - // payload: { - // city: 'Berlin', - // coords: [Object], - // count: 1000000, - // country: 'Germany', - // square: 12.5 - // }, - // vector: null - // }, - // { + // query result: [ + // { id: 4, version: 7, score: 0.99248314 }, + // { id: 1, version: 7, score: 0.89463294 }, + // { // id: '98a9a4b1-4ef2-46fb-8315-a97d874fe1d7', - // version: 3, - // score: 0.8543979, - // payload: { count: [Array] }, - // vector: null - // } + // version: 7, + // score: 0.8543979 + // } // ] - const resBatch = await client.searchBatch(collectionName, { + const resBatch = await client.queryBatch(collectionName, { searches: [ { - vector: queryVector, + query: queryVector, limit: 1, }, { - vector: queryVector, + query: queryVector, limit: 2, }, ], }); - console.log('search batch result: ', resBatch); + const batchPoints = resBatch.map(({points}) => points); + + console.log('query batch result: ', batchPoints); // prints: - // search batch result: [ - // [ - // { - // id: 4, - // version: 3, - // score: 0.99248314, - // payload: null, - // vector: null - // } - // ], - // [ - // { - // id: 4, - // version: 3, - // score: 0.99248314, - // payload: null, - // vector: null - // }, - // { - // id: 1, - // version: 3, - // score: 0.89463294, - // payload: null, - // vector: null - // } - // ] + // query batch result: [ + // [ { id: 4, version: 7, score: 0.99248314 } ], + // [ + // { id: 4, version: 7, score: 0.99248314 }, + // { id: 1, version: 7, score: 0.89463294 } + // ] // ] - // -------- Search filters ---------------- + // -------- Query filters ---------------- - const res2 = await client.search(collectionName, { - vector: queryVector, + const res2 = await client.query(collectionName, { + query: queryVector, limit: 3, filter: { must: [ @@ -193,36 +155,12 @@ async function main() { }, }); - console.log('search result with filter: ', res2); + console.log('query result with filter: ', res2.points); // prints: - // search result with filter: [ - // { - // id: 1, - // version: 3, - // score: 0.89463294, - // payload: { - // city: 'Berlin', - // coords: [Object], - // count: 1000000, - // country: 'Germany', - // square: 12.5 - // }, - // vector: null - // }, - // { - // id: 3, - // version: 3, - // score: 0.83872515, - // payload: { city: [Array] }, - // vector: null - // }, - // { - // id: 2, - // version: 3, - // score: 0.66603535, - // payload: { city: [Array] }, - // vector: null - // } + // query result with filter: [ + // { id: 1, version: 7, score: 0.89463294 }, + // { id: 3, version: 7, score: 0.83872515 }, + // { id: 2, version: 7, score: 0.66603535 } // ] return 0; diff --git a/examples/node-js-basic/package.json b/examples/node-js-basic/package.json index f5703f5..216b1f5 100644 --- a/examples/node-js-basic/package.json +++ b/examples/node-js-basic/package.json @@ -15,6 +15,6 @@ "author": "Qdrant Team", "license": "Apache-2.0", "dependencies": { - "@qdrant/qdrant-js": "^1.18.0" + "@qdrant/qdrant-js": "^1.19.0" } } diff --git a/packages/js-client-grpc/CHANGELOG.md b/packages/js-client-grpc/CHANGELOG.md index 2d57689..443aef3 100644 --- a/packages/js-client-grpc/CHANGELOG.md +++ b/packages/js-client-grpc/CHANGELOG.md @@ -1,5 +1,13 @@ # @qdrant/js-client-grpc +## 1.19.0 + +### Minor Changes + +- Qdrant v1.19.0 API +- The `Search`, `SearchBatch`, `SearchGroups`, `Recommend`, `RecommendBatch`, `RecommendGroups`, `Discover` and `DiscoverBatch` RPCs are marked deprecated upstream. Use `Query`, `QueryBatch` and `QueryGroups` instead. +- `StrictModeConfig.max_disk_usage_percent` is gone, superseded by the cluster-wide quota config, and `max_resident_memory_percent` is deprecated with removal planned for 1.21. The quota API itself is REST-only for now. + ## 1.18.0 ### Minor Changes diff --git a/packages/js-client-grpc/package.json b/packages/js-client-grpc/package.json index 8047021..7322610 100644 --- a/packages/js-client-grpc/package.json +++ b/packages/js-client-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@qdrant/js-client-grpc", - "version": "1.18.0", + "version": "1.19.0", "engines": { "node": ">=22.0.0" }, diff --git a/packages/js-client-grpc/proto/collections.proto b/packages/js-client-grpc/proto/collections.proto index 1d52f4c..c7f2e10 100644 --- a/packages/js-client-grpc/proto/collections.proto +++ b/packages/js-client-grpc/proto/collections.proto @@ -11,6 +11,20 @@ enum Datatype { Float32 = 1; Uint8 = 2; Float16 = 3; + Turbo4 = 4; +} + +// Memory placement of a component's data. +// Data is always persisted on disk regardless of this setting; +// it only controls how the data is held in RAM. +enum Memory { + MemoryUnknown = 0; + // Data is not pre-loaded from disk to RAM; cached with usage. + Cold = 1; + // Data is pre-loaded into disk-cache RAM on start, but may be evicted under memory pressure. + Cached = 2; + // Data is loaded in RAM and never evicted. + Pinned = 3; } // --------------------------------------------- @@ -28,13 +42,18 @@ message VectorParams { // Configuration of vector quantization config. // If omitted - the collection configuration will be used optional QuantizationConfig quantization_config = 4; + // Deprecated: use `memory` instead. // If true - serve vectors from disk. // If set to false, the vectors will be loaded in RAM. - optional bool on_disk = 5; + optional bool on_disk = 5 [deprecated = true]; // Data type of the vectors optional Datatype datatype = 6; // Configuration for multi-vector search optional MultiVectorConfig multivector_config = 7; + // Memory placement of the original vector storage. + // Overrides the deprecated `on_disk` flag if both are set. + // `Pinned` is not supported for dense vector storage. + optional Memory memory = 8; } message VectorParamsDiff { @@ -43,9 +62,14 @@ message VectorParamsDiff { optional HnswConfigDiff hnsw_config = 1; // Update quantization params. If none - it is left unchanged. optional QuantizationConfigDiff quantization_config = 2; + // Deprecated: use `memory` instead. // If true - serve vectors from disk. // If set to false, the vectors will be loaded in RAM. - optional bool on_disk = 3; + optional bool on_disk = 3 [deprecated = true]; + // Memory placement of the original vector storage. + // Overrides the deprecated `on_disk` flag if both are set. + // `Pinned` is not supported for dense vector storage. + optional Memory memory = 4; } message VectorParamsMap { @@ -218,8 +242,9 @@ message HnswConfigDiff { // Best to keep between 8 and 16 to prevent likelihood of building broken/inefficient HNSW graphs. // On small CPUs, less threads are used. optional uint64 max_indexing_threads = 4; + // Deprecated: use `memory` instead. // Store HNSW index on disk. If set to false, the index will be stored in RAM. - optional bool on_disk = 5; + optional bool on_disk = 5 [deprecated = true]; // Number of additional payload-aware links per node in the index graph. // If not set - regular M parameter will be used. optional uint64 payload_m = 6; @@ -228,16 +253,23 @@ message HnswConfigDiff { // random seeks during the search. // Requires quantized vectors to be enabled. Multi-vectors are not supported. optional bool inline_storage = 7; + // Memory placement of the HNSW graph. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 8; } message SparseIndexConfig { // Prefer a full scan search upto (excluding) this number of vectors. // Note: this is number of vectors, not KiloBytes. optional uint64 full_scan_threshold = 1; + // Deprecated: use `memory` instead. // Store inverted index on disk. If set to false, the index will be stored in RAM. - optional bool on_disk = 2; + optional bool on_disk = 2 [deprecated = true]; // Datatype used to store weights in the index. optional Datatype datatype = 3; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 4; } message WalConfigDiff { @@ -307,10 +339,14 @@ message OptimizersConfigDiff { // If 0 - no optimization threads, optimizations will be disabled. optional MaxOptimizationThreads max_optimization_threads = 9; - // If this option is set, service will try to prevent creation of large unoptimized segments. - // When enabled, updates may be blocked at request level if there are unoptimized segments larger than indexing threshold. - // Updates will be resumed when optimization is completed and segments are optimized below the threshold. - // Using this option may lead to increased delay between submitting an update and its application. + // If enabled, the service will try to prevent the creation of large unoptimized segments. + // When enabled, new points written to segments larger than the indexing threshold are stored + // as "deferred points": they are persisted in the WAL and segments, but excluded from + // read/search results until the corresponding segments are optimized (e.g. indexed, + // quantized, or moved to mmap storage). + // Update requests with wait=true will only return after the deferred points become visible, + // which may significantly increase the perceived latency between submitting an update and its + // completion. Update requests with wait=false are not affected. // Default is disabled. optional bool prevent_unoptimized = 10; } @@ -320,15 +356,23 @@ message ScalarQuantization { QuantizationType type = 1; // Number of bits to use for quantization optional float quantile = 2; + // Deprecated: use `memory` instead. // If true - quantized vectors always will be stored in RAM, ignoring the config of main storage - optional bool always_ram = 3; + optional bool always_ram = 3 [deprecated = true]; + // Memory placement of quantized vectors. + // Overrides the deprecated `always_ram` flag if both are set. + optional Memory memory = 4; } message ProductQuantization { // Compression ratio CompressionRatio compression = 1; + // Deprecated: use `memory` instead. // If true - quantized vectors always will be stored in RAM, ignoring the config of main storage - optional bool always_ram = 2; + optional bool always_ram = 2 [deprecated = true]; + // Memory placement of quantized vectors. + // Overrides the deprecated `always_ram` flag if both are set. + optional Memory memory = 3; } enum BinaryQuantizationEncoding { @@ -351,19 +395,27 @@ message BinaryQuantizationQueryEncoding { } message BinaryQuantization { + // Deprecated: use `memory` instead. // If true - quantized vectors always will be stored in RAM, ignoring the config of main storage - optional bool always_ram = 1; + optional bool always_ram = 1 [deprecated = true]; // Binary quantization encoding method optional BinaryQuantizationEncoding encoding = 2; // Asymmetric quantization configuration allows a query to have different // quantization than stored vectors. // It can increase the accuracy of search at the cost of performance. optional BinaryQuantizationQueryEncoding query_encoding = 3; + // Memory placement of quantized vectors. + // Overrides the deprecated `always_ram` flag if both are set. + optional Memory memory = 4; } message TurboQuantization{ - optional bool always_ram = 1; + // Deprecated: use `memory` instead. + optional bool always_ram = 1 [deprecated = true]; optional TurboQuantBitSize bits = 2; + // Memory placement of quantized vectors. + // Overrides the deprecated `always_ram` flag if both are set. + optional Memory memory = 3; } enum TurboQuantBitSize{ @@ -442,9 +494,12 @@ message StrictModeConfig { optional uint64 max_points_count = 18; // Max number of payload indexes in a collection optional uint64 max_payload_index_count = 19; + // Deprecated: memory is node-wide, use the global quota config instead. Removal planned for 1.21. // Reject memory-consuming update operations when process resident memory exceeds this percentage of total RAM (cgroup-aware, 1-100). // Delete-style operations are still allowed so memory can be freed. - optional uint32 max_resident_memory_percent = 21; + optional uint32 max_resident_memory_percent = 21 [deprecated = true]; + // 22 was `max_disk_usage_percent`, superseded by the global quota config + reserved 22; } message StrictModeSparseConfig { @@ -465,6 +520,14 @@ message StrictModeMultivector { optional uint64 max_vectors = 1; } +// Params of the payload storage +message PayloadStorageParams { + // Memory placement of the payload storage. + // Overrides the deprecated `on_disk_payload` flag if both are set. + // `Pinned` is not supported for payload storage. + optional Memory memory = 1; +} + message CreateCollection { // Name of the collection string collection_name = 1; @@ -481,8 +544,9 @@ message CreateCollection { // Number of shards in the collection, default is 1 for standalone, otherwise // equal to the number of nodes. Minimum is 1 optional uint32 shard_number = 7; + // Deprecated: use `payload.memory` instead. // If true - point's payload will not be stored in memory - optional bool on_disk_payload = 8; + optional bool on_disk_payload = 8 [deprecated = true]; // Wait timeout for operation commit in seconds, if not specified - default // value will be supplied optional uint64 timeout = 9; @@ -504,6 +568,8 @@ message CreateCollection { optional StrictModeConfig strict_mode_config = 17; // Arbitrary JSON metadata for the collection map metadata = 18; + // Configuration of the payload storage + optional PayloadStorageParams payload = 19; } message UpdateCollection { @@ -555,8 +621,9 @@ message CollectionParams { reserved 2; // Number of shards in collection uint32 shard_number = 3; + // Deprecated: use `payload.memory` instead. // If true - point's payload will not be stored in memory - bool on_disk_payload = 4; + bool on_disk_payload = 4 [deprecated = true]; // Configuration for vectors optional VectorsConfig vectors_config = 5; // Number of replicas of each shard that network tries to maintain @@ -571,6 +638,8 @@ message CollectionParams { optional SparseVectorConfig sparse_vectors_config = 10; // Define number of milliseconds to wait before attempting to read from another replica. optional uint64 read_fan_out_delay_ms = 11; + // Configuration of the payload storage + optional PayloadStorageParams payload = 12; } message CollectionParamsDiff { @@ -578,12 +647,15 @@ message CollectionParamsDiff { optional uint32 replication_factor = 1; // How many replicas should apply the operation for us to consider it successful optional uint32 write_consistency_factor = 2; + // Deprecated: use `payload.memory` instead. // If true - point's payload will not be stored in memory - optional bool on_disk_payload = 3; + optional bool on_disk_payload = 3 [deprecated = true]; // Fan-out every read request to these many additional remote nodes (and return first available response) optional uint32 read_fan_out_factor = 4; // Define number of milliseconds to wait before attempting to read from another replica. optional uint64 read_fan_out_delay_ms = 5; + // Update params of the payload storage + optional PayloadStorageParams payload = 6; } message CollectionConfig { @@ -614,12 +686,23 @@ enum TokenizerType { message KeywordIndexParams { // If true - used for tenant optimization. optional bool is_tenant = 1; + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 2; + optional bool on_disk = 2 [deprecated = true]; // Enable HNSW graph building for this payload field. // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 3; + // If set, enable prefix matching (`match: { "prefix": ... }`) on this field. + optional KeywordPrefixParams prefix = 4; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 5; +} + +// Prefix matching options for the keyword index. Has no options yet: +// presence of this message enables prefix matching. +message KeywordPrefixParams { } message IntegerIndexParams { @@ -631,17 +714,22 @@ message IntegerIndexParams { // This option assumes that this key will be used in majority of filtered requests. // Default is false. optional bool is_principal = 3; + // Deprecated: use `memory` instead. // If true - store index on disk. Default is false. - optional bool on_disk = 4; + optional bool on_disk = 4 [deprecated = true]; // Enable HNSW graph building for this payload field. // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 5; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 6; } message FloatIndexParams { + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 1; + optional bool on_disk = 1 [deprecated = true]; // If true - use this key to organize storage of the collection data. // This option assumes that this key will be used in majority of filtered requests. optional bool is_principal = 2; @@ -649,15 +737,22 @@ message FloatIndexParams { // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 3; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 4; } message GeoIndexParams { + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 1; + optional bool on_disk = 1 [deprecated = true]; // Enable HNSW graph building for this payload field. // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 2; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 3; } message StopwordsSet { @@ -676,8 +771,9 @@ message TextIndexParams { optional uint64 min_token_len = 3; // Maximal token length optional uint64 max_token_len = 4; + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 5; + optional bool on_disk = 5 [deprecated = true]; // Stopwords for the text index optional StopwordsSet stopwords = 6; // If true - support phrase matching. @@ -691,12 +787,17 @@ message TextIndexParams { // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 10; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 11; } message StemmingAlgorithm { oneof stemming_params { // Parameters for snowball stemming SnowballParams snowball = 1; + // Explicitly disable stemming (overrides the language default) + DisabledStemmer disabled = 2; } } @@ -705,18 +806,26 @@ message SnowballParams { string language = 1; } +// Marker selecting the "no stemming" algorithm. +message DisabledStemmer {} + message BoolIndexParams { + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 1; + optional bool on_disk = 1 [deprecated = true]; // Enable HNSW graph building for this payload field. // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 2; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 3; } message DatetimeIndexParams { + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 1; + optional bool on_disk = 1 [deprecated = true]; // If true - use this key to organize storage of the collection data. // This option assumes that this key will be used in majority of filtered requests. optional bool is_principal = 2; @@ -724,17 +833,24 @@ message DatetimeIndexParams { // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 3; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 4; } message UuidIndexParams { // If true - used for tenant optimization. optional bool is_tenant = 1; + // Deprecated: use `memory` instead. // If true - store index on disk. - optional bool on_disk = 2; + optional bool on_disk = 2 [deprecated = true]; // Enable HNSW graph building for this payload field. // If true, builds additional HNSW links (Need payload_m > 0). // Default: true. optional bool enable_hnsw = 3; + // Memory placement of the index. + // Overrides the deprecated `on_disk` flag if both are set. + optional Memory memory = 4; } message PayloadIndexParams { @@ -964,6 +1080,8 @@ message CollectionClusterInfoResponse { repeated ShardTransferInfo shard_transfers = 5; // Resharding operations repeated ReshardingInfo resharding_operations = 6; + // Time spent to process + double time = 7; } message MoveShard { @@ -1064,6 +1182,8 @@ message UpdateCollectionClusterSetupRequest { message UpdateCollectionClusterSetupResponse { bool result = 1; + // Time spent to process + double time = 2; } message CreateShardKeyRequest { @@ -1093,10 +1213,14 @@ message ListShardKeysRequest { message CreateShardKeyResponse { bool result = 1; + // Time spent to process + double time = 2; } message DeleteShardKeyResponse { bool result = 1; + // Time spent to process + double time = 2; } message ShardKeyDescription { diff --git a/packages/js-client-grpc/proto/points.proto b/packages/js-client-grpc/proto/points.proto index 767d4cb..0af10e9 100644 --- a/packages/js-client-grpc/proto/points.proto +++ b/packages/js-client-grpc/proto/points.proto @@ -362,7 +362,7 @@ message DenseVectorCreationConfig { Distance distance = 2; // Configuration for multi-vector search (e.g., ColBERT) optional MultiVectorConfig multivector_config = 3; - // Data type of the vectors (Float32, Float16, Uint8) + // Data type of the vectors (Float32, Float16, Uint8, Turbo4) optional Datatype datatype = 4; } @@ -500,6 +500,14 @@ message AcornSearchParams { optional double max_selectivity = 2; } +// Population over which sparse vector IDF statistics are computed for scoring - the IDF corpus. +// Only applicable to sparse vectors with the IDF modifier enabled. +message IdfParams { + // Filter defining the corpus: IDF statistics are computed over the points matching this filter. + // If unset, statistics are collection-wide (global) - same as omitting `idf` entirely. + optional Filter corpus = 1; +} + message SearchParams { // Params relevant to HNSW index. Size of the beam in a beam-search. // Larger the value - more accurate the result, more time required for search. @@ -517,6 +525,10 @@ message SearchParams { // ACORN search params optional AcornSearchParams acorn = 5; + + // Which population sparse vector IDF statistics are computed over. + // If unset, statistics are collection-wide (global). + optional IdfParams idf = 6; } message SearchPoints { diff --git a/packages/js-client-grpc/proto/points_service.proto b/packages/js-client-grpc/proto/points_service.proto index 162cb2f..cffc7d5 100644 --- a/packages/js-client-grpc/proto/points_service.proto +++ b/packages/js-client-grpc/proto/points_service.proto @@ -37,24 +37,48 @@ service Points { rpc DeleteVectorName(DeleteVectorNameRequest) returns (PointsOperationResponse) {} // Retrieve closest points based on vector similarity and given filtering // conditions - rpc Search(SearchPoints) returns (SearchResponse) {} + // + // Deprecated: use `Query` instead. + rpc Search(SearchPoints) returns (SearchResponse) { + option deprecated = true; + } // Retrieve closest points based on vector similarity and given filtering // conditions - rpc SearchBatch(SearchBatchPoints) returns (SearchBatchResponse) {} + // + // Deprecated: use `QueryBatch` instead. + rpc SearchBatch(SearchBatchPoints) returns (SearchBatchResponse) { + option deprecated = true; + } // Retrieve closest points based on vector similarity and given filtering // conditions, grouped by a given field - rpc SearchGroups(SearchPointGroups) returns (SearchGroupsResponse) {} + // + // Deprecated: use `QueryGroups` instead. + rpc SearchGroups(SearchPointGroups) returns (SearchGroupsResponse) { + option deprecated = true; + } // Iterate over all or filtered points rpc Scroll(ScrollPoints) returns (ScrollResponse) {} // Look for the points which are closer to stored positive examples and at // the same time further to negative examples. - rpc Recommend(RecommendPoints) returns (RecommendResponse) {} + // + // Deprecated: use `Query` with a `recommend` query instead. + rpc Recommend(RecommendPoints) returns (RecommendResponse) { + option deprecated = true; + } // Look for the points which are closer to stored positive examples and at // the same time further to negative examples. - rpc RecommendBatch(RecommendBatchPoints) returns (RecommendBatchResponse) {} + // + // Deprecated: use `QueryBatch` with `recommend` queries instead. + rpc RecommendBatch(RecommendBatchPoints) returns (RecommendBatchResponse) { + option deprecated = true; + } // Look for the points which are closer to stored positive examples and at // the same time further to negative examples, grouped by a given field - rpc RecommendGroups(RecommendPointGroups) returns (RecommendGroupsResponse) {} + // + // Deprecated: use `QueryGroups` with a `recommend` query instead. + rpc RecommendGroups(RecommendPointGroups) returns (RecommendGroupsResponse) { + option deprecated = true; + } // Use context and a target to find the most similar points to the target, // constrained by the context. // @@ -74,9 +98,17 @@ service Points { // distance to the target. The context part of the score for each pair is // calculated +1 if the point is closer to a positive than to a negative part // of a pair, and -1 otherwise. - rpc Discover(DiscoverPoints) returns (DiscoverResponse) {} + // + // Deprecated: use `Query` with a `discover` or `context` query instead. + rpc Discover(DiscoverPoints) returns (DiscoverResponse) { + option deprecated = true; + } // Batch request points based on { positive, negative } pairs of examples, and/or a target - rpc DiscoverBatch(DiscoverBatchPoints) returns (DiscoverBatchResponse) {} + // + // Deprecated: use `QueryBatch` with `discover` or `context` queries instead. + rpc DiscoverBatch(DiscoverBatchPoints) returns (DiscoverBatchResponse) { + option deprecated = true; + } // Count points in collection with given filtering conditions rpc Count(CountPoints) returns (CountResponse) {} diff --git a/packages/js-client-grpc/proto/qdrant_common.proto b/packages/js-client-grpc/proto/qdrant_common.proto index 770fec2..71a7246 100644 --- a/packages/js-client-grpc/proto/qdrant_common.proto +++ b/packages/js-client-grpc/proto/qdrant_common.proto @@ -45,6 +45,7 @@ message Condition { IsNullCondition is_null = 5; NestedCondition nested = 6; HasVectorCondition has_vector = 7; + SliceCondition slice = 8; } } @@ -64,6 +65,13 @@ message HasVectorCondition { string has_vector = 1; } +message SliceCondition { + // Total number of disjoint deterministic slices the id space is split into, must be >= 1 + uint32 total = 1; + // Which slice to select, must be less than `total` + uint32 index = 2; +} + message NestedCondition { // Path to nested object string key = 1; @@ -115,6 +123,8 @@ message Match { string phrase = 9; // Match any word in the text string text_any = 10; + // Match keywords starting with the given prefix + string prefix = 11; } } diff --git a/packages/js-client-grpc/scripts/generate-grpc-sources.sh b/packages/js-client-grpc/scripts/generate-grpc-sources.sh index 73b65ad..2b4f42d 100755 --- a/packages/js-client-grpc/scripts/generate-grpc-sources.sh +++ b/packages/js-client-grpc/scripts/generate-grpc-sources.sh @@ -28,6 +28,7 @@ rm $CLIENT_DIR/health_check.proto rm $CLIENT_DIR/shard_snapshots_service.proto rm $CLIENT_DIR/telemetry_internal.proto rm $CLIENT_DIR/storage_read_service.proto +rm $CLIENT_DIR/quota_internal.proto cat $CLIENT_DIR/qdrant.proto \ | grep -v 'collections_internal_service.proto' \ | grep -v 'points_internal_service.proto' \ diff --git a/packages/js-client-grpc/src/client-version.ts b/packages/js-client-grpc/src/client-version.ts index 457023e..62927b9 100644 --- a/packages/js-client-grpc/src/client-version.ts +++ b/packages/js-client-grpc/src/client-version.ts @@ -1,4 +1,4 @@ -export const PACKAGE_VERSION = '1.18.0'; +export const PACKAGE_VERSION = '1.19.0'; interface Version { major: number; diff --git a/packages/js-client-grpc/src/proto/collections_pb.ts b/packages/js-client-grpc/src/proto/collections_pb.ts index 8af43eb..a2d4c7c 100644 --- a/packages/js-client-grpc/src/proto/collections_pb.ts +++ b/packages/js-client-grpc/src/proto/collections_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file collections.proto (package qdrant, syntax proto3) /* eslint-disable */ @@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file collections.proto. */ export const file_collections: GenFile = /*@__PURE__*/ - fileDesc("ChFjb2xsZWN0aW9ucy5wcm90bxIGcWRyYW50IoMDCgxWZWN0b3JQYXJhbXMSDAoEc2l6ZRgBIAEoBBIiCghkaXN0YW5jZRgCIAEoDjIQLnFkcmFudC5EaXN0YW5jZRIwCgtobnN3X2NvbmZpZxgDIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZkgAiAEBEjwKE3F1YW50aXphdGlvbl9jb25maWcYBCABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSAGIAQESFAoHb25fZGlzaxgFIAEoCEgCiAEBEicKCGRhdGF0eXBlGAYgASgOMhAucWRyYW50LkRhdGF0eXBlSAOIAQESOgoSbXVsdGl2ZWN0b3JfY29uZmlnGAcgASgLMhkucWRyYW50Lk11bHRpVmVjdG9yQ29uZmlnSASIAQFCDgoMX2huc3dfY29uZmlnQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQgoKCF9vbl9kaXNrQgsKCV9kYXRhdHlwZUIVChNfbXVsdGl2ZWN0b3JfY29uZmlnItABChBWZWN0b3JQYXJhbXNEaWZmEjAKC2huc3dfY29uZmlnGAEgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmSACIAQESQAoTcXVhbnRpemF0aW9uX2NvbmZpZxgCIAEoCzIeLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdEaWZmSAGIAQESFAoHb25fZGlzaxgDIAEoCEgCiAEBQg4KDF9obnN3X2NvbmZpZ0IWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0IKCghfb25fZGlzayKCAQoPVmVjdG9yUGFyYW1zTWFwEi0KA21hcBgBIAMoCzIgLnFkcmFudC5WZWN0b3JQYXJhbXNNYXAuTWFwRW50cnkaQAoITWFwRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQucWRyYW50LlZlY3RvclBhcmFtczoCOAEijgEKE1ZlY3RvclBhcmFtc0RpZmZNYXASMQoDbWFwGAEgAygLMiQucWRyYW50LlZlY3RvclBhcmFtc0RpZmZNYXAuTWFwRW50cnkaRAoITWFwRW50cnkSCwoDa2V5GAEgASgJEicKBXZhbHVlGAIgASgLMhgucWRyYW50LlZlY3RvclBhcmFtc0RpZmY6AjgBInAKDVZlY3RvcnNDb25maWcSJgoGcGFyYW1zGAEgASgLMhQucWRyYW50LlZlY3RvclBhcmFtc0gAEi0KCnBhcmFtc19tYXAYAiABKAsyFy5xZHJhbnQuVmVjdG9yUGFyYW1zTWFwSABCCAoGY29uZmlnInwKEVZlY3RvcnNDb25maWdEaWZmEioKBnBhcmFtcxgBIAEoCzIYLnFkcmFudC5WZWN0b3JQYXJhbXNEaWZmSAASMQoKcGFyYW1zX21hcBgCIAEoCzIbLnFkcmFudC5WZWN0b3JQYXJhbXNEaWZmTWFwSABCCAoGY29uZmlnIoMBChJTcGFyc2VWZWN0b3JQYXJhbXMSLQoFaW5kZXgYASABKAsyGS5xZHJhbnQuU3BhcnNlSW5kZXhDb25maWdIAIgBARInCghtb2RpZmllchgCIAEoDjIQLnFkcmFudC5Nb2RpZmllckgBiAEBQggKBl9pbmRleEILCglfbW9kaWZpZXIijgEKElNwYXJzZVZlY3RvckNvbmZpZxIwCgNtYXAYASADKAsyIy5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnLk1hcEVudHJ5GkYKCE1hcEVudHJ5EgsKA2tleRgBIAEoCRIpCgV2YWx1ZRgCIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JQYXJhbXM6AjgBIkYKEU11bHRpVmVjdG9yQ29uZmlnEjEKCmNvbXBhcmF0b3IYASABKA4yHS5xZHJhbnQuTXVsdGlWZWN0b3JDb21wYXJhdG9yIjMKGEdldENvbGxlY3Rpb25JbmZvUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiMgoXQ29sbGVjdGlvbkV4aXN0c1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIiIKEENvbGxlY3Rpb25FeGlzdHMSDgoGZXhpc3RzGAEgASgIIlIKGENvbGxlY3Rpb25FeGlzdHNSZXNwb25zZRIoCgZyZXN1bHQYASABKAsyGC5xZHJhbnQuQ29sbGVjdGlvbkV4aXN0cxIMCgR0aW1lGAIgASgBIhgKFkxpc3RDb2xsZWN0aW9uc1JlcXVlc3QiJQoVQ29sbGVjdGlvbkRlc2NyaXB0aW9uEgwKBG5hbWUYASABKAkiUQoZR2V0Q29sbGVjdGlvbkluZm9SZXNwb25zZRImCgZyZXN1bHQYASABKAsyFi5xZHJhbnQuQ29sbGVjdGlvbkluZm8SDAoEdGltZRgCIAEoASJbChdMaXN0Q29sbGVjdGlvbnNSZXNwb25zZRIyCgtjb2xsZWN0aW9ucxgBIAMoCzIdLnFkcmFudC5Db2xsZWN0aW9uRGVzY3JpcHRpb24SDAoEdGltZRgCIAEoASKEAQoWTWF4T3B0aW1pemF0aW9uVGhyZWFkcxIPCgV2YWx1ZRgBIAEoBEgAEjkKB3NldHRpbmcYAiABKA4yJi5xZHJhbnQuTWF4T3B0aW1pemF0aW9uVGhyZWFkcy5TZXR0aW5nSAAiEwoHU2V0dGluZxIICgRBdXRvEABCCQoHdmFyaWFudCIsCg9PcHRpbWl6ZXJTdGF0dXMSCgoCb2sYASABKAgSDQoFZXJyb3IYAiABKAkiJAoRQ29sbGVjdGlvbldhcm5pbmcSDwoHbWVzc2FnZRgBIAEoCSLAAgoOSG5zd0NvbmZpZ0RpZmYSDgoBbRgBIAEoBEgAiAEBEhkKDGVmX2NvbnN0cnVjdBgCIAEoBEgBiAEBEiAKE2Z1bGxfc2Nhbl90aHJlc2hvbGQYAyABKARIAogBARIhChRtYXhfaW5kZXhpbmdfdGhyZWFkcxgEIAEoBEgDiAEBEhQKB29uX2Rpc2sYBSABKAhIBIgBARIWCglwYXlsb2FkX20YBiABKARIBYgBARIbCg5pbmxpbmVfc3RvcmFnZRgHIAEoCEgGiAEBQgQKAl9tQg8KDV9lZl9jb25zdHJ1Y3RCFgoUX2Z1bGxfc2Nhbl90aHJlc2hvbGRCFwoVX21heF9pbmRleGluZ190aHJlYWRzQgoKCF9vbl9kaXNrQgwKCl9wYXlsb2FkX21CEQoPX2lubGluZV9zdG9yYWdlIqUBChFTcGFyc2VJbmRleENvbmZpZxIgChNmdWxsX3NjYW5fdGhyZXNob2xkGAEgASgESACIAQESFAoHb25fZGlzaxgCIAEoCEgBiAEBEicKCGRhdGF0eXBlGAMgASgOMhAucWRyYW50LkRhdGF0eXBlSAKIAQFCFgoUX2Z1bGxfc2Nhbl90aHJlc2hvbGRCCgoIX29uX2Rpc2tCCwoJX2RhdGF0eXBlIq8BCg1XYWxDb25maWdEaWZmEhwKD3dhbF9jYXBhY2l0eV9tYhgBIAEoBEgAiAEBEh8KEndhbF9zZWdtZW50c19haGVhZBgCIAEoBEgBiAEBEh4KEXdhbF9yZXRhaW5fY2xvc2VkGAMgASgESAKIAQFCEgoQX3dhbF9jYXBhY2l0eV9tYkIVChNfd2FsX3NlZ21lbnRzX2FoZWFkQhQKEl93YWxfcmV0YWluX2Nsb3NlZCKgBQoUT3B0aW1pemVyc0NvbmZpZ0RpZmYSHgoRZGVsZXRlZF90aHJlc2hvbGQYASABKAFIAIgBARIlChh2YWN1dW1fbWluX3ZlY3Rvcl9udW1iZXIYAiABKARIAYgBARIjChZkZWZhdWx0X3NlZ21lbnRfbnVtYmVyGAMgASgESAKIAQESHQoQbWF4X3NlZ21lbnRfc2l6ZRgEIAEoBEgDiAEBEh0KEG1lbW1hcF90aHJlc2hvbGQYBSABKARIBIgBARIfChJpbmRleGluZ190aHJlc2hvbGQYBiABKARIBYgBARIfChJmbHVzaF9pbnRlcnZhbF9zZWMYByABKARIBogBARIwCiNkZXByZWNhdGVkX21heF9vcHRpbWl6YXRpb25fdGhyZWFkcxgIIAEoBEgHiAEBEkUKGG1heF9vcHRpbWl6YXRpb25fdGhyZWFkcxgJIAEoCzIeLnFkcmFudC5NYXhPcHRpbWl6YXRpb25UaHJlYWRzSAiIAQESIAoTcHJldmVudF91bm9wdGltaXplZBgKIAEoCEgJiAEBQhQKEl9kZWxldGVkX3RocmVzaG9sZEIbChlfdmFjdXVtX21pbl92ZWN0b3JfbnVtYmVyQhkKF19kZWZhdWx0X3NlZ21lbnRfbnVtYmVyQhMKEV9tYXhfc2VnbWVudF9zaXplQhMKEV9tZW1tYXBfdGhyZXNob2xkQhUKE19pbmRleGluZ190aHJlc2hvbGRCFQoTX2ZsdXNoX2ludGVydmFsX3NlY0ImCiRfZGVwcmVjYXRlZF9tYXhfb3B0aW1pemF0aW9uX3RocmVhZHNCGwoZX21heF9vcHRpbWl6YXRpb25fdGhyZWFkc0IWChRfcHJldmVudF91bm9wdGltaXplZCKIAQoSU2NhbGFyUXVhbnRpemF0aW9uEiYKBHR5cGUYASABKA4yGC5xZHJhbnQuUXVhbnRpemF0aW9uVHlwZRIVCghxdWFudGlsZRgCIAEoAkgAiAEBEhcKCmFsd2F5c19yYW0YAyABKAhIAYgBAUILCglfcXVhbnRpbGVCDQoLX2Fsd2F5c19yYW0ibAoTUHJvZHVjdFF1YW50aXphdGlvbhItCgtjb21wcmVzc2lvbhgBIAEoDjIYLnFkcmFudC5Db21wcmVzc2lvblJhdGlvEhcKCmFsd2F5c19yYW0YAiABKAhIAIgBAUINCgtfYWx3YXlzX3JhbSK2AQofQmluYXJ5UXVhbnRpemF0aW9uUXVlcnlFbmNvZGluZxJCCgdzZXR0aW5nGAQgASgOMi8ucWRyYW50LkJpbmFyeVF1YW50aXphdGlvblF1ZXJ5RW5jb2RpbmcuU2V0dGluZ0gAIkQKB1NldHRpbmcSCwoHRGVmYXVsdBAAEgoKBkJpbmFyeRABEg8KC1NjYWxhcjRCaXRzEAISDwoLU2NhbGFyOEJpdHMQA0IJCgd2YXJpYW50It0BChJCaW5hcnlRdWFudGl6YXRpb24SFwoKYWx3YXlzX3JhbRgBIAEoCEgAiAEBEjkKCGVuY29kaW5nGAIgASgOMiIucWRyYW50LkJpbmFyeVF1YW50aXphdGlvbkVuY29kaW5nSAGIAQESRAoOcXVlcnlfZW5jb2RpbmcYAyABKAsyJy5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uUXVlcnlFbmNvZGluZ0gCiAEBQg0KC19hbHdheXNfcmFtQgsKCV9lbmNvZGluZ0IRCg9fcXVlcnlfZW5jb2RpbmcicgoRVHVyYm9RdWFudGl6YXRpb24SFwoKYWx3YXlzX3JhbRgBIAEoCEgAiAEBEiwKBGJpdHMYAiABKA4yGS5xZHJhbnQuVHVyYm9RdWFudEJpdFNpemVIAYgBAUINCgtfYWx3YXlzX3JhbUIHCgVfYml0cyLhAQoSUXVhbnRpemF0aW9uQ29uZmlnEiwKBnNjYWxhchgBIAEoCzIaLnFkcmFudC5TY2FsYXJRdWFudGl6YXRpb25IABIuCgdwcm9kdWN0GAIgASgLMhsucWRyYW50LlByb2R1Y3RRdWFudGl6YXRpb25IABIsCgZiaW5hcnkYAyABKAsyGi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uSAASLwoKdHVyYm9xdWFudBgEIAEoCzIZLnFkcmFudC5UdXJib1F1YW50aXphdGlvbkgAQg4KDHF1YW50aXphdGlvbiIKCghEaXNhYmxlZCKLAgoWUXVhbnRpemF0aW9uQ29uZmlnRGlmZhIsCgZzY2FsYXIYASABKAsyGi5xZHJhbnQuU2NhbGFyUXVhbnRpemF0aW9uSAASLgoHcHJvZHVjdBgCIAEoCzIbLnFkcmFudC5Qcm9kdWN0UXVhbnRpemF0aW9uSAASJAoIZGlzYWJsZWQYAyABKAsyEC5xZHJhbnQuRGlzYWJsZWRIABIsCgZiaW5hcnkYBCABKAsyGi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uSAASLwoKdHVyYm9xdWFudBgFIAEoCzIZLnFkcmFudC5UdXJib1F1YW50aXphdGlvbkgAQg4KDHF1YW50aXphdGlvbiK/CgoQU3RyaWN0TW9kZUNvbmZpZxIUCgdlbmFibGVkGAEgASgISACIAQESHAoPbWF4X3F1ZXJ5X2xpbWl0GAIgASgNSAGIAQESGAoLbWF4X3RpbWVvdXQYAyABKA1IAogBARIpChx1bmluZGV4ZWRfZmlsdGVyaW5nX3JldHJpZXZlGAQgASgISAOIAQESJwoadW5pbmRleGVkX2ZpbHRlcmluZ191cGRhdGUYBSABKAhIBIgBARIfChJzZWFyY2hfbWF4X2huc3dfZWYYBiABKA1IBYgBARIfChJzZWFyY2hfYWxsb3dfZXhhY3QYByABKAhIBogBARIkChdzZWFyY2hfbWF4X292ZXJzYW1wbGluZxgIIAEoAkgHiAEBEiEKFHVwc2VydF9tYXhfYmF0Y2hzaXplGAkgASgESAiIAQESIQoUc2VhcmNoX21heF9iYXRjaHNpemUYFCABKARICYgBARItCiBtYXhfY29sbGVjdGlvbl92ZWN0b3Jfc2l6ZV9ieXRlcxgKIAEoBEgKiAEBEhwKD3JlYWRfcmF0ZV9saW1pdBgLIAEoDUgLiAEBEh0KEHdyaXRlX3JhdGVfbGltaXQYDCABKA1IDIgBARIuCiFtYXhfY29sbGVjdGlvbl9wYXlsb2FkX3NpemVfYnl0ZXMYDSABKARIDYgBARIiChVmaWx0ZXJfbWF4X2NvbmRpdGlvbnMYDiABKARIDogBARIfChJjb25kaXRpb25fbWF4X3NpemUYDyABKARID4gBARJEChJtdWx0aXZlY3Rvcl9jb25maWcYECABKAsyIy5xZHJhbnQuU3RyaWN0TW9kZU11bHRpdmVjdG9yQ29uZmlnSBCIAQESOgoNc3BhcnNlX2NvbmZpZxgRIAEoCzIeLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlQ29uZmlnSBGIAQESHQoQbWF4X3BvaW50c19jb3VudBgSIAEoBEgSiAEBEiQKF21heF9wYXlsb2FkX2luZGV4X2NvdW50GBMgASgESBOIAQESKAobbWF4X3Jlc2lkZW50X21lbW9yeV9wZXJjZW50GBUgASgNSBSIAQFCCgoIX2VuYWJsZWRCEgoQX21heF9xdWVyeV9saW1pdEIOCgxfbWF4X3RpbWVvdXRCHwodX3VuaW5kZXhlZF9maWx0ZXJpbmdfcmV0cmlldmVCHQobX3VuaW5kZXhlZF9maWx0ZXJpbmdfdXBkYXRlQhUKE19zZWFyY2hfbWF4X2huc3dfZWZCFQoTX3NlYXJjaF9hbGxvd19leGFjdEIaChhfc2VhcmNoX21heF9vdmVyc2FtcGxpbmdCFwoVX3Vwc2VydF9tYXhfYmF0Y2hzaXplQhcKFV9zZWFyY2hfbWF4X2JhdGNoc2l6ZUIjCiFfbWF4X2NvbGxlY3Rpb25fdmVjdG9yX3NpemVfYnl0ZXNCEgoQX3JlYWRfcmF0ZV9saW1pdEITChFfd3JpdGVfcmF0ZV9saW1pdEIkCiJfbWF4X2NvbGxlY3Rpb25fcGF5bG9hZF9zaXplX2J5dGVzQhgKFl9maWx0ZXJfbWF4X2NvbmRpdGlvbnNCFQoTX2NvbmRpdGlvbl9tYXhfc2l6ZUIVChNfbXVsdGl2ZWN0b3JfY29uZmlnQhAKDl9zcGFyc2VfY29uZmlnQhMKEV9tYXhfcG9pbnRzX2NvdW50QhoKGF9tYXhfcGF5bG9hZF9pbmRleF9jb3VudEIeChxfbWF4X3Jlc2lkZW50X21lbW9yeV9wZXJjZW50IrABChZTdHJpY3RNb2RlU3BhcnNlQ29uZmlnEkcKDXNwYXJzZV9jb25maWcYASADKAsyMC5xZHJhbnQuU3RyaWN0TW9kZVNwYXJzZUNvbmZpZy5TcGFyc2VDb25maWdFbnRyeRpNChFTcGFyc2VDb25maWdFbnRyeRILCgNrZXkYASABKAkSJwoFdmFsdWUYAiABKAsyGC5xZHJhbnQuU3RyaWN0TW9kZVNwYXJzZToCOAEiOgoQU3RyaWN0TW9kZVNwYXJzZRIXCgptYXhfbGVuZ3RoGAogASgESACIAQFCDQoLX21heF9sZW5ndGgizgEKG1N0cmljdE1vZGVNdWx0aXZlY3RvckNvbmZpZxJWChJtdWx0aXZlY3Rvcl9jb25maWcYASADKAsyOi5xZHJhbnQuU3RyaWN0TW9kZU11bHRpdmVjdG9yQ29uZmlnLk11bHRpdmVjdG9yQ29uZmlnRW50cnkaVwoWTXVsdGl2ZWN0b3JDb25maWdFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5xZHJhbnQuU3RyaWN0TW9kZU11bHRpdmVjdG9yOgI4ASJBChVTdHJpY3RNb2RlTXVsdGl2ZWN0b3ISGAoLbWF4X3ZlY3RvcnMYASABKARIAIgBAUIOCgxfbWF4X3ZlY3RvcnMimwgKEENyZWF0ZUNvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEjAKC2huc3dfY29uZmlnGAQgASgLMhYucWRyYW50Lkhuc3dDb25maWdEaWZmSACIAQESLgoKd2FsX2NvbmZpZxgFIAEoCzIVLnFkcmFudC5XYWxDb25maWdEaWZmSAGIAQESPAoRb3B0aW1pemVyc19jb25maWcYBiABKAsyHC5xZHJhbnQuT3B0aW1pemVyc0NvbmZpZ0RpZmZIAogBARIZCgxzaGFyZF9udW1iZXIYByABKA1IA4gBARIcCg9vbl9kaXNrX3BheWxvYWQYCCABKAhIBIgBARIUCgd0aW1lb3V0GAkgASgESAWIAQESMgoOdmVjdG9yc19jb25maWcYCiABKAsyFS5xZHJhbnQuVmVjdG9yc0NvbmZpZ0gGiAEBEh8KEnJlcGxpY2F0aW9uX2ZhY3RvchgLIAEoDUgHiAEBEiUKGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgMIAEoDUgIiAEBEjwKE3F1YW50aXphdGlvbl9jb25maWcYDiABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSAmIAQESNAoPc2hhcmRpbmdfbWV0aG9kGA8gASgOMhYucWRyYW50LlNoYXJkaW5nTWV0aG9kSAqIAQESPgoVc3BhcnNlX3ZlY3RvcnNfY29uZmlnGBAgASgLMhoucWRyYW50LlNwYXJzZVZlY3RvckNvbmZpZ0gLiAEBEjkKEnN0cmljdF9tb2RlX2NvbmZpZxgRIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlQ29uZmlnSAyIAQESOAoIbWV0YWRhdGEYEiADKAsyJi5xZHJhbnQuQ3JlYXRlQ29sbGVjdGlvbi5NZXRhZGF0YUVudHJ5Gj4KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIOCgxfaG5zd19jb25maWdCDQoLX3dhbF9jb25maWdCFAoSX29wdGltaXplcnNfY29uZmlnQg8KDV9zaGFyZF9udW1iZXJCEgoQX29uX2Rpc2tfcGF5bG9hZEIKCghfdGltZW91dEIRCg9fdmVjdG9yc19jb25maWdCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIbChlfd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQhIKEF9zaGFyZGluZ19tZXRob2RCGAoWX3NwYXJzZV92ZWN0b3JzX2NvbmZpZ0IVChNfc3RyaWN0X21vZGVfY29uZmlnSgQIAhADSgQIAxAESgQIDRAOIuwFChBVcGRhdGVDb2xsZWN0aW9uEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRI8ChFvcHRpbWl6ZXJzX2NvbmZpZxgCIAEoCzIcLnFkcmFudC5PcHRpbWl6ZXJzQ29uZmlnRGlmZkgAiAEBEhQKB3RpbWVvdXQYAyABKARIAYgBARIxCgZwYXJhbXMYBCABKAsyHC5xZHJhbnQuQ29sbGVjdGlvblBhcmFtc0RpZmZIAogBARIwCgtobnN3X2NvbmZpZxgFIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZkgDiAEBEjYKDnZlY3RvcnNfY29uZmlnGAYgASgLMhkucWRyYW50LlZlY3RvcnNDb25maWdEaWZmSASIAQESQAoTcXVhbnRpemF0aW9uX2NvbmZpZxgHIAEoCzIeLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdEaWZmSAWIAQESPgoVc3BhcnNlX3ZlY3RvcnNfY29uZmlnGAggASgLMhoucWRyYW50LlNwYXJzZVZlY3RvckNvbmZpZ0gGiAEBEjkKEnN0cmljdF9tb2RlX2NvbmZpZxgJIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlQ29uZmlnSAeIAQESOAoIbWV0YWRhdGEYCiADKAsyJi5xZHJhbnQuVXBkYXRlQ29sbGVjdGlvbi5NZXRhZGF0YUVudHJ5Gj4KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIUChJfb3B0aW1pemVyc19jb25maWdCCgoIX3RpbWVvdXRCCQoHX3BhcmFtc0IOCgxfaG5zd19jb25maWdCEQoPX3ZlY3RvcnNfY29uZmlnQhYKFF9xdWFudGl6YXRpb25fY29uZmlnQhgKFl9zcGFyc2VfdmVjdG9yc19jb25maWdCFQoTX3N0cmljdF9tb2RlX2NvbmZpZyJNChBEZWxldGVDb2xsZWN0aW9uEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIUCgd0aW1lb3V0GAIgASgESACIAQFCCgoIX3RpbWVvdXQiOwobQ29sbGVjdGlvbk9wZXJhdGlvblJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCBIMCgR0aW1lGAIgASgBIqwEChBDb2xsZWN0aW9uUGFyYW1zEhQKDHNoYXJkX251bWJlchgDIAEoDRIXCg9vbl9kaXNrX3BheWxvYWQYBCABKAgSMgoOdmVjdG9yc19jb25maWcYBSABKAsyFS5xZHJhbnQuVmVjdG9yc0NvbmZpZ0gAiAEBEh8KEnJlcGxpY2F0aW9uX2ZhY3RvchgGIAEoDUgBiAEBEiUKGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgHIAEoDUgCiAEBEiAKE3JlYWRfZmFuX291dF9mYWN0b3IYCCABKA1IA4gBARI0Cg9zaGFyZGluZ19tZXRob2QYCSABKA4yFi5xZHJhbnQuU2hhcmRpbmdNZXRob2RIBIgBARI+ChVzcGFyc2VfdmVjdG9yc19jb25maWcYCiABKAsyGi5xZHJhbnQuU3BhcnNlVmVjdG9yQ29uZmlnSAWIAQESIgoVcmVhZF9mYW5fb3V0X2RlbGF5X21zGAsgASgESAaIAQFCEQoPX3ZlY3RvcnNfY29uZmlnQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIWChRfcmVhZF9mYW5fb3V0X2ZhY3RvckISChBfc2hhcmRpbmdfbWV0aG9kQhgKFl9zcGFyc2VfdmVjdG9yc19jb25maWdCGAoWX3JlYWRfZmFuX291dF9kZWxheV9tc0oECAEQAkoECAIQAyK8AgoUQ29sbGVjdGlvblBhcmFtc0RpZmYSHwoScmVwbGljYXRpb25fZmFjdG9yGAEgASgNSACIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAIgASgNSAGIAQESHAoPb25fZGlza19wYXlsb2FkGAMgASgISAKIAQESIAoTcmVhZF9mYW5fb3V0X2ZhY3RvchgEIAEoDUgDiAEBEiIKFXJlYWRfZmFuX291dF9kZWxheV9tcxgFIAEoBEgEiAEBQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckISChBfb25fZGlza19wYXlsb2FkQhYKFF9yZWFkX2Zhbl9vdXRfZmFjdG9yQhgKFl9yZWFkX2Zhbl9vdXRfZGVsYXlfbXMi7gMKEENvbGxlY3Rpb25Db25maWcSKAoGcGFyYW1zGAEgASgLMhgucWRyYW50LkNvbGxlY3Rpb25QYXJhbXMSKwoLaG5zd19jb25maWcYAiABKAsyFi5xZHJhbnQuSG5zd0NvbmZpZ0RpZmYSNgoQb3B0aW1pemVyX2NvbmZpZxgDIAEoCzIcLnFkcmFudC5PcHRpbWl6ZXJzQ29uZmlnRGlmZhIpCgp3YWxfY29uZmlnGAQgASgLMhUucWRyYW50LldhbENvbmZpZ0RpZmYSPAoTcXVhbnRpemF0aW9uX2NvbmZpZxgFIAEoCzIaLnFkcmFudC5RdWFudGl6YXRpb25Db25maWdIAIgBARI5ChJzdHJpY3RfbW9kZV9jb25maWcYBiABKAsyGC5xZHJhbnQuU3RyaWN0TW9kZUNvbmZpZ0gBiAEBEjgKCG1ldGFkYXRhGAcgAygLMiYucWRyYW50LkNvbGxlY3Rpb25Db25maWcuTWV0YWRhdGFFbnRyeRo+Cg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCFgoUX3F1YW50aXphdGlvbl9jb25maWdCFQoTX3N0cmljdF9tb2RlX2NvbmZpZyKGAQoSS2V5d29yZEluZGV4UGFyYW1zEhYKCWlzX3RlbmFudBgBIAEoCEgAiAEBEhQKB29uX2Rpc2sYAiABKAhIAYgBARIYCgtlbmFibGVfaG5zdxgDIAEoCEgCiAEBQgwKCl9pc190ZW5hbnRCCgoIX29uX2Rpc2tCDgoMX2VuYWJsZV9obnN3IsoBChJJbnRlZ2VySW5kZXhQYXJhbXMSEwoGbG9va3VwGAEgASgISACIAQESEgoFcmFuZ2UYAiABKAhIAYgBARIZCgxpc19wcmluY2lwYWwYAyABKAhIAogBARIUCgdvbl9kaXNrGAQgASgISAOIAQESGAoLZW5hYmxlX2huc3cYBSABKAhIBIgBAUIJCgdfbG9va3VwQggKBl9yYW5nZUIPCg1faXNfcHJpbmNpcGFsQgoKCF9vbl9kaXNrQg4KDF9lbmFibGVfaG5zdyKKAQoQRmxvYXRJbmRleFBhcmFtcxIUCgdvbl9kaXNrGAEgASgISACIAQESGQoMaXNfcHJpbmNpcGFsGAIgASgISAGIAQESGAoLZW5hYmxlX2huc3cYAyABKAhIAogBAUIKCghfb25fZGlza0IPCg1faXNfcHJpbmNpcGFsQg4KDF9lbmFibGVfaG5zdyJcCg5HZW9JbmRleFBhcmFtcxIUCgdvbl9kaXNrGAEgASgISACIAQESGAoLZW5hYmxlX2huc3cYAiABKAhIAYgBAUIKCghfb25fZGlza0IOCgxfZW5hYmxlX2huc3ciMQoMU3RvcHdvcmRzU2V0EhEKCWxhbmd1YWdlcxgBIAMoCRIOCgZjdXN0b20YAiADKAki4gMKD1RleHRJbmRleFBhcmFtcxIoCgl0b2tlbml6ZXIYASABKA4yFS5xZHJhbnQuVG9rZW5pemVyVHlwZRIWCglsb3dlcmNhc2UYAiABKAhIAIgBARIaCg1taW5fdG9rZW5fbGVuGAMgASgESAGIAQESGgoNbWF4X3Rva2VuX2xlbhgEIAEoBEgCiAEBEhQKB29uX2Rpc2sYBSABKAhIA4gBARIsCglzdG9wd29yZHMYBiABKAsyFC5xZHJhbnQuU3RvcHdvcmRzU2V0SASIAQESHAoPcGhyYXNlX21hdGNoaW5nGAcgASgISAWIAQESLwoHc3RlbW1lchgIIAEoCzIZLnFkcmFudC5TdGVtbWluZ0FsZ29yaXRobUgGiAEBEhoKDWFzY2lpX2ZvbGRpbmcYCSABKAhIB4gBARIYCgtlbmFibGVfaG5zdxgKIAEoCEgIiAEBQgwKCl9sb3dlcmNhc2VCEAoOX21pbl90b2tlbl9sZW5CEAoOX21heF90b2tlbl9sZW5CCgoIX29uX2Rpc2tCDAoKX3N0b3B3b3Jkc0ISChBfcGhyYXNlX21hdGNoaW5nQgoKCF9zdGVtbWVyQhAKDl9hc2NpaV9mb2xkaW5nQg4KDF9lbmFibGVfaG5zdyJSChFTdGVtbWluZ0FsZ29yaXRobRIqCghzbm93YmFsbBgBIAEoCzIWLnFkcmFudC5Tbm93YmFsbFBhcmFtc0gAQhEKD3N0ZW1taW5nX3BhcmFtcyIiCg5Tbm93YmFsbFBhcmFtcxIQCghsYW5ndWFnZRgBIAEoCSJdCg9Cb29sSW5kZXhQYXJhbXMSFAoHb25fZGlzaxgBIAEoCEgAiAEBEhgKC2VuYWJsZV9obnN3GAIgASgISAGIAQFCCgoIX29uX2Rpc2tCDgoMX2VuYWJsZV9obnN3Io0BChNEYXRldGltZUluZGV4UGFyYW1zEhQKB29uX2Rpc2sYASABKAhIAIgBARIZCgxpc19wcmluY2lwYWwYAiABKAhIAYgBARIYCgtlbmFibGVfaG5zdxgDIAEoCEgCiAEBQgoKCF9vbl9kaXNrQg8KDV9pc19wcmluY2lwYWxCDgoMX2VuYWJsZV9obnN3IoMBCg9VdWlkSW5kZXhQYXJhbXMSFgoJaXNfdGVuYW50GAEgASgISACIAQESFAoHb25fZGlzaxgCIAEoCEgBiAEBEhgKC2VuYWJsZV9obnN3GAMgASgISAKIAQFCDAoKX2lzX3RlbmFudEIKCghfb25fZGlza0IOCgxfZW5hYmxlX2huc3ci6AMKElBheWxvYWRJbmRleFBhcmFtcxI6ChRrZXl3b3JkX2luZGV4X3BhcmFtcxgDIAEoCzIaLnFkcmFudC5LZXl3b3JkSW5kZXhQYXJhbXNIABI6ChRpbnRlZ2VyX2luZGV4X3BhcmFtcxgCIAEoCzIaLnFkcmFudC5JbnRlZ2VySW5kZXhQYXJhbXNIABI2ChJmbG9hdF9pbmRleF9wYXJhbXMYBCABKAsyGC5xZHJhbnQuRmxvYXRJbmRleFBhcmFtc0gAEjIKEGdlb19pbmRleF9wYXJhbXMYBSABKAsyFi5xZHJhbnQuR2VvSW5kZXhQYXJhbXNIABI0ChF0ZXh0X2luZGV4X3BhcmFtcxgBIAEoCzIXLnFkcmFudC5UZXh0SW5kZXhQYXJhbXNIABI0ChFib29sX2luZGV4X3BhcmFtcxgGIAEoCzIXLnFkcmFudC5Cb29sSW5kZXhQYXJhbXNIABI8ChVkYXRldGltZV9pbmRleF9wYXJhbXMYByABKAsyGy5xZHJhbnQuRGF0ZXRpbWVJbmRleFBhcmFtc0gAEjQKEXV1aWRfaW5kZXhfcGFyYW1zGAggASgLMhcucWRyYW50LlV1aWRJbmRleFBhcmFtc0gAQg4KDGluZGV4X3BhcmFtcyKdAQoRUGF5bG9hZFNjaGVtYUluZm8SLAoJZGF0YV90eXBlGAEgASgOMhkucWRyYW50LlBheWxvYWRTY2hlbWFUeXBlEi8KBnBhcmFtcxgCIAEoCzIaLnFkcmFudC5QYXlsb2FkSW5kZXhQYXJhbXNIAIgBARITCgZwb2ludHMYAyABKARIAYgBAUIJCgdfcGFyYW1zQgkKB19wb2ludHMiUwoPVXBkYXRlUXVldWVJbmZvEg4KBmxlbmd0aBgBIAEoBBIcCg9kZWZlcnJlZF9wb2ludHMYAiABKARIAIgBAUISChBfZGVmZXJyZWRfcG9pbnRzIpsECg5Db2xsZWN0aW9uSW5mbxIoCgZzdGF0dXMYASABKA4yGC5xZHJhbnQuQ29sbGVjdGlvblN0YXR1cxIxChBvcHRpbWl6ZXJfc3RhdHVzGAIgASgLMhcucWRyYW50Lk9wdGltaXplclN0YXR1cxIWCg5zZWdtZW50c19jb3VudBgEIAEoBBIoCgZjb25maWcYByABKAsyGC5xZHJhbnQuQ29sbGVjdGlvbkNvbmZpZxJBCg5wYXlsb2FkX3NjaGVtYRgIIAMoCzIpLnFkcmFudC5Db2xsZWN0aW9uSW5mby5QYXlsb2FkU2NoZW1hRW50cnkSGQoMcG9pbnRzX2NvdW50GAkgASgESACIAQESIgoVaW5kZXhlZF92ZWN0b3JzX2NvdW50GAogASgESAGIAQESKwoId2FybmluZ3MYCyADKAsyGS5xZHJhbnQuQ29sbGVjdGlvbldhcm5pbmcSLQoMdXBkYXRlX3F1ZXVlGAwgASgLMhcucWRyYW50LlVwZGF0ZVF1ZXVlSW5mbxpPChJQYXlsb2FkU2NoZW1hRW50cnkSCwoDa2V5GAEgASgJEigKBXZhbHVlGAIgASgLMhkucWRyYW50LlBheWxvYWRTY2hlbWFJbmZvOgI4AUIPCg1fcG9pbnRzX2NvdW50QhgKFl9pbmRleGVkX3ZlY3RvcnNfY291bnRKBAgDEARKBAgFEAZKBAgGEAciWwoNQ2hhbmdlQWxpYXNlcxIoCgdhY3Rpb25zGAEgAygLMhcucWRyYW50LkFsaWFzT3BlcmF0aW9ucxIUCgd0aW1lb3V0GAIgASgESACIAQFCCgoIX3RpbWVvdXQiogEKD0FsaWFzT3BlcmF0aW9ucxIrCgxjcmVhdGVfYWxpYXMYASABKAsyEy5xZHJhbnQuQ3JlYXRlQWxpYXNIABIrCgxyZW5hbWVfYWxpYXMYAiABKAsyEy5xZHJhbnQuUmVuYW1lQWxpYXNIABIrCgxkZWxldGVfYWxpYXMYAyABKAsyEy5xZHJhbnQuRGVsZXRlQWxpYXNIAEIICgZhY3Rpb24iOgoLQ3JlYXRlQWxpYXMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhIKCmFsaWFzX25hbWUYAiABKAkiPQoLUmVuYW1lQWxpYXMSFgoOb2xkX2FsaWFzX25hbWUYASABKAkSFgoObmV3X2FsaWFzX25hbWUYAiABKAkiIQoLRGVsZXRlQWxpYXMSEgoKYWxpYXNfbmFtZRgBIAEoCSIUChJMaXN0QWxpYXNlc1JlcXVlc3QiNwocTGlzdENvbGxlY3Rpb25BbGlhc2VzUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiPwoQQWxpYXNEZXNjcmlwdGlvbhISCgphbGlhc19uYW1lGAEgASgJEhcKD2NvbGxlY3Rpb25fbmFtZRgCIAEoCSJOChNMaXN0QWxpYXNlc1Jlc3BvbnNlEikKB2FsaWFzZXMYASADKAsyGC5xZHJhbnQuQWxpYXNEZXNjcmlwdGlvbhIMCgR0aW1lGAIgASgBIjcKHENvbGxlY3Rpb25DbHVzdGVySW5mb1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIjYKCFNoYXJkS2V5EhEKB2tleXdvcmQYASABKAlIABIQCgZudW1iZXIYAiABKARIAEIFCgNrZXkilQEKDkxvY2FsU2hhcmRJbmZvEhAKCHNoYXJkX2lkGAEgASgNEhQKDHBvaW50c19jb3VudBgCIAEoBBIjCgVzdGF0ZRgDIAEoDjIULnFkcmFudC5SZXBsaWNhU3RhdGUSKAoJc2hhcmRfa2V5GAQgASgLMhAucWRyYW50LlNoYXJkS2V5SACIAQFCDAoKX3NoYXJkX2tleSKRAQoPUmVtb3RlU2hhcmRJbmZvEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQSIwoFc3RhdGUYAyABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlEigKCXNoYXJkX2tleRgEIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgwKCl9zaGFyZF9rZXkidwoRU2hhcmRUcmFuc2ZlckluZm8SEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBSABKA1IAIgBARIMCgRmcm9tGAIgASgEEgoKAnRvGAMgASgEEgwKBHN5bmMYBCABKAhCDgoMX3RvX3NoYXJkX2lkIpsBCg5SZXNoYXJkaW5nSW5mbxIQCghzaGFyZF9pZBgBIAEoDRIPCgdwZWVyX2lkGAIgASgEEigKCXNoYXJkX2tleRgDIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBEi4KCWRpcmVjdGlvbhgEIAEoDjIbLnFkcmFudC5SZXNoYXJkaW5nRGlyZWN0aW9uQgwKCl9zaGFyZF9rZXkijgIKHUNvbGxlY3Rpb25DbHVzdGVySW5mb1Jlc3BvbnNlEg8KB3BlZXJfaWQYASABKAQSEwoLc2hhcmRfY291bnQYAiABKAQSLAoMbG9jYWxfc2hhcmRzGAMgAygLMhYucWRyYW50LkxvY2FsU2hhcmRJbmZvEi4KDXJlbW90ZV9zaGFyZHMYBCADKAsyFy5xZHJhbnQuUmVtb3RlU2hhcmRJbmZvEjIKD3NoYXJkX3RyYW5zZmVycxgFIAMoCzIZLnFkcmFudC5TaGFyZFRyYW5zZmVySW5mbxI1ChVyZXNoYXJkaW5nX29wZXJhdGlvbnMYBiADKAsyFi5xZHJhbnQuUmVzaGFyZGluZ0luZm8irgEKCU1vdmVTaGFyZBIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEjAKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kSAGIAQFCDgoMX3RvX3NoYXJkX2lkQgkKB19tZXRob2QiswEKDlJlcGxpY2F0ZVNoYXJkEhAKCHNoYXJkX2lkGAEgASgNEhgKC3RvX3NoYXJkX2lkGAUgASgNSACIAQESFAoMZnJvbV9wZWVyX2lkGAIgASgEEhIKCnRvX3BlZXJfaWQYAyABKAQSMAoGbWV0aG9kGAQgASgOMhsucWRyYW50LlNoYXJkVHJhbnNmZXJNZXRob2RIAYgBAUIOCgxfdG9fc2hhcmRfaWRCCQoHX21ldGhvZCJ6ChJBYm9ydFNoYXJkVHJhbnNmZXISEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBCABKA1IAIgBARIUCgxmcm9tX3BlZXJfaWQYAiABKAQSEgoKdG9fcGVlcl9pZBgDIAEoBEIOCgxfdG9fc2hhcmRfaWQipAEKD1Jlc3RhcnRUcmFuc2ZlchIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEisKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kQg4KDF90b19zaGFyZF9pZCKTAQoPUmVwbGljYXRlUG9pbnRzEigKDmZyb21fc2hhcmRfa2V5GAEgASgLMhAucWRyYW50LlNoYXJkS2V5EiYKDHRvX3NoYXJkX2tleRgCIAEoCzIQLnFkcmFudC5TaGFyZEtleRIjCgZmaWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVySACIAQFCCQoHX2ZpbHRlciIsCgdSZXBsaWNhEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQi8gEKDkNyZWF0ZVNoYXJkS2V5EiMKCXNoYXJkX2tleRgBIAEoCzIQLnFkcmFudC5TaGFyZEtleRIaCg1zaGFyZHNfbnVtYmVyGAIgASgNSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAMgASgNSAGIAQESEQoJcGxhY2VtZW50GAQgAygEEjAKDWluaXRpYWxfc3RhdGUYBSABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlSAKIAQFCEAoOX3NoYXJkc19udW1iZXJCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIQCg5faW5pdGlhbF9zdGF0ZSI1Cg5EZWxldGVTaGFyZEtleRIjCglzaGFyZF9rZXkYASABKAsyEC5xZHJhbnQuU2hhcmRLZXki+gMKI1VwZGF0ZUNvbGxlY3Rpb25DbHVzdGVyU2V0dXBSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgptb3ZlX3NoYXJkGAIgASgLMhEucWRyYW50Lk1vdmVTaGFyZEgAEjEKD3JlcGxpY2F0ZV9zaGFyZBgDIAEoCzIWLnFkcmFudC5SZXBsaWNhdGVTaGFyZEgAEjQKDmFib3J0X3RyYW5zZmVyGAQgASgLMhoucWRyYW50LkFib3J0U2hhcmRUcmFuc2ZlckgAEicKDGRyb3BfcmVwbGljYRgFIAEoCzIPLnFkcmFudC5SZXBsaWNhSAASMgoQY3JlYXRlX3NoYXJkX2tleRgHIAEoCzIWLnFkcmFudC5DcmVhdGVTaGFyZEtleUgAEjIKEGRlbGV0ZV9zaGFyZF9rZXkYCCABKAsyFi5xZHJhbnQuRGVsZXRlU2hhcmRLZXlIABIzChByZXN0YXJ0X3RyYW5zZmVyGAkgASgLMhcucWRyYW50LlJlc3RhcnRUcmFuc2ZlckgAEjMKEHJlcGxpY2F0ZV9wb2ludHMYCiABKAsyFy5xZHJhbnQuUmVwbGljYXRlUG9pbnRzSAASFAoHdGltZW91dBgGIAEoBEgBiAEBQgsKCW9wZXJhdGlvbkIKCghfdGltZW91dCI2CiRVcGRhdGVDb2xsZWN0aW9uQ2x1c3RlclNldHVwUmVzcG9uc2USDgoGcmVzdWx0GAEgASgIInsKFUNyZWF0ZVNoYXJkS2V5UmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoHcmVxdWVzdBgCIAEoCzIWLnFkcmFudC5DcmVhdGVTaGFyZEtleRIUCgd0aW1lb3V0GAMgASgESACIAQFCCgoIX3RpbWVvdXQiewoVRGVsZXRlU2hhcmRLZXlSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgdyZXF1ZXN0GAIgASgLMhYucWRyYW50LkRlbGV0ZVNoYXJkS2V5EhQKB3RpbWVvdXQYAyABKARIAIgBAUIKCghfdGltZW91dCIvChRMaXN0U2hhcmRLZXlzUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiKAoWQ3JlYXRlU2hhcmRLZXlSZXNwb25zZRIOCgZyZXN1bHQYASABKAgiKAoWRGVsZXRlU2hhcmRLZXlSZXNwb25zZRIOCgZyZXN1bHQYASABKAgiNAoTU2hhcmRLZXlEZXNjcmlwdGlvbhIdCgNrZXkYASABKAsyEC5xZHJhbnQuU2hhcmRLZXkiVgoVTGlzdFNoYXJkS2V5c1Jlc3BvbnNlEi8KCnNoYXJkX2tleXMYASADKAsyGy5xZHJhbnQuU2hhcmRLZXlEZXNjcmlwdGlvbhIMCgR0aW1lGAIgASgBKjwKCERhdGF0eXBlEgsKB0RlZmF1bHQQABILCgdGbG9hdDMyEAESCQoFVWludDgQAhILCgdGbG9hdDE2EAMqHQoITW9kaWZpZXISCAoETm9uZRAAEgcKA0lkZhABKiMKFU11bHRpVmVjdG9yQ29tcGFyYXRvchIKCgZNYXhTaW0QACpPCghEaXN0YW5jZRITCg9Vbmtub3duRGlzdGFuY2UQABIKCgZDb3NpbmUQARIKCgZFdWNsaWQQAhIHCgNEb3QQAxINCglNYW5oYXR0YW4QBCpZChBDb2xsZWN0aW9uU3RhdHVzEhsKF1Vua25vd25Db2xsZWN0aW9uU3RhdHVzEAASCQoFR3JlZW4QARIKCgZZZWxsb3cQAhIHCgNSZWQQAxIICgRHcmV5EAQqfgoRUGF5bG9hZFNjaGVtYVR5cGUSDwoLVW5rbm93blR5cGUQABILCgdLZXl3b3JkEAESCwoHSW50ZWdlchACEgkKBUZsb2F0EAMSBwoDR2VvEAQSCAoEVGV4dBAFEggKBEJvb2wQBhIMCghEYXRldGltZRAHEggKBFV1aWQQCCo1ChBRdWFudGl6YXRpb25UeXBlEhcKE1Vua25vd25RdWFudGl6YXRpb24QABIICgRJbnQ4EAEqPQoQQ29tcHJlc3Npb25SYXRpbxIGCgJ4NBAAEgYKAng4EAESBwoDeDE2EAISBwoDeDMyEAMSBwoDeDY0EAQqSQoaQmluYXJ5UXVhbnRpemF0aW9uRW5jb2RpbmcSCgoGT25lQml0EAASCwoHVHdvQml0cxABEhIKDk9uZUFuZEhhbGZCaXRzEAIqQQoRVHVyYm9RdWFudEJpdFNpemUSCQoFQml0czEQABILCgdCaXRzMV81EAESCQoFQml0czIQAhIJCgVCaXRzNBADKiYKDlNoYXJkaW5nTWV0aG9kEggKBEF1dG8QABIKCgZDdXN0b20QASpUCg1Ub2tlbml6ZXJUeXBlEgsKB1Vua25vd24QABIKCgZQcmVmaXgQARIOCgpXaGl0ZXNwYWNlEAISCAoEV29yZBADEhAKDE11bHRpbGluZ3VhbBAEKsEBCgxSZXBsaWNhU3RhdGUSCgoGQWN0aXZlEAASCAoERGVhZBABEgsKB1BhcnRpYWwQAhIQCgxJbml0aWFsaXppbmcQAxIMCghMaXN0ZW5lchAEEhMKD1BhcnRpYWxTbmFwc2hvdBAFEgwKCFJlY292ZXJ5EAYSDgoKUmVzaGFyZGluZxAHEhcKE1Jlc2hhcmRpbmdTY2FsZURvd24QCBIOCgpBY3RpdmVSZWFkEAkSEgoOTWFudWFsUmVjb3ZlcnkQCionChNSZXNoYXJkaW5nRGlyZWN0aW9uEgYKAlVwEAASCAoERG93bhABKmEKE1NoYXJkVHJhbnNmZXJNZXRob2QSEQoNU3RyZWFtUmVjb3JkcxAAEgwKCFNuYXBzaG90EAESDAoIV2FsRGVsdGEQAhIbChdSZXNoYXJkaW5nU3RyZWFtUmVjb3JkcxADQhWqAhJRZHJhbnQuQ2xpZW50LkdycGNiBnByb3RvMw", [file_json_with_int, file_qdrant_common]); + fileDesc("ChFjb2xsZWN0aW9ucy5wcm90bxIGcWRyYW50IrcDCgxWZWN0b3JQYXJhbXMSDAoEc2l6ZRgBIAEoBBIiCghkaXN0YW5jZRgCIAEoDjIQLnFkcmFudC5EaXN0YW5jZRIwCgtobnN3X2NvbmZpZxgDIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZkgAiAEBEjwKE3F1YW50aXphdGlvbl9jb25maWcYBCABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSAGIAQESGAoHb25fZGlzaxgFIAEoCEICGAFIAogBARInCghkYXRhdHlwZRgGIAEoDjIQLnFkcmFudC5EYXRhdHlwZUgDiAEBEjoKEm11bHRpdmVjdG9yX2NvbmZpZxgHIAEoCzIZLnFkcmFudC5NdWx0aVZlY3RvckNvbmZpZ0gEiAEBEiMKBm1lbW9yeRgIIAEoDjIOLnFkcmFudC5NZW1vcnlIBYgBAUIOCgxfaG5zd19jb25maWdCFgoUX3F1YW50aXphdGlvbl9jb25maWdCCgoIX29uX2Rpc2tCCwoJX2RhdGF0eXBlQhUKE19tdWx0aXZlY3Rvcl9jb25maWdCCQoHX21lbW9yeSKEAgoQVmVjdG9yUGFyYW1zRGlmZhIwCgtobnN3X2NvbmZpZxgBIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZkgAiAEBEkAKE3F1YW50aXphdGlvbl9jb25maWcYAiABKAsyHi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnRGlmZkgBiAEBEhgKB29uX2Rpc2sYAyABKAhCAhgBSAKIAQESIwoGbWVtb3J5GAQgASgOMg4ucWRyYW50Lk1lbW9yeUgDiAEBQg4KDF9obnN3X2NvbmZpZ0IWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0IKCghfb25fZGlza0IJCgdfbWVtb3J5IoIBCg9WZWN0b3JQYXJhbXNNYXASLQoDbWFwGAEgAygLMiAucWRyYW50LlZlY3RvclBhcmFtc01hcC5NYXBFbnRyeRpACghNYXBFbnRyeRILCgNrZXkYASABKAkSIwoFdmFsdWUYAiABKAsyFC5xZHJhbnQuVmVjdG9yUGFyYW1zOgI4ASKOAQoTVmVjdG9yUGFyYW1zRGlmZk1hcBIxCgNtYXAYASADKAsyJC5xZHJhbnQuVmVjdG9yUGFyYW1zRGlmZk1hcC5NYXBFbnRyeRpECghNYXBFbnRyeRILCgNrZXkYASABKAkSJwoFdmFsdWUYAiABKAsyGC5xZHJhbnQuVmVjdG9yUGFyYW1zRGlmZjoCOAEicAoNVmVjdG9yc0NvbmZpZxImCgZwYXJhbXMYASABKAsyFC5xZHJhbnQuVmVjdG9yUGFyYW1zSAASLQoKcGFyYW1zX21hcBgCIAEoCzIXLnFkcmFudC5WZWN0b3JQYXJhbXNNYXBIAEIICgZjb25maWcifAoRVmVjdG9yc0NvbmZpZ0RpZmYSKgoGcGFyYW1zGAEgASgLMhgucWRyYW50LlZlY3RvclBhcmFtc0RpZmZIABIxCgpwYXJhbXNfbWFwGAIgASgLMhsucWRyYW50LlZlY3RvclBhcmFtc0RpZmZNYXBIAEIICgZjb25maWcigwEKElNwYXJzZVZlY3RvclBhcmFtcxItCgVpbmRleBgBIAEoCzIZLnFkcmFudC5TcGFyc2VJbmRleENvbmZpZ0gAiAEBEicKCG1vZGlmaWVyGAIgASgOMhAucWRyYW50Lk1vZGlmaWVySAGIAQFCCAoGX2luZGV4QgsKCV9tb2RpZmllciKOAQoSU3BhcnNlVmVjdG9yQ29uZmlnEjAKA21hcBgBIAMoCzIjLnFkcmFudC5TcGFyc2VWZWN0b3JDb25maWcuTWFwRW50cnkaRgoITWFwRW50cnkSCwoDa2V5GAEgASgJEikKBXZhbHVlGAIgASgLMhoucWRyYW50LlNwYXJzZVZlY3RvclBhcmFtczoCOAEiRgoRTXVsdGlWZWN0b3JDb25maWcSMQoKY29tcGFyYXRvchgBIAEoDjIdLnFkcmFudC5NdWx0aVZlY3RvckNvbXBhcmF0b3IiMwoYR2V0Q29sbGVjdGlvbkluZm9SZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCSIyChdDb2xsZWN0aW9uRXhpc3RzUmVxdWVzdBIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkiIgoQQ29sbGVjdGlvbkV4aXN0cxIOCgZleGlzdHMYASABKAgiUgoYQ29sbGVjdGlvbkV4aXN0c1Jlc3BvbnNlEigKBnJlc3VsdBgBIAEoCzIYLnFkcmFudC5Db2xsZWN0aW9uRXhpc3RzEgwKBHRpbWUYAiABKAEiGAoWTGlzdENvbGxlY3Rpb25zUmVxdWVzdCIlChVDb2xsZWN0aW9uRGVzY3JpcHRpb24SDAoEbmFtZRgBIAEoCSJRChlHZXRDb2xsZWN0aW9uSW5mb1Jlc3BvbnNlEiYKBnJlc3VsdBgBIAEoCzIWLnFkcmFudC5Db2xsZWN0aW9uSW5mbxIMCgR0aW1lGAIgASgBIlsKF0xpc3RDb2xsZWN0aW9uc1Jlc3BvbnNlEjIKC2NvbGxlY3Rpb25zGAEgAygLMh0ucWRyYW50LkNvbGxlY3Rpb25EZXNjcmlwdGlvbhIMCgR0aW1lGAIgASgBIoQBChZNYXhPcHRpbWl6YXRpb25UaHJlYWRzEg8KBXZhbHVlGAEgASgESAASOQoHc2V0dGluZxgCIAEoDjImLnFkcmFudC5NYXhPcHRpbWl6YXRpb25UaHJlYWRzLlNldHRpbmdIACITCgdTZXR0aW5nEggKBEF1dG8QAEIJCgd2YXJpYW50IiwKD09wdGltaXplclN0YXR1cxIKCgJvaxgBIAEoCBINCgVlcnJvchgCIAEoCSIkChFDb2xsZWN0aW9uV2FybmluZxIPCgdtZXNzYWdlGAEgASgJIvQCCg5IbnN3Q29uZmlnRGlmZhIOCgFtGAEgASgESACIAQESGQoMZWZfY29uc3RydWN0GAIgASgESAGIAQESIAoTZnVsbF9zY2FuX3RocmVzaG9sZBgDIAEoBEgCiAEBEiEKFG1heF9pbmRleGluZ190aHJlYWRzGAQgASgESAOIAQESGAoHb25fZGlzaxgFIAEoCEICGAFIBIgBARIWCglwYXlsb2FkX20YBiABKARIBYgBARIbCg5pbmxpbmVfc3RvcmFnZRgHIAEoCEgGiAEBEiMKBm1lbW9yeRgIIAEoDjIOLnFkcmFudC5NZW1vcnlIB4gBAUIECgJfbUIPCg1fZWZfY29uc3RydWN0QhYKFF9mdWxsX3NjYW5fdGhyZXNob2xkQhcKFV9tYXhfaW5kZXhpbmdfdGhyZWFkc0IKCghfb25fZGlza0IMCgpfcGF5bG9hZF9tQhEKD19pbmxpbmVfc3RvcmFnZUIJCgdfbWVtb3J5ItkBChFTcGFyc2VJbmRleENvbmZpZxIgChNmdWxsX3NjYW5fdGhyZXNob2xkGAEgASgESACIAQESGAoHb25fZGlzaxgCIAEoCEICGAFIAYgBARInCghkYXRhdHlwZRgDIAEoDjIQLnFkcmFudC5EYXRhdHlwZUgCiAEBEiMKBm1lbW9yeRgEIAEoDjIOLnFkcmFudC5NZW1vcnlIA4gBAUIWChRfZnVsbF9zY2FuX3RocmVzaG9sZEIKCghfb25fZGlza0ILCglfZGF0YXR5cGVCCQoHX21lbW9yeSKvAQoNV2FsQ29uZmlnRGlmZhIcCg93YWxfY2FwYWNpdHlfbWIYASABKARIAIgBARIfChJ3YWxfc2VnbWVudHNfYWhlYWQYAiABKARIAYgBARIeChF3YWxfcmV0YWluX2Nsb3NlZBgDIAEoBEgCiAEBQhIKEF93YWxfY2FwYWNpdHlfbWJCFQoTX3dhbF9zZWdtZW50c19haGVhZEIUChJfd2FsX3JldGFpbl9jbG9zZWQioAUKFE9wdGltaXplcnNDb25maWdEaWZmEh4KEWRlbGV0ZWRfdGhyZXNob2xkGAEgASgBSACIAQESJQoYdmFjdXVtX21pbl92ZWN0b3JfbnVtYmVyGAIgASgESAGIAQESIwoWZGVmYXVsdF9zZWdtZW50X251bWJlchgDIAEoBEgCiAEBEh0KEG1heF9zZWdtZW50X3NpemUYBCABKARIA4gBARIdChBtZW1tYXBfdGhyZXNob2xkGAUgASgESASIAQESHwoSaW5kZXhpbmdfdGhyZXNob2xkGAYgASgESAWIAQESHwoSZmx1c2hfaW50ZXJ2YWxfc2VjGAcgASgESAaIAQESMAojZGVwcmVjYXRlZF9tYXhfb3B0aW1pemF0aW9uX3RocmVhZHMYCCABKARIB4gBARJFChhtYXhfb3B0aW1pemF0aW9uX3RocmVhZHMYCSABKAsyHi5xZHJhbnQuTWF4T3B0aW1pemF0aW9uVGhyZWFkc0gIiAEBEiAKE3ByZXZlbnRfdW5vcHRpbWl6ZWQYCiABKAhICYgBAUIUChJfZGVsZXRlZF90aHJlc2hvbGRCGwoZX3ZhY3V1bV9taW5fdmVjdG9yX251bWJlckIZChdfZGVmYXVsdF9zZWdtZW50X251bWJlckITChFfbWF4X3NlZ21lbnRfc2l6ZUITChFfbWVtbWFwX3RocmVzaG9sZEIVChNfaW5kZXhpbmdfdGhyZXNob2xkQhUKE19mbHVzaF9pbnRlcnZhbF9zZWNCJgokX2RlcHJlY2F0ZWRfbWF4X29wdGltaXphdGlvbl90aHJlYWRzQhsKGV9tYXhfb3B0aW1pemF0aW9uX3RocmVhZHNCFgoUX3ByZXZlbnRfdW5vcHRpbWl6ZWQivAEKElNjYWxhclF1YW50aXphdGlvbhImCgR0eXBlGAEgASgOMhgucWRyYW50LlF1YW50aXphdGlvblR5cGUSFQoIcXVhbnRpbGUYAiABKAJIAIgBARIbCgphbHdheXNfcmFtGAMgASgIQgIYAUgBiAEBEiMKBm1lbW9yeRgEIAEoDjIOLnFkcmFudC5NZW1vcnlIAogBAUILCglfcXVhbnRpbGVCDQoLX2Fsd2F5c19yYW1CCQoHX21lbW9yeSKgAQoTUHJvZHVjdFF1YW50aXphdGlvbhItCgtjb21wcmVzc2lvbhgBIAEoDjIYLnFkcmFudC5Db21wcmVzc2lvblJhdGlvEhsKCmFsd2F5c19yYW0YAiABKAhCAhgBSACIAQESIwoGbWVtb3J5GAMgASgOMg4ucWRyYW50Lk1lbW9yeUgBiAEBQg0KC19hbHdheXNfcmFtQgkKB19tZW1vcnkitgEKH0JpbmFyeVF1YW50aXphdGlvblF1ZXJ5RW5jb2RpbmcSQgoHc2V0dGluZxgEIAEoDjIvLnFkcmFudC5CaW5hcnlRdWFudGl6YXRpb25RdWVyeUVuY29kaW5nLlNldHRpbmdIACJECgdTZXR0aW5nEgsKB0RlZmF1bHQQABIKCgZCaW5hcnkQARIPCgtTY2FsYXI0Qml0cxACEg8KC1NjYWxhcjhCaXRzEANCCQoHdmFyaWFudCKRAgoSQmluYXJ5UXVhbnRpemF0aW9uEhsKCmFsd2F5c19yYW0YASABKAhCAhgBSACIAQESOQoIZW5jb2RpbmcYAiABKA4yIi5xZHJhbnQuQmluYXJ5UXVhbnRpemF0aW9uRW5jb2RpbmdIAYgBARJECg5xdWVyeV9lbmNvZGluZxgDIAEoCzInLnFkcmFudC5CaW5hcnlRdWFudGl6YXRpb25RdWVyeUVuY29kaW5nSAKIAQESIwoGbWVtb3J5GAQgASgOMg4ucWRyYW50Lk1lbW9yeUgDiAEBQg0KC19hbHdheXNfcmFtQgsKCV9lbmNvZGluZ0IRCg9fcXVlcnlfZW5jb2RpbmdCCQoHX21lbW9yeSKmAQoRVHVyYm9RdWFudGl6YXRpb24SGwoKYWx3YXlzX3JhbRgBIAEoCEICGAFIAIgBARIsCgRiaXRzGAIgASgOMhkucWRyYW50LlR1cmJvUXVhbnRCaXRTaXplSAGIAQESIwoGbWVtb3J5GAMgASgOMg4ucWRyYW50Lk1lbW9yeUgCiAEBQg0KC19hbHdheXNfcmFtQgcKBV9iaXRzQgkKB19tZW1vcnki4QEKElF1YW50aXphdGlvbkNvbmZpZxIsCgZzY2FsYXIYASABKAsyGi5xZHJhbnQuU2NhbGFyUXVhbnRpemF0aW9uSAASLgoHcHJvZHVjdBgCIAEoCzIbLnFkcmFudC5Qcm9kdWN0UXVhbnRpemF0aW9uSAASLAoGYmluYXJ5GAMgASgLMhoucWRyYW50LkJpbmFyeVF1YW50aXphdGlvbkgAEi8KCnR1cmJvcXVhbnQYBCABKAsyGS5xZHJhbnQuVHVyYm9RdWFudGl6YXRpb25IAEIOCgxxdWFudGl6YXRpb24iCgoIRGlzYWJsZWQiiwIKFlF1YW50aXphdGlvbkNvbmZpZ0RpZmYSLAoGc2NhbGFyGAEgASgLMhoucWRyYW50LlNjYWxhclF1YW50aXphdGlvbkgAEi4KB3Byb2R1Y3QYAiABKAsyGy5xZHJhbnQuUHJvZHVjdFF1YW50aXphdGlvbkgAEiQKCGRpc2FibGVkGAMgASgLMhAucWRyYW50LkRpc2FibGVkSAASLAoGYmluYXJ5GAQgASgLMhoucWRyYW50LkJpbmFyeVF1YW50aXphdGlvbkgAEi8KCnR1cmJvcXVhbnQYBSABKAsyGS5xZHJhbnQuVHVyYm9RdWFudGl6YXRpb25IAEIOCgxxdWFudGl6YXRpb24iyQoKEFN0cmljdE1vZGVDb25maWcSFAoHZW5hYmxlZBgBIAEoCEgAiAEBEhwKD21heF9xdWVyeV9saW1pdBgCIAEoDUgBiAEBEhgKC21heF90aW1lb3V0GAMgASgNSAKIAQESKQocdW5pbmRleGVkX2ZpbHRlcmluZ19yZXRyaWV2ZRgEIAEoCEgDiAEBEicKGnVuaW5kZXhlZF9maWx0ZXJpbmdfdXBkYXRlGAUgASgISASIAQESHwoSc2VhcmNoX21heF9obnN3X2VmGAYgASgNSAWIAQESHwoSc2VhcmNoX2FsbG93X2V4YWN0GAcgASgISAaIAQESJAoXc2VhcmNoX21heF9vdmVyc2FtcGxpbmcYCCABKAJIB4gBARIhChR1cHNlcnRfbWF4X2JhdGNoc2l6ZRgJIAEoBEgIiAEBEiEKFHNlYXJjaF9tYXhfYmF0Y2hzaXplGBQgASgESAmIAQESLQogbWF4X2NvbGxlY3Rpb25fdmVjdG9yX3NpemVfYnl0ZXMYCiABKARICogBARIcCg9yZWFkX3JhdGVfbGltaXQYCyABKA1IC4gBARIdChB3cml0ZV9yYXRlX2xpbWl0GAwgASgNSAyIAQESLgohbWF4X2NvbGxlY3Rpb25fcGF5bG9hZF9zaXplX2J5dGVzGA0gASgESA2IAQESIgoVZmlsdGVyX21heF9jb25kaXRpb25zGA4gASgESA6IAQESHwoSY29uZGl0aW9uX21heF9zaXplGA8gASgESA+IAQESRAoSbXVsdGl2ZWN0b3JfY29uZmlnGBAgASgLMiMucWRyYW50LlN0cmljdE1vZGVNdWx0aXZlY3RvckNvbmZpZ0gQiAEBEjoKDXNwYXJzZV9jb25maWcYESABKAsyHi5xZHJhbnQuU3RyaWN0TW9kZVNwYXJzZUNvbmZpZ0gRiAEBEh0KEG1heF9wb2ludHNfY291bnQYEiABKARIEogBARIkChdtYXhfcGF5bG9hZF9pbmRleF9jb3VudBgTIAEoBEgTiAEBEiwKG21heF9yZXNpZGVudF9tZW1vcnlfcGVyY2VudBgVIAEoDUICGAFIFIgBAUIKCghfZW5hYmxlZEISChBfbWF4X3F1ZXJ5X2xpbWl0Qg4KDF9tYXhfdGltZW91dEIfCh1fdW5pbmRleGVkX2ZpbHRlcmluZ19yZXRyaWV2ZUIdChtfdW5pbmRleGVkX2ZpbHRlcmluZ191cGRhdGVCFQoTX3NlYXJjaF9tYXhfaG5zd19lZkIVChNfc2VhcmNoX2FsbG93X2V4YWN0QhoKGF9zZWFyY2hfbWF4X292ZXJzYW1wbGluZ0IXChVfdXBzZXJ0X21heF9iYXRjaHNpemVCFwoVX3NlYXJjaF9tYXhfYmF0Y2hzaXplQiMKIV9tYXhfY29sbGVjdGlvbl92ZWN0b3Jfc2l6ZV9ieXRlc0ISChBfcmVhZF9yYXRlX2xpbWl0QhMKEV93cml0ZV9yYXRlX2xpbWl0QiQKIl9tYXhfY29sbGVjdGlvbl9wYXlsb2FkX3NpemVfYnl0ZXNCGAoWX2ZpbHRlcl9tYXhfY29uZGl0aW9uc0IVChNfY29uZGl0aW9uX21heF9zaXplQhUKE19tdWx0aXZlY3Rvcl9jb25maWdCEAoOX3NwYXJzZV9jb25maWdCEwoRX21heF9wb2ludHNfY291bnRCGgoYX21heF9wYXlsb2FkX2luZGV4X2NvdW50Qh4KHF9tYXhfcmVzaWRlbnRfbWVtb3J5X3BlcmNlbnRKBAgWEBcisAEKFlN0cmljdE1vZGVTcGFyc2VDb25maWcSRwoNc3BhcnNlX2NvbmZpZxgBIAMoCzIwLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlQ29uZmlnLlNwYXJzZUNvbmZpZ0VudHJ5Gk0KEVNwYXJzZUNvbmZpZ0VudHJ5EgsKA2tleRgBIAEoCRInCgV2YWx1ZRgCIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlU3BhcnNlOgI4ASI6ChBTdHJpY3RNb2RlU3BhcnNlEhcKCm1heF9sZW5ndGgYCiABKARIAIgBAUINCgtfbWF4X2xlbmd0aCLOAQobU3RyaWN0TW9kZU11bHRpdmVjdG9yQ29uZmlnElYKEm11bHRpdmVjdG9yX2NvbmZpZxgBIAMoCzI6LnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3JDb25maWcuTXVsdGl2ZWN0b3JDb25maWdFbnRyeRpXChZNdWx0aXZlY3RvckNvbmZpZ0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLnFkcmFudC5TdHJpY3RNb2RlTXVsdGl2ZWN0b3I6AjgBIkEKFVN0cmljdE1vZGVNdWx0aXZlY3RvchIYCgttYXhfdmVjdG9ycxgBIAEoBEgAiAEBQg4KDF9tYXhfdmVjdG9ycyJGChRQYXlsb2FkU3RvcmFnZVBhcmFtcxIjCgZtZW1vcnkYASABKA4yDi5xZHJhbnQuTWVtb3J5SACIAQFCCQoHX21lbW9yeSLfCAoQQ3JlYXRlQ29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSMAoLaG5zd19jb25maWcYBCABKAsyFi5xZHJhbnQuSG5zd0NvbmZpZ0RpZmZIAIgBARIuCgp3YWxfY29uZmlnGAUgASgLMhUucWRyYW50LldhbENvbmZpZ0RpZmZIAYgBARI8ChFvcHRpbWl6ZXJzX2NvbmZpZxgGIAEoCzIcLnFkcmFudC5PcHRpbWl6ZXJzQ29uZmlnRGlmZkgCiAEBEhkKDHNoYXJkX251bWJlchgHIAEoDUgDiAEBEiAKD29uX2Rpc2tfcGF5bG9hZBgIIAEoCEICGAFIBIgBARIUCgd0aW1lb3V0GAkgASgESAWIAQESMgoOdmVjdG9yc19jb25maWcYCiABKAsyFS5xZHJhbnQuVmVjdG9yc0NvbmZpZ0gGiAEBEh8KEnJlcGxpY2F0aW9uX2ZhY3RvchgLIAEoDUgHiAEBEiUKGHdyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvchgMIAEoDUgIiAEBEjwKE3F1YW50aXphdGlvbl9jb25maWcYDiABKAsyGi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnSAmIAQESNAoPc2hhcmRpbmdfbWV0aG9kGA8gASgOMhYucWRyYW50LlNoYXJkaW5nTWV0aG9kSAqIAQESPgoVc3BhcnNlX3ZlY3RvcnNfY29uZmlnGBAgASgLMhoucWRyYW50LlNwYXJzZVZlY3RvckNvbmZpZ0gLiAEBEjkKEnN0cmljdF9tb2RlX2NvbmZpZxgRIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlQ29uZmlnSAyIAQESOAoIbWV0YWRhdGEYEiADKAsyJi5xZHJhbnQuQ3JlYXRlQ29sbGVjdGlvbi5NZXRhZGF0YUVudHJ5EjIKB3BheWxvYWQYEyABKAsyHC5xZHJhbnQuUGF5bG9hZFN0b3JhZ2VQYXJhbXNIDYgBARo+Cg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCDgoMX2huc3dfY29uZmlnQg0KC193YWxfY29uZmlnQhQKEl9vcHRpbWl6ZXJzX2NvbmZpZ0IPCg1fc2hhcmRfbnVtYmVyQhIKEF9vbl9kaXNrX3BheWxvYWRCCgoIX3RpbWVvdXRCEQoPX3ZlY3RvcnNfY29uZmlnQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0ISChBfc2hhcmRpbmdfbWV0aG9kQhgKFl9zcGFyc2VfdmVjdG9yc19jb25maWdCFQoTX3N0cmljdF9tb2RlX2NvbmZpZ0IKCghfcGF5bG9hZEoECAIQA0oECAMQBEoECA0QDiLsBQoQVXBkYXRlQ29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSPAoRb3B0aW1pemVyc19jb25maWcYAiABKAsyHC5xZHJhbnQuT3B0aW1pemVyc0NvbmZpZ0RpZmZIAIgBARIUCgd0aW1lb3V0GAMgASgESAGIAQESMQoGcGFyYW1zGAQgASgLMhwucWRyYW50LkNvbGxlY3Rpb25QYXJhbXNEaWZmSAKIAQESMAoLaG5zd19jb25maWcYBSABKAsyFi5xZHJhbnQuSG5zd0NvbmZpZ0RpZmZIA4gBARI2Cg52ZWN0b3JzX2NvbmZpZxgGIAEoCzIZLnFkcmFudC5WZWN0b3JzQ29uZmlnRGlmZkgEiAEBEkAKE3F1YW50aXphdGlvbl9jb25maWcYByABKAsyHi5xZHJhbnQuUXVhbnRpemF0aW9uQ29uZmlnRGlmZkgFiAEBEj4KFXNwYXJzZV92ZWN0b3JzX2NvbmZpZxgIIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JDb25maWdIBogBARI5ChJzdHJpY3RfbW9kZV9jb25maWcYCSABKAsyGC5xZHJhbnQuU3RyaWN0TW9kZUNvbmZpZ0gHiAEBEjgKCG1ldGFkYXRhGAogAygLMiYucWRyYW50LlVwZGF0ZUNvbGxlY3Rpb24uTWV0YWRhdGFFbnRyeRo+Cg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCFAoSX29wdGltaXplcnNfY29uZmlnQgoKCF90aW1lb3V0QgkKB19wYXJhbXNCDgoMX2huc3dfY29uZmlnQhEKD192ZWN0b3JzX2NvbmZpZ0IWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0IYChZfc3BhcnNlX3ZlY3RvcnNfY29uZmlnQhUKE19zdHJpY3RfbW9kZV9jb25maWciTQoQRGVsZXRlQ29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSFAoHdGltZW91dBgCIAEoBEgAiAEBQgoKCF90aW1lb3V0IjsKG0NvbGxlY3Rpb25PcGVyYXRpb25SZXNwb25zZRIOCgZyZXN1bHQYASABKAgSDAoEdGltZRgCIAEoASLwBAoQQ29sbGVjdGlvblBhcmFtcxIUCgxzaGFyZF9udW1iZXIYAyABKA0SGwoPb25fZGlza19wYXlsb2FkGAQgASgIQgIYARIyCg52ZWN0b3JzX2NvbmZpZxgFIAEoCzIVLnFkcmFudC5WZWN0b3JzQ29uZmlnSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAYgASgNSAGIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAcgASgNSAKIAQESIAoTcmVhZF9mYW5fb3V0X2ZhY3RvchgIIAEoDUgDiAEBEjQKD3NoYXJkaW5nX21ldGhvZBgJIAEoDjIWLnFkcmFudC5TaGFyZGluZ01ldGhvZEgEiAEBEj4KFXNwYXJzZV92ZWN0b3JzX2NvbmZpZxgKIAEoCzIaLnFkcmFudC5TcGFyc2VWZWN0b3JDb25maWdIBYgBARIiChVyZWFkX2Zhbl9vdXRfZGVsYXlfbXMYCyABKARIBogBARIyCgdwYXlsb2FkGAwgASgLMhwucWRyYW50LlBheWxvYWRTdG9yYWdlUGFyYW1zSAeIAQFCEQoPX3ZlY3RvcnNfY29uZmlnQhUKE19yZXBsaWNhdGlvbl9mYWN0b3JCGwoZX3dyaXRlX2NvbnNpc3RlbmN5X2ZhY3RvckIWChRfcmVhZF9mYW5fb3V0X2ZhY3RvckISChBfc2hhcmRpbmdfbWV0aG9kQhgKFl9zcGFyc2VfdmVjdG9yc19jb25maWdCGAoWX3JlYWRfZmFuX291dF9kZWxheV9tc0IKCghfcGF5bG9hZEoECAEQAkoECAIQAyKAAwoUQ29sbGVjdGlvblBhcmFtc0RpZmYSHwoScmVwbGljYXRpb25fZmFjdG9yGAEgASgNSACIAQESJQoYd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yGAIgASgNSAGIAQESIAoPb25fZGlza19wYXlsb2FkGAMgASgIQgIYAUgCiAEBEiAKE3JlYWRfZmFuX291dF9mYWN0b3IYBCABKA1IA4gBARIiChVyZWFkX2Zhbl9vdXRfZGVsYXlfbXMYBSABKARIBIgBARIyCgdwYXlsb2FkGAYgASgLMhwucWRyYW50LlBheWxvYWRTdG9yYWdlUGFyYW1zSAWIAQFCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIbChlfd3JpdGVfY29uc2lzdGVuY3lfZmFjdG9yQhIKEF9vbl9kaXNrX3BheWxvYWRCFgoUX3JlYWRfZmFuX291dF9mYWN0b3JCGAoWX3JlYWRfZmFuX291dF9kZWxheV9tc0IKCghfcGF5bG9hZCLuAwoQQ29sbGVjdGlvbkNvbmZpZxIoCgZwYXJhbXMYASABKAsyGC5xZHJhbnQuQ29sbGVjdGlvblBhcmFtcxIrCgtobnN3X2NvbmZpZxgCIAEoCzIWLnFkcmFudC5IbnN3Q29uZmlnRGlmZhI2ChBvcHRpbWl6ZXJfY29uZmlnGAMgASgLMhwucWRyYW50Lk9wdGltaXplcnNDb25maWdEaWZmEikKCndhbF9jb25maWcYBCABKAsyFS5xZHJhbnQuV2FsQ29uZmlnRGlmZhI8ChNxdWFudGl6YXRpb25fY29uZmlnGAUgASgLMhoucWRyYW50LlF1YW50aXphdGlvbkNvbmZpZ0gAiAEBEjkKEnN0cmljdF9tb2RlX2NvbmZpZxgGIAEoCzIYLnFkcmFudC5TdHJpY3RNb2RlQ29uZmlnSAGIAQESOAoIbWV0YWRhdGEYByADKAsyJi5xZHJhbnQuQ29sbGVjdGlvbkNvbmZpZy5NZXRhZGF0YUVudHJ5Gj4KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIWChRfcXVhbnRpemF0aW9uX2NvbmZpZ0IVChNfc3RyaWN0X21vZGVfY29uZmlnIvcBChJLZXl3b3JkSW5kZXhQYXJhbXMSFgoJaXNfdGVuYW50GAEgASgISACIAQESGAoHb25fZGlzaxgCIAEoCEICGAFIAYgBARIYCgtlbmFibGVfaG5zdxgDIAEoCEgCiAEBEjAKBnByZWZpeBgEIAEoCzIbLnFkcmFudC5LZXl3b3JkUHJlZml4UGFyYW1zSAOIAQESIwoGbWVtb3J5GAUgASgOMg4ucWRyYW50Lk1lbW9yeUgEiAEBQgwKCl9pc190ZW5hbnRCCgoIX29uX2Rpc2tCDgoMX2VuYWJsZV9obnN3QgkKB19wcmVmaXhCCQoHX21lbW9yeSIVChNLZXl3b3JkUHJlZml4UGFyYW1zIv4BChJJbnRlZ2VySW5kZXhQYXJhbXMSEwoGbG9va3VwGAEgASgISACIAQESEgoFcmFuZ2UYAiABKAhIAYgBARIZCgxpc19wcmluY2lwYWwYAyABKAhIAogBARIYCgdvbl9kaXNrGAQgASgIQgIYAUgDiAEBEhgKC2VuYWJsZV9obnN3GAUgASgISASIAQESIwoGbWVtb3J5GAYgASgOMg4ucWRyYW50Lk1lbW9yeUgFiAEBQgkKB19sb29rdXBCCAoGX3JhbmdlQg8KDV9pc19wcmluY2lwYWxCCgoIX29uX2Rpc2tCDgoMX2VuYWJsZV9obnN3QgkKB19tZW1vcnkivgEKEEZsb2F0SW5kZXhQYXJhbXMSGAoHb25fZGlzaxgBIAEoCEICGAFIAIgBARIZCgxpc19wcmluY2lwYWwYAiABKAhIAYgBARIYCgtlbmFibGVfaG5zdxgDIAEoCEgCiAEBEiMKBm1lbW9yeRgEIAEoDjIOLnFkcmFudC5NZW1vcnlIA4gBAUIKCghfb25fZGlza0IPCg1faXNfcHJpbmNpcGFsQg4KDF9lbmFibGVfaG5zd0IJCgdfbWVtb3J5IpABCg5HZW9JbmRleFBhcmFtcxIYCgdvbl9kaXNrGAEgASgIQgIYAUgAiAEBEhgKC2VuYWJsZV9obnN3GAIgASgISAGIAQESIwoGbWVtb3J5GAMgASgOMg4ucWRyYW50Lk1lbW9yeUgCiAEBQgoKCF9vbl9kaXNrQg4KDF9lbmFibGVfaG5zd0IJCgdfbWVtb3J5IjEKDFN0b3B3b3Jkc1NldBIRCglsYW5ndWFnZXMYASADKAkSDgoGY3VzdG9tGAIgAygJIpYECg9UZXh0SW5kZXhQYXJhbXMSKAoJdG9rZW5pemVyGAEgASgOMhUucWRyYW50LlRva2VuaXplclR5cGUSFgoJbG93ZXJjYXNlGAIgASgISACIAQESGgoNbWluX3Rva2VuX2xlbhgDIAEoBEgBiAEBEhoKDW1heF90b2tlbl9sZW4YBCABKARIAogBARIYCgdvbl9kaXNrGAUgASgIQgIYAUgDiAEBEiwKCXN0b3B3b3JkcxgGIAEoCzIULnFkcmFudC5TdG9wd29yZHNTZXRIBIgBARIcCg9waHJhc2VfbWF0Y2hpbmcYByABKAhIBYgBARIvCgdzdGVtbWVyGAggASgLMhkucWRyYW50LlN0ZW1taW5nQWxnb3JpdGhtSAaIAQESGgoNYXNjaWlfZm9sZGluZxgJIAEoCEgHiAEBEhgKC2VuYWJsZV9obnN3GAogASgISAiIAQESIwoGbWVtb3J5GAsgASgOMg4ucWRyYW50Lk1lbW9yeUgJiAEBQgwKCl9sb3dlcmNhc2VCEAoOX21pbl90b2tlbl9sZW5CEAoOX21heF90b2tlbl9sZW5CCgoIX29uX2Rpc2tCDAoKX3N0b3B3b3Jkc0ISChBfcGhyYXNlX21hdGNoaW5nQgoKCF9zdGVtbWVyQhAKDl9hc2NpaV9mb2xkaW5nQg4KDF9lbmFibGVfaG5zd0IJCgdfbWVtb3J5In8KEVN0ZW1taW5nQWxnb3JpdGhtEioKCHNub3diYWxsGAEgASgLMhYucWRyYW50LlNub3diYWxsUGFyYW1zSAASKwoIZGlzYWJsZWQYAiABKAsyFy5xZHJhbnQuRGlzYWJsZWRTdGVtbWVySABCEQoPc3RlbW1pbmdfcGFyYW1zIiIKDlNub3diYWxsUGFyYW1zEhAKCGxhbmd1YWdlGAEgASgJIhEKD0Rpc2FibGVkU3RlbW1lciKRAQoPQm9vbEluZGV4UGFyYW1zEhgKB29uX2Rpc2sYASABKAhCAhgBSACIAQESGAoLZW5hYmxlX2huc3cYAiABKAhIAYgBARIjCgZtZW1vcnkYAyABKA4yDi5xZHJhbnQuTWVtb3J5SAKIAQFCCgoIX29uX2Rpc2tCDgoMX2VuYWJsZV9obnN3QgkKB19tZW1vcnkiwQEKE0RhdGV0aW1lSW5kZXhQYXJhbXMSGAoHb25fZGlzaxgBIAEoCEICGAFIAIgBARIZCgxpc19wcmluY2lwYWwYAiABKAhIAYgBARIYCgtlbmFibGVfaG5zdxgDIAEoCEgCiAEBEiMKBm1lbW9yeRgEIAEoDjIOLnFkcmFudC5NZW1vcnlIA4gBAUIKCghfb25fZGlza0IPCg1faXNfcHJpbmNpcGFsQg4KDF9lbmFibGVfaG5zd0IJCgdfbWVtb3J5IrcBCg9VdWlkSW5kZXhQYXJhbXMSFgoJaXNfdGVuYW50GAEgASgISACIAQESGAoHb25fZGlzaxgCIAEoCEICGAFIAYgBARIYCgtlbmFibGVfaG5zdxgDIAEoCEgCiAEBEiMKBm1lbW9yeRgEIAEoDjIOLnFkcmFudC5NZW1vcnlIA4gBAUIMCgpfaXNfdGVuYW50QgoKCF9vbl9kaXNrQg4KDF9lbmFibGVfaG5zd0IJCgdfbWVtb3J5IugDChJQYXlsb2FkSW5kZXhQYXJhbXMSOgoUa2V5d29yZF9pbmRleF9wYXJhbXMYAyABKAsyGi5xZHJhbnQuS2V5d29yZEluZGV4UGFyYW1zSAASOgoUaW50ZWdlcl9pbmRleF9wYXJhbXMYAiABKAsyGi5xZHJhbnQuSW50ZWdlckluZGV4UGFyYW1zSAASNgoSZmxvYXRfaW5kZXhfcGFyYW1zGAQgASgLMhgucWRyYW50LkZsb2F0SW5kZXhQYXJhbXNIABIyChBnZW9faW5kZXhfcGFyYW1zGAUgASgLMhYucWRyYW50Lkdlb0luZGV4UGFyYW1zSAASNAoRdGV4dF9pbmRleF9wYXJhbXMYASABKAsyFy5xZHJhbnQuVGV4dEluZGV4UGFyYW1zSAASNAoRYm9vbF9pbmRleF9wYXJhbXMYBiABKAsyFy5xZHJhbnQuQm9vbEluZGV4UGFyYW1zSAASPAoVZGF0ZXRpbWVfaW5kZXhfcGFyYW1zGAcgASgLMhsucWRyYW50LkRhdGV0aW1lSW5kZXhQYXJhbXNIABI0ChF1dWlkX2luZGV4X3BhcmFtcxgIIAEoCzIXLnFkcmFudC5VdWlkSW5kZXhQYXJhbXNIAEIOCgxpbmRleF9wYXJhbXMinQEKEVBheWxvYWRTY2hlbWFJbmZvEiwKCWRhdGFfdHlwZRgBIAEoDjIZLnFkcmFudC5QYXlsb2FkU2NoZW1hVHlwZRIvCgZwYXJhbXMYAiABKAsyGi5xZHJhbnQuUGF5bG9hZEluZGV4UGFyYW1zSACIAQESEwoGcG9pbnRzGAMgASgESAGIAQFCCQoHX3BhcmFtc0IJCgdfcG9pbnRzIlMKD1VwZGF0ZVF1ZXVlSW5mbxIOCgZsZW5ndGgYASABKAQSHAoPZGVmZXJyZWRfcG9pbnRzGAIgASgESACIAQFCEgoQX2RlZmVycmVkX3BvaW50cyKbBAoOQ29sbGVjdGlvbkluZm8SKAoGc3RhdHVzGAEgASgOMhgucWRyYW50LkNvbGxlY3Rpb25TdGF0dXMSMQoQb3B0aW1pemVyX3N0YXR1cxgCIAEoCzIXLnFkcmFudC5PcHRpbWl6ZXJTdGF0dXMSFgoOc2VnbWVudHNfY291bnQYBCABKAQSKAoGY29uZmlnGAcgASgLMhgucWRyYW50LkNvbGxlY3Rpb25Db25maWcSQQoOcGF5bG9hZF9zY2hlbWEYCCADKAsyKS5xZHJhbnQuQ29sbGVjdGlvbkluZm8uUGF5bG9hZFNjaGVtYUVudHJ5EhkKDHBvaW50c19jb3VudBgJIAEoBEgAiAEBEiIKFWluZGV4ZWRfdmVjdG9yc19jb3VudBgKIAEoBEgBiAEBEisKCHdhcm5pbmdzGAsgAygLMhkucWRyYW50LkNvbGxlY3Rpb25XYXJuaW5nEi0KDHVwZGF0ZV9xdWV1ZRgMIAEoCzIXLnFkcmFudC5VcGRhdGVRdWV1ZUluZm8aTwoSUGF5bG9hZFNjaGVtYUVudHJ5EgsKA2tleRgBIAEoCRIoCgV2YWx1ZRgCIAEoCzIZLnFkcmFudC5QYXlsb2FkU2NoZW1hSW5mbzoCOAFCDwoNX3BvaW50c19jb3VudEIYChZfaW5kZXhlZF92ZWN0b3JzX2NvdW50SgQIAxAESgQIBRAGSgQIBhAHIlsKDUNoYW5nZUFsaWFzZXMSKAoHYWN0aW9ucxgBIAMoCzIXLnFkcmFudC5BbGlhc09wZXJhdGlvbnMSFAoHdGltZW91dBgCIAEoBEgAiAEBQgoKCF90aW1lb3V0IqIBCg9BbGlhc09wZXJhdGlvbnMSKwoMY3JlYXRlX2FsaWFzGAEgASgLMhMucWRyYW50LkNyZWF0ZUFsaWFzSAASKwoMcmVuYW1lX2FsaWFzGAIgASgLMhMucWRyYW50LlJlbmFtZUFsaWFzSAASKwoMZGVsZXRlX2FsaWFzGAMgASgLMhMucWRyYW50LkRlbGV0ZUFsaWFzSABCCAoGYWN0aW9uIjoKC0NyZWF0ZUFsaWFzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRISCgphbGlhc19uYW1lGAIgASgJIj0KC1JlbmFtZUFsaWFzEhYKDm9sZF9hbGlhc19uYW1lGAEgASgJEhYKDm5ld19hbGlhc19uYW1lGAIgASgJIiEKC0RlbGV0ZUFsaWFzEhIKCmFsaWFzX25hbWUYASABKAkiFAoSTGlzdEFsaWFzZXNSZXF1ZXN0IjcKHExpc3RDb2xsZWN0aW9uQWxpYXNlc1JlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJIj8KEEFsaWFzRGVzY3JpcHRpb24SEgoKYWxpYXNfbmFtZRgBIAEoCRIXCg9jb2xsZWN0aW9uX25hbWUYAiABKAkiTgoTTGlzdEFsaWFzZXNSZXNwb25zZRIpCgdhbGlhc2VzGAEgAygLMhgucWRyYW50LkFsaWFzRGVzY3JpcHRpb24SDAoEdGltZRgCIAEoASI3ChxDb2xsZWN0aW9uQ2x1c3RlckluZm9SZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCSI2CghTaGFyZEtleRIRCgdrZXl3b3JkGAEgASgJSAASEAoGbnVtYmVyGAIgASgESABCBQoDa2V5IpUBCg5Mb2NhbFNoYXJkSW5mbxIQCghzaGFyZF9pZBgBIAEoDRIUCgxwb2ludHNfY291bnQYAiABKAQSIwoFc3RhdGUYAyABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlEigKCXNoYXJkX2tleRgEIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgwKCl9zaGFyZF9rZXkikQEKD1JlbW90ZVNoYXJkSW5mbxIQCghzaGFyZF9pZBgBIAEoDRIPCgdwZWVyX2lkGAIgASgEEiMKBXN0YXRlGAMgASgOMhQucWRyYW50LlJlcGxpY2FTdGF0ZRIoCglzaGFyZF9rZXkYBCABKAsyEC5xZHJhbnQuU2hhcmRLZXlIAIgBAUIMCgpfc2hhcmRfa2V5IncKEVNoYXJkVHJhbnNmZXJJbmZvEhAKCHNoYXJkX2lkGAEgASgNEhgKC3RvX3NoYXJkX2lkGAUgASgNSACIAQESDAoEZnJvbRgCIAEoBBIKCgJ0bxgDIAEoBBIMCgRzeW5jGAQgASgIQg4KDF90b19zaGFyZF9pZCKbAQoOUmVzaGFyZGluZ0luZm8SEAoIc2hhcmRfaWQYASABKA0SDwoHcGVlcl9pZBgCIAEoBBIoCglzaGFyZF9rZXkYAyABKAsyEC5xZHJhbnQuU2hhcmRLZXlIAIgBARIuCglkaXJlY3Rpb24YBCABKA4yGy5xZHJhbnQuUmVzaGFyZGluZ0RpcmVjdGlvbkIMCgpfc2hhcmRfa2V5IpwCCh1Db2xsZWN0aW9uQ2x1c3RlckluZm9SZXNwb25zZRIPCgdwZWVyX2lkGAEgASgEEhMKC3NoYXJkX2NvdW50GAIgASgEEiwKDGxvY2FsX3NoYXJkcxgDIAMoCzIWLnFkcmFudC5Mb2NhbFNoYXJkSW5mbxIuCg1yZW1vdGVfc2hhcmRzGAQgAygLMhcucWRyYW50LlJlbW90ZVNoYXJkSW5mbxIyCg9zaGFyZF90cmFuc2ZlcnMYBSADKAsyGS5xZHJhbnQuU2hhcmRUcmFuc2ZlckluZm8SNQoVcmVzaGFyZGluZ19vcGVyYXRpb25zGAYgAygLMhYucWRyYW50LlJlc2hhcmRpbmdJbmZvEgwKBHRpbWUYByABKAEirgEKCU1vdmVTaGFyZBIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEjAKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kSAGIAQFCDgoMX3RvX3NoYXJkX2lkQgkKB19tZXRob2QiswEKDlJlcGxpY2F0ZVNoYXJkEhAKCHNoYXJkX2lkGAEgASgNEhgKC3RvX3NoYXJkX2lkGAUgASgNSACIAQESFAoMZnJvbV9wZWVyX2lkGAIgASgEEhIKCnRvX3BlZXJfaWQYAyABKAQSMAoGbWV0aG9kGAQgASgOMhsucWRyYW50LlNoYXJkVHJhbnNmZXJNZXRob2RIAYgBAUIOCgxfdG9fc2hhcmRfaWRCCQoHX21ldGhvZCJ6ChJBYm9ydFNoYXJkVHJhbnNmZXISEAoIc2hhcmRfaWQYASABKA0SGAoLdG9fc2hhcmRfaWQYBCABKA1IAIgBARIUCgxmcm9tX3BlZXJfaWQYAiABKAQSEgoKdG9fcGVlcl9pZBgDIAEoBEIOCgxfdG9fc2hhcmRfaWQipAEKD1Jlc3RhcnRUcmFuc2ZlchIQCghzaGFyZF9pZBgBIAEoDRIYCgt0b19zaGFyZF9pZBgFIAEoDUgAiAEBEhQKDGZyb21fcGVlcl9pZBgCIAEoBBISCgp0b19wZWVyX2lkGAMgASgEEisKBm1ldGhvZBgEIAEoDjIbLnFkcmFudC5TaGFyZFRyYW5zZmVyTWV0aG9kQg4KDF90b19zaGFyZF9pZCKTAQoPUmVwbGljYXRlUG9pbnRzEigKDmZyb21fc2hhcmRfa2V5GAEgASgLMhAucWRyYW50LlNoYXJkS2V5EiYKDHRvX3NoYXJkX2tleRgCIAEoCzIQLnFkcmFudC5TaGFyZEtleRIjCgZmaWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVySACIAQFCCQoHX2ZpbHRlciIsCgdSZXBsaWNhEhAKCHNoYXJkX2lkGAEgASgNEg8KB3BlZXJfaWQYAiABKAQi8gEKDkNyZWF0ZVNoYXJkS2V5EiMKCXNoYXJkX2tleRgBIAEoCzIQLnFkcmFudC5TaGFyZEtleRIaCg1zaGFyZHNfbnVtYmVyGAIgASgNSACIAQESHwoScmVwbGljYXRpb25fZmFjdG9yGAMgASgNSAGIAQESEQoJcGxhY2VtZW50GAQgAygEEjAKDWluaXRpYWxfc3RhdGUYBSABKA4yFC5xZHJhbnQuUmVwbGljYVN0YXRlSAKIAQFCEAoOX3NoYXJkc19udW1iZXJCFQoTX3JlcGxpY2F0aW9uX2ZhY3RvckIQCg5faW5pdGlhbF9zdGF0ZSI1Cg5EZWxldGVTaGFyZEtleRIjCglzaGFyZF9rZXkYASABKAsyEC5xZHJhbnQuU2hhcmRLZXki+gMKI1VwZGF0ZUNvbGxlY3Rpb25DbHVzdGVyU2V0dXBSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgptb3ZlX3NoYXJkGAIgASgLMhEucWRyYW50Lk1vdmVTaGFyZEgAEjEKD3JlcGxpY2F0ZV9zaGFyZBgDIAEoCzIWLnFkcmFudC5SZXBsaWNhdGVTaGFyZEgAEjQKDmFib3J0X3RyYW5zZmVyGAQgASgLMhoucWRyYW50LkFib3J0U2hhcmRUcmFuc2ZlckgAEicKDGRyb3BfcmVwbGljYRgFIAEoCzIPLnFkcmFudC5SZXBsaWNhSAASMgoQY3JlYXRlX3NoYXJkX2tleRgHIAEoCzIWLnFkcmFudC5DcmVhdGVTaGFyZEtleUgAEjIKEGRlbGV0ZV9zaGFyZF9rZXkYCCABKAsyFi5xZHJhbnQuRGVsZXRlU2hhcmRLZXlIABIzChByZXN0YXJ0X3RyYW5zZmVyGAkgASgLMhcucWRyYW50LlJlc3RhcnRUcmFuc2ZlckgAEjMKEHJlcGxpY2F0ZV9wb2ludHMYCiABKAsyFy5xZHJhbnQuUmVwbGljYXRlUG9pbnRzSAASFAoHdGltZW91dBgGIAEoBEgBiAEBQgsKCW9wZXJhdGlvbkIKCghfdGltZW91dCJECiRVcGRhdGVDb2xsZWN0aW9uQ2x1c3RlclNldHVwUmVzcG9uc2USDgoGcmVzdWx0GAEgASgIEgwKBHRpbWUYAiABKAEiewoVQ3JlYXRlU2hhcmRLZXlSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCgdyZXF1ZXN0GAIgASgLMhYucWRyYW50LkNyZWF0ZVNoYXJkS2V5EhQKB3RpbWVvdXQYAyABKARIAIgBAUIKCghfdGltZW91dCJ7ChVEZWxldGVTaGFyZEtleVJlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEicKB3JlcXVlc3QYAiABKAsyFi5xZHJhbnQuRGVsZXRlU2hhcmRLZXkSFAoHdGltZW91dBgDIAEoBEgAiAEBQgoKCF90aW1lb3V0Ii8KFExpc3RTaGFyZEtleXNSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCSI2ChZDcmVhdGVTaGFyZEtleVJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCBIMCgR0aW1lGAIgASgBIjYKFkRlbGV0ZVNoYXJkS2V5UmVzcG9uc2USDgoGcmVzdWx0GAEgASgIEgwKBHRpbWUYAiABKAEiNAoTU2hhcmRLZXlEZXNjcmlwdGlvbhIdCgNrZXkYASABKAsyEC5xZHJhbnQuU2hhcmRLZXkiVgoVTGlzdFNoYXJkS2V5c1Jlc3BvbnNlEi8KCnNoYXJkX2tleXMYASADKAsyGy5xZHJhbnQuU2hhcmRLZXlEZXNjcmlwdGlvbhIMCgR0aW1lGAIgASgBKkgKCERhdGF0eXBlEgsKB0RlZmF1bHQQABILCgdGbG9hdDMyEAESCQoFVWludDgQAhILCgdGbG9hdDE2EAMSCgoGVHVyYm80EAQqPQoGTWVtb3J5EhEKDU1lbW9yeVVua25vd24QABIICgRDb2xkEAESCgoGQ2FjaGVkEAISCgoGUGlubmVkEAMqHQoITW9kaWZpZXISCAoETm9uZRAAEgcKA0lkZhABKiMKFU11bHRpVmVjdG9yQ29tcGFyYXRvchIKCgZNYXhTaW0QACpPCghEaXN0YW5jZRITCg9Vbmtub3duRGlzdGFuY2UQABIKCgZDb3NpbmUQARIKCgZFdWNsaWQQAhIHCgNEb3QQAxINCglNYW5oYXR0YW4QBCpZChBDb2xsZWN0aW9uU3RhdHVzEhsKF1Vua25vd25Db2xsZWN0aW9uU3RhdHVzEAASCQoFR3JlZW4QARIKCgZZZWxsb3cQAhIHCgNSZWQQAxIICgRHcmV5EAQqfgoRUGF5bG9hZFNjaGVtYVR5cGUSDwoLVW5rbm93blR5cGUQABILCgdLZXl3b3JkEAESCwoHSW50ZWdlchACEgkKBUZsb2F0EAMSBwoDR2VvEAQSCAoEVGV4dBAFEggKBEJvb2wQBhIMCghEYXRldGltZRAHEggKBFV1aWQQCCo1ChBRdWFudGl6YXRpb25UeXBlEhcKE1Vua25vd25RdWFudGl6YXRpb24QABIICgRJbnQ4EAEqPQoQQ29tcHJlc3Npb25SYXRpbxIGCgJ4NBAAEgYKAng4EAESBwoDeDE2EAISBwoDeDMyEAMSBwoDeDY0EAQqSQoaQmluYXJ5UXVhbnRpemF0aW9uRW5jb2RpbmcSCgoGT25lQml0EAASCwoHVHdvQml0cxABEhIKDk9uZUFuZEhhbGZCaXRzEAIqQQoRVHVyYm9RdWFudEJpdFNpemUSCQoFQml0czEQABILCgdCaXRzMV81EAESCQoFQml0czIQAhIJCgVCaXRzNBADKiYKDlNoYXJkaW5nTWV0aG9kEggKBEF1dG8QABIKCgZDdXN0b20QASpUCg1Ub2tlbml6ZXJUeXBlEgsKB1Vua25vd24QABIKCgZQcmVmaXgQARIOCgpXaGl0ZXNwYWNlEAISCAoEV29yZBADEhAKDE11bHRpbGluZ3VhbBAEKsEBCgxSZXBsaWNhU3RhdGUSCgoGQWN0aXZlEAASCAoERGVhZBABEgsKB1BhcnRpYWwQAhIQCgxJbml0aWFsaXppbmcQAxIMCghMaXN0ZW5lchAEEhMKD1BhcnRpYWxTbmFwc2hvdBAFEgwKCFJlY292ZXJ5EAYSDgoKUmVzaGFyZGluZxAHEhcKE1Jlc2hhcmRpbmdTY2FsZURvd24QCBIOCgpBY3RpdmVSZWFkEAkSEgoOTWFudWFsUmVjb3ZlcnkQCionChNSZXNoYXJkaW5nRGlyZWN0aW9uEgYKAlVwEAASCAoERG93bhABKmEKE1NoYXJkVHJhbnNmZXJNZXRob2QSEQoNU3RyZWFtUmVjb3JkcxAAEgwKCFNuYXBzaG90EAESDAoIV2FsRGVsdGEQAhIbChdSZXNoYXJkaW5nU3RyZWFtUmVjb3JkcxADQhWqAhJRZHJhbnQuQ2xpZW50LkdycGNiBnByb3RvMw", [file_json_with_int, file_qdrant_common]); /** * @generated from message qdrant.VectorParams @@ -40,7 +40,7 @@ export type VectorParams = Message<"qdrant.VectorParams"> & { * * @generated from field: optional qdrant.HnswConfigDiff hnsw_config = 3; */ - hnswConfig?: HnswConfigDiff; + hnswConfig?: HnswConfigDiff | undefined; /** * Configuration of vector quantization config. @@ -48,29 +48,40 @@ export type VectorParams = Message<"qdrant.VectorParams"> & { * * @generated from field: optional qdrant.QuantizationConfig quantization_config = 4; */ - quantizationConfig?: QuantizationConfig; + quantizationConfig?: QuantizationConfig | undefined; /** + * Deprecated: use `memory` instead. * If true - serve vectors from disk. * If set to false, the vectors will be loaded in RAM. * - * @generated from field: optional bool on_disk = 5; + * @generated from field: optional bool on_disk = 5 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Data type of the vectors * * @generated from field: optional qdrant.Datatype datatype = 6; */ - datatype?: Datatype; + datatype?: Datatype | undefined; /** * Configuration for multi-vector search * * @generated from field: optional qdrant.MultiVectorConfig multivector_config = 7; */ - multivectorConfig?: MultiVectorConfig; + multivectorConfig?: MultiVectorConfig | undefined; + + /** + * Memory placement of the original vector storage. + * Overrides the deprecated `on_disk` flag if both are set. + * `Pinned` is not supported for dense vector storage. + * + * @generated from field: optional qdrant.Memory memory = 8; + */ + memory?: Memory | undefined; }; /** @@ -90,22 +101,33 @@ export type VectorParamsDiff = Message<"qdrant.VectorParamsDiff"> & { * * @generated from field: optional qdrant.HnswConfigDiff hnsw_config = 1; */ - hnswConfig?: HnswConfigDiff; + hnswConfig?: HnswConfigDiff | undefined; /** * Update quantization params. If none - it is left unchanged. * * @generated from field: optional qdrant.QuantizationConfigDiff quantization_config = 2; */ - quantizationConfig?: QuantizationConfigDiff; + quantizationConfig?: QuantizationConfigDiff | undefined; /** + * Deprecated: use `memory` instead. * If true - serve vectors from disk. * If set to false, the vectors will be loaded in RAM. * - * @generated from field: optional bool on_disk = 3; + * @generated from field: optional bool on_disk = 3 [deprecated = true]; + * @deprecated + */ + onDisk?: boolean | undefined; + + /** + * Memory placement of the original vector storage. + * Overrides the deprecated `on_disk` flag if both are set. + * `Pinned` is not supported for dense vector storage. + * + * @generated from field: optional qdrant.Memory memory = 4; */ - onDisk?: boolean; + memory?: Memory | undefined; }; /** @@ -216,14 +238,14 @@ export type SparseVectorParams = Message<"qdrant.SparseVectorParams"> & { * * @generated from field: optional qdrant.SparseIndexConfig index = 1; */ - index?: SparseIndexConfig; + index?: SparseIndexConfig | undefined; /** * If set - apply modifier to the vector values * * @generated from field: optional qdrant.Modifier modifier = 2; */ - modifier?: Modifier; + modifier?: Modifier | undefined; }; /** @@ -329,7 +351,7 @@ export type CollectionExistsResponse = Message<"qdrant.CollectionExistsResponse" /** * @generated from field: qdrant.CollectionExists result = 1; */ - result?: CollectionExists; + result?: CollectionExists | undefined; /** * Time spent to process @@ -385,7 +407,7 @@ export type GetCollectionInfoResponse = Message<"qdrant.GetCollectionInfoRespons /** * @generated from field: qdrant.CollectionInfo result = 1; */ - result?: CollectionInfo; + result?: CollectionInfo | undefined; /** * Time spent to process @@ -520,7 +542,7 @@ export type HnswConfigDiff = Message<"qdrant.HnswConfigDiff"> & { * * @generated from field: optional uint64 m = 1; */ - m?: bigint; + m?: bigint | undefined; /** * Number of neighbours to consider during the index building. @@ -528,7 +550,7 @@ export type HnswConfigDiff = Message<"qdrant.HnswConfigDiff"> & { * * @generated from field: optional uint64 ef_construct = 2; */ - efConstruct?: bigint; + efConstruct?: bigint | undefined; /** * Minimal size threshold (in KiloBytes) below which full-scan is preferred over HNSW search. @@ -540,7 +562,7 @@ export type HnswConfigDiff = Message<"qdrant.HnswConfigDiff"> & { * * @generated from field: optional uint64 full_scan_threshold = 3; */ - fullScanThreshold?: bigint; + fullScanThreshold?: bigint | undefined; /** * Number of parallel threads used for background index building. @@ -550,14 +572,16 @@ export type HnswConfigDiff = Message<"qdrant.HnswConfigDiff"> & { * * @generated from field: optional uint64 max_indexing_threads = 4; */ - maxIndexingThreads?: bigint; + maxIndexingThreads?: bigint | undefined; /** + * Deprecated: use `memory` instead. * Store HNSW index on disk. If set to false, the index will be stored in RAM. * - * @generated from field: optional bool on_disk = 5; + * @generated from field: optional bool on_disk = 5 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Number of additional payload-aware links per node in the index graph. @@ -565,7 +589,7 @@ export type HnswConfigDiff = Message<"qdrant.HnswConfigDiff"> & { * * @generated from field: optional uint64 payload_m = 6; */ - payloadM?: bigint; + payloadM?: bigint | undefined; /** * Store copies of original and quantized vectors within the HNSW index file. Default: false. @@ -575,7 +599,15 @@ export type HnswConfigDiff = Message<"qdrant.HnswConfigDiff"> & { * * @generated from field: optional bool inline_storage = 7; */ - inlineStorage?: boolean; + inlineStorage?: boolean | undefined; + + /** + * Memory placement of the HNSW graph. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 8; + */ + memory?: Memory | undefined; }; /** @@ -595,21 +627,31 @@ export type SparseIndexConfig = Message<"qdrant.SparseIndexConfig"> & { * * @generated from field: optional uint64 full_scan_threshold = 1; */ - fullScanThreshold?: bigint; + fullScanThreshold?: bigint | undefined; /** + * Deprecated: use `memory` instead. * Store inverted index on disk. If set to false, the index will be stored in RAM. * - * @generated from field: optional bool on_disk = 2; + * @generated from field: optional bool on_disk = 2 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Datatype used to store weights in the index. * * @generated from field: optional qdrant.Datatype datatype = 3; */ - datatype?: Datatype; + datatype?: Datatype | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 4; + */ + memory?: Memory | undefined; }; /** @@ -628,21 +670,21 @@ export type WalConfigDiff = Message<"qdrant.WalConfigDiff"> & { * * @generated from field: optional uint64 wal_capacity_mb = 1; */ - walCapacityMb?: bigint; + walCapacityMb?: bigint | undefined; /** * Number of segments to create in advance * * @generated from field: optional uint64 wal_segments_ahead = 2; */ - walSegmentsAhead?: bigint; + walSegmentsAhead?: bigint | undefined; /** * Number of closed segments to retain * * @generated from field: optional uint64 wal_retain_closed = 3; */ - walRetainClosed?: bigint; + walRetainClosed?: bigint | undefined; }; /** @@ -662,7 +704,7 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional double deleted_threshold = 1; */ - deletedThreshold?: number; + deletedThreshold?: number | undefined; /** * The minimal number of vectors in a segment, required to perform segment @@ -670,7 +712,7 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional uint64 vacuum_min_vector_number = 2; */ - vacuumMinVectorNumber?: bigint; + vacuumMinVectorNumber?: bigint | undefined; /** * Target amount of segments the optimizer will try to keep. @@ -684,7 +726,7 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional uint64 default_segment_number = 3; */ - defaultSegmentNumber?: bigint; + defaultSegmentNumber?: bigint | undefined; /** * Deprecated: @@ -700,7 +742,7 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional uint64 max_segment_size = 4; */ - maxSegmentSize?: bigint; + maxSegmentSize?: bigint | undefined; /** * Maximum size (in kilobytes) of vectors to store in-memory per segment. @@ -714,7 +756,7 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional uint64 memmap_threshold = 5; */ - memmapThreshold?: bigint; + memmapThreshold?: bigint | undefined; /** * Maximum size (in kilobytes) of vectors allowed for plain index, exceeding @@ -729,21 +771,21 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional uint64 indexing_threshold = 6; */ - indexingThreshold?: bigint; + indexingThreshold?: bigint | undefined; /** * Interval between forced flushes. * * @generated from field: optional uint64 flush_interval_sec = 7; */ - flushIntervalSec?: bigint; + flushIntervalSec?: bigint | undefined; /** * Deprecated in favor of `max_optimization_threads` * * @generated from field: optional uint64 deprecated_max_optimization_threads = 8; */ - deprecatedMaxOptimizationThreads?: bigint; + deprecatedMaxOptimizationThreads?: bigint | undefined; /** * Max number of threads (jobs) for running optimizations per shard. @@ -753,18 +795,22 @@ export type OptimizersConfigDiff = Message<"qdrant.OptimizersConfigDiff"> & { * * @generated from field: optional qdrant.MaxOptimizationThreads max_optimization_threads = 9; */ - maxOptimizationThreads?: MaxOptimizationThreads; + maxOptimizationThreads?: MaxOptimizationThreads | undefined; /** - * If this option is set, service will try to prevent creation of large unoptimized segments. - * When enabled, updates may be blocked at request level if there are unoptimized segments larger than indexing threshold. - * Updates will be resumed when optimization is completed and segments are optimized below the threshold. - * Using this option may lead to increased delay between submitting an update and its application. + * If enabled, the service will try to prevent the creation of large unoptimized segments. + * When enabled, new points written to segments larger than the indexing threshold are stored + * as "deferred points": they are persisted in the WAL and segments, but excluded from + * read/search results until the corresponding segments are optimized (e.g. indexed, + * quantized, or moved to mmap storage). + * Update requests with wait=true will only return after the deferred points become visible, + * which may significantly increase the perceived latency between submitting an update and its + * completion. Update requests with wait=false are not affected. * Default is disabled. * * @generated from field: optional bool prevent_unoptimized = 10; */ - preventUnoptimized?: boolean; + preventUnoptimized?: boolean | undefined; }; /** @@ -790,14 +836,24 @@ export type ScalarQuantization = Message<"qdrant.ScalarQuantization"> & { * * @generated from field: optional float quantile = 2; */ - quantile?: number; + quantile?: number | undefined; /** + * Deprecated: use `memory` instead. * If true - quantized vectors always will be stored in RAM, ignoring the config of main storage * - * @generated from field: optional bool always_ram = 3; + * @generated from field: optional bool always_ram = 3 [deprecated = true]; + * @deprecated + */ + alwaysRam?: boolean | undefined; + + /** + * Memory placement of quantized vectors. + * Overrides the deprecated `always_ram` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 4; */ - alwaysRam?: boolean; + memory?: Memory | undefined; }; /** @@ -819,11 +875,21 @@ export type ProductQuantization = Message<"qdrant.ProductQuantization"> & { compression: CompressionRatio; /** + * Deprecated: use `memory` instead. * If true - quantized vectors always will be stored in RAM, ignoring the config of main storage * - * @generated from field: optional bool always_ram = 2; + * @generated from field: optional bool always_ram = 2 [deprecated = true]; + * @deprecated + */ + alwaysRam?: boolean | undefined; + + /** + * Memory placement of quantized vectors. + * Overrides the deprecated `always_ram` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 3; */ - alwaysRam?: boolean; + memory?: Memory | undefined; }; /** @@ -892,18 +958,20 @@ export const BinaryQuantizationQueryEncoding_SettingSchema: GenEnum & { /** + * Deprecated: use `memory` instead. * If true - quantized vectors always will be stored in RAM, ignoring the config of main storage * - * @generated from field: optional bool always_ram = 1; + * @generated from field: optional bool always_ram = 1 [deprecated = true]; + * @deprecated */ - alwaysRam?: boolean; + alwaysRam?: boolean | undefined; /** * Binary quantization encoding method * * @generated from field: optional qdrant.BinaryQuantizationEncoding encoding = 2; */ - encoding?: BinaryQuantizationEncoding; + encoding?: BinaryQuantizationEncoding | undefined; /** * Asymmetric quantization configuration allows a query to have different @@ -912,7 +980,15 @@ export type BinaryQuantization = Message<"qdrant.BinaryQuantization"> & { * * @generated from field: optional qdrant.BinaryQuantizationQueryEncoding query_encoding = 3; */ - queryEncoding?: BinaryQuantizationQueryEncoding; + queryEncoding?: BinaryQuantizationQueryEncoding | undefined; + + /** + * Memory placement of quantized vectors. + * Overrides the deprecated `always_ram` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 4; + */ + memory?: Memory | undefined; }; /** @@ -927,14 +1003,25 @@ export const BinaryQuantizationSchema: GenMessage = /*@__PUR */ export type TurboQuantization = Message<"qdrant.TurboQuantization"> & { /** - * @generated from field: optional bool always_ram = 1; + * Deprecated: use `memory` instead. + * + * @generated from field: optional bool always_ram = 1 [deprecated = true]; + * @deprecated */ - alwaysRam?: boolean; + alwaysRam?: boolean | undefined; /** * @generated from field: optional qdrant.TurboQuantBitSize bits = 2; */ - bits?: TurboQuantBitSize; + bits?: TurboQuantBitSize | undefined; + + /** + * Memory placement of quantized vectors. + * Overrides the deprecated `always_ram` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 3; + */ + memory?: Memory | undefined; }; /** @@ -1054,148 +1141,150 @@ export type StrictModeConfig = Message<"qdrant.StrictModeConfig"> & { * * @generated from field: optional bool enabled = 1; */ - enabled?: boolean; + enabled?: boolean | undefined; /** * Max allowed `limit` parameter for all APIs that don't have their own max limit. * * @generated from field: optional uint32 max_query_limit = 2; */ - maxQueryLimit?: number; + maxQueryLimit?: number | undefined; /** * Max allowed `timeout` parameter. * * @generated from field: optional uint32 max_timeout = 3; */ - maxTimeout?: number; + maxTimeout?: number | undefined; /** * Allow usage of unindexed fields in retrieval based (e.g. search) filters. * * @generated from field: optional bool unindexed_filtering_retrieve = 4; */ - unindexedFilteringRetrieve?: boolean; + unindexedFilteringRetrieve?: boolean | undefined; /** * Allow usage of unindexed fields in filtered updates (e.g. delete by payload). * * @generated from field: optional bool unindexed_filtering_update = 5; */ - unindexedFilteringUpdate?: boolean; + unindexedFilteringUpdate?: boolean | undefined; /** * Max HNSW ef value allowed in search parameters. * * @generated from field: optional uint32 search_max_hnsw_ef = 6; */ - searchMaxHnswEf?: number; + searchMaxHnswEf?: number | undefined; /** * Whether exact search is allowed. * * @generated from field: optional bool search_allow_exact = 7; */ - searchAllowExact?: boolean; + searchAllowExact?: boolean | undefined; /** * Max oversampling value allowed in search * * @generated from field: optional float search_max_oversampling = 8; */ - searchMaxOversampling?: number; + searchMaxOversampling?: number | undefined; /** * Max batchsize when upserting * * @generated from field: optional uint64 upsert_max_batchsize = 9; */ - upsertMaxBatchsize?: bigint; + upsertMaxBatchsize?: bigint | undefined; /** * Max batchsize when searching * * @generated from field: optional uint64 search_max_batchsize = 20; */ - searchMaxBatchsize?: bigint; + searchMaxBatchsize?: bigint | undefined; /** * Max size of a collections vector storage in bytes, ignoring replicas. * * @generated from field: optional uint64 max_collection_vector_size_bytes = 10; */ - maxCollectionVectorSizeBytes?: bigint; + maxCollectionVectorSizeBytes?: bigint | undefined; /** * Max number of read operations per minute per replica * * @generated from field: optional uint32 read_rate_limit = 11; */ - readRateLimit?: number; + readRateLimit?: number | undefined; /** * Max number of write operations per minute per replica * * @generated from field: optional uint32 write_rate_limit = 12; */ - writeRateLimit?: number; + writeRateLimit?: number | undefined; /** * Max size of a collections payload storage in bytes, ignoring replicas. * * @generated from field: optional uint64 max_collection_payload_size_bytes = 13; */ - maxCollectionPayloadSizeBytes?: bigint; + maxCollectionPayloadSizeBytes?: bigint | undefined; /** * Max conditions a filter can have. * * @generated from field: optional uint64 filter_max_conditions = 14; */ - filterMaxConditions?: bigint; + filterMaxConditions?: bigint | undefined; /** * Max size of a condition, eg. items in `MatchAny`. * * @generated from field: optional uint64 condition_max_size = 15; */ - conditionMaxSize?: bigint; + conditionMaxSize?: bigint | undefined; /** * Multivector strict mode configuration * * @generated from field: optional qdrant.StrictModeMultivectorConfig multivector_config = 16; */ - multivectorConfig?: StrictModeMultivectorConfig; + multivectorConfig?: StrictModeMultivectorConfig | undefined; /** * Sparse vector strict mode configuration * * @generated from field: optional qdrant.StrictModeSparseConfig sparse_config = 17; */ - sparseConfig?: StrictModeSparseConfig; + sparseConfig?: StrictModeSparseConfig | undefined; /** * Max number of points estimated in a collection * * @generated from field: optional uint64 max_points_count = 18; */ - maxPointsCount?: bigint; + maxPointsCount?: bigint | undefined; /** * Max number of payload indexes in a collection * * @generated from field: optional uint64 max_payload_index_count = 19; */ - maxPayloadIndexCount?: bigint; + maxPayloadIndexCount?: bigint | undefined; /** + * Deprecated: memory is node-wide, use the global quota config instead. Removal planned for 1.21. * Reject memory-consuming update operations when process resident memory exceeds this percentage of total RAM (cgroup-aware, 1-100). * Delete-style operations are still allowed so memory can be freed. * - * @generated from field: optional uint32 max_resident_memory_percent = 21; + * @generated from field: optional uint32 max_resident_memory_percent = 21 [deprecated = true]; + * @deprecated */ - maxResidentMemoryPercent?: number; + maxResidentMemoryPercent?: number | undefined; }; /** @@ -1231,7 +1320,7 @@ export type StrictModeSparse = Message<"qdrant.StrictModeSparse"> & { * * @generated from field: optional uint64 max_length = 10; */ - maxLength?: bigint; + maxLength?: bigint | undefined; }; /** @@ -1267,7 +1356,7 @@ export type StrictModeMultivector = Message<"qdrant.StrictModeMultivector"> & { * * @generated from field: optional uint64 max_vectors = 1; */ - maxVectors?: bigint; + maxVectors?: bigint | undefined; }; /** @@ -1277,6 +1366,29 @@ export type StrictModeMultivector = Message<"qdrant.StrictModeMultivector"> & { export const StrictModeMultivectorSchema: GenMessage = /*@__PURE__*/ messageDesc(file_collections, 36); +/** + * Params of the payload storage + * + * @generated from message qdrant.PayloadStorageParams + */ +export type PayloadStorageParams = Message<"qdrant.PayloadStorageParams"> & { + /** + * Memory placement of the payload storage. + * Overrides the deprecated `on_disk_payload` flag if both are set. + * `Pinned` is not supported for payload storage. + * + * @generated from field: optional qdrant.Memory memory = 1; + */ + memory?: Memory | undefined; +}; + +/** + * Describes the message qdrant.PayloadStorageParams. + * Use `create(PayloadStorageParamsSchema)` to create a new message. + */ +export const PayloadStorageParamsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_collections, 37); + /** * @generated from message qdrant.CreateCollection */ @@ -1293,21 +1405,21 @@ export type CreateCollection = Message<"qdrant.CreateCollection"> & { * * @generated from field: optional qdrant.HnswConfigDiff hnsw_config = 4; */ - hnswConfig?: HnswConfigDiff; + hnswConfig?: HnswConfigDiff | undefined; /** * Configuration of the Write-Ahead-Log * * @generated from field: optional qdrant.WalConfigDiff wal_config = 5; */ - walConfig?: WalConfigDiff; + walConfig?: WalConfigDiff | undefined; /** * Configuration of the optimizers * * @generated from field: optional qdrant.OptimizersConfigDiff optimizers_config = 6; */ - optimizersConfig?: OptimizersConfigDiff; + optimizersConfig?: OptimizersConfigDiff | undefined; /** * Number of shards in the collection, default is 1 for standalone, otherwise @@ -1315,14 +1427,16 @@ export type CreateCollection = Message<"qdrant.CreateCollection"> & { * * @generated from field: optional uint32 shard_number = 7; */ - shardNumber?: number; + shardNumber?: number | undefined; /** + * Deprecated: use `payload.memory` instead. * If true - point's payload will not be stored in memory * - * @generated from field: optional bool on_disk_payload = 8; + * @generated from field: optional bool on_disk_payload = 8 [deprecated = true]; + * @deprecated */ - onDiskPayload?: boolean; + onDiskPayload?: boolean | undefined; /** * Wait timeout for operation commit in seconds, if not specified - default @@ -1330,56 +1444,56 @@ export type CreateCollection = Message<"qdrant.CreateCollection"> & { * * @generated from field: optional uint64 timeout = 9; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Configuration for vectors * * @generated from field: optional qdrant.VectorsConfig vectors_config = 10; */ - vectorsConfig?: VectorsConfig; + vectorsConfig?: VectorsConfig | undefined; /** * Number of replicas of each shard that network tries to maintain, default = 1 * * @generated from field: optional uint32 replication_factor = 11; */ - replicationFactor?: number; + replicationFactor?: number | undefined; /** * How many replicas should apply the operation for us to consider it successful, default = 1 * * @generated from field: optional uint32 write_consistency_factor = 12; */ - writeConsistencyFactor?: number; + writeConsistencyFactor?: number | undefined; /** * Quantization configuration of vector * * @generated from field: optional qdrant.QuantizationConfig quantization_config = 14; */ - quantizationConfig?: QuantizationConfig; + quantizationConfig?: QuantizationConfig | undefined; /** * Sharding method * * @generated from field: optional qdrant.ShardingMethod sharding_method = 15; */ - shardingMethod?: ShardingMethod; + shardingMethod?: ShardingMethod | undefined; /** * Configuration for sparse vectors * * @generated from field: optional qdrant.SparseVectorConfig sparse_vectors_config = 16; */ - sparseVectorsConfig?: SparseVectorConfig; + sparseVectorsConfig?: SparseVectorConfig | undefined; /** * Configuration for strict mode * * @generated from field: optional qdrant.StrictModeConfig strict_mode_config = 17; */ - strictModeConfig?: StrictModeConfig; + strictModeConfig?: StrictModeConfig | undefined; /** * Arbitrary JSON metadata for the collection @@ -1387,6 +1501,13 @@ export type CreateCollection = Message<"qdrant.CreateCollection"> & { * @generated from field: map metadata = 18; */ metadata: { [key: string]: Value }; + + /** + * Configuration of the payload storage + * + * @generated from field: optional qdrant.PayloadStorageParams payload = 19; + */ + payload?: PayloadStorageParams | undefined; }; /** @@ -1394,7 +1515,7 @@ export type CreateCollection = Message<"qdrant.CreateCollection"> & { * Use `create(CreateCollectionSchema)` to create a new message. */ export const CreateCollectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 37); + messageDesc(file_collections, 38); /** * @generated from message qdrant.UpdateCollection @@ -1414,7 +1535,7 @@ export type UpdateCollection = Message<"qdrant.UpdateCollection"> & { * * @generated from field: optional qdrant.OptimizersConfigDiff optimizers_config = 2; */ - optimizersConfig?: OptimizersConfigDiff; + optimizersConfig?: OptimizersConfigDiff | undefined; /** * Wait timeout for operation commit in seconds if blocking. @@ -1422,49 +1543,49 @@ export type UpdateCollection = Message<"qdrant.UpdateCollection"> & { * * @generated from field: optional uint64 timeout = 3; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * New configuration parameters for the collection * * @generated from field: optional qdrant.CollectionParamsDiff params = 4; */ - params?: CollectionParamsDiff; + params?: CollectionParamsDiff | undefined; /** * New HNSW parameters for the collection index * * @generated from field: optional qdrant.HnswConfigDiff hnsw_config = 5; */ - hnswConfig?: HnswConfigDiff; + hnswConfig?: HnswConfigDiff | undefined; /** * New vector parameters * * @generated from field: optional qdrant.VectorsConfigDiff vectors_config = 6; */ - vectorsConfig?: VectorsConfigDiff; + vectorsConfig?: VectorsConfigDiff | undefined; /** * Quantization configuration of vector * * @generated from field: optional qdrant.QuantizationConfigDiff quantization_config = 7; */ - quantizationConfig?: QuantizationConfigDiff; + quantizationConfig?: QuantizationConfigDiff | undefined; /** * New sparse vector parameters * * @generated from field: optional qdrant.SparseVectorConfig sparse_vectors_config = 8; */ - sparseVectorsConfig?: SparseVectorConfig; + sparseVectorsConfig?: SparseVectorConfig | undefined; /** * New strict mode configuration * * @generated from field: optional qdrant.StrictModeConfig strict_mode_config = 9; */ - strictModeConfig?: StrictModeConfig; + strictModeConfig?: StrictModeConfig | undefined; /** * Arbitrary JSON-like metadata for the collection, will be merged with @@ -1480,7 +1601,7 @@ export type UpdateCollection = Message<"qdrant.UpdateCollection"> & { * Use `create(UpdateCollectionSchema)` to create a new message. */ export const UpdateCollectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 38); + messageDesc(file_collections, 39); /** * @generated from message qdrant.DeleteCollection @@ -1499,7 +1620,7 @@ export type DeleteCollection = Message<"qdrant.DeleteCollection"> & { * * @generated from field: optional uint64 timeout = 2; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -1507,7 +1628,7 @@ export type DeleteCollection = Message<"qdrant.DeleteCollection"> & { * Use `create(DeleteCollectionSchema)` to create a new message. */ export const DeleteCollectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 39); + messageDesc(file_collections, 40); /** * @generated from message qdrant.CollectionOperationResponse @@ -1533,7 +1654,7 @@ export type CollectionOperationResponse = Message<"qdrant.CollectionOperationRes * Use `create(CollectionOperationResponseSchema)` to create a new message. */ export const CollectionOperationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 40); + messageDesc(file_collections, 41); /** * @generated from message qdrant.CollectionParams @@ -1547,9 +1668,11 @@ export type CollectionParams = Message<"qdrant.CollectionParams"> & { shardNumber: number; /** + * Deprecated: use `payload.memory` instead. * If true - point's payload will not be stored in memory * - * @generated from field: bool on_disk_payload = 4; + * @generated from field: bool on_disk_payload = 4 [deprecated = true]; + * @deprecated */ onDiskPayload: boolean; @@ -1558,49 +1681,56 @@ export type CollectionParams = Message<"qdrant.CollectionParams"> & { * * @generated from field: optional qdrant.VectorsConfig vectors_config = 5; */ - vectorsConfig?: VectorsConfig; + vectorsConfig?: VectorsConfig | undefined; /** * Number of replicas of each shard that network tries to maintain * * @generated from field: optional uint32 replication_factor = 6; */ - replicationFactor?: number; + replicationFactor?: number | undefined; /** * How many replicas should apply the operation for us to consider it successful * * @generated from field: optional uint32 write_consistency_factor = 7; */ - writeConsistencyFactor?: number; + writeConsistencyFactor?: number | undefined; /** * Fan-out every read request to these many additional remote nodes (and return first available response) * * @generated from field: optional uint32 read_fan_out_factor = 8; */ - readFanOutFactor?: number; + readFanOutFactor?: number | undefined; /** * Sharding method * * @generated from field: optional qdrant.ShardingMethod sharding_method = 9; */ - shardingMethod?: ShardingMethod; + shardingMethod?: ShardingMethod | undefined; /** * Configuration for sparse vectors * * @generated from field: optional qdrant.SparseVectorConfig sparse_vectors_config = 10; */ - sparseVectorsConfig?: SparseVectorConfig; + sparseVectorsConfig?: SparseVectorConfig | undefined; /** * Define number of milliseconds to wait before attempting to read from another replica. * * @generated from field: optional uint64 read_fan_out_delay_ms = 11; */ - readFanOutDelayMs?: bigint; + readFanOutDelayMs?: bigint | undefined; + + /** + * Configuration of the payload storage + * + * @generated from field: optional qdrant.PayloadStorageParams payload = 12; + */ + payload?: PayloadStorageParams | undefined; }; /** @@ -1608,7 +1738,7 @@ export type CollectionParams = Message<"qdrant.CollectionParams"> & { * Use `create(CollectionParamsSchema)` to create a new message. */ export const CollectionParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 41); + messageDesc(file_collections, 42); /** * @generated from message qdrant.CollectionParamsDiff @@ -1619,35 +1749,44 @@ export type CollectionParamsDiff = Message<"qdrant.CollectionParamsDiff"> & { * * @generated from field: optional uint32 replication_factor = 1; */ - replicationFactor?: number; + replicationFactor?: number | undefined; /** * How many replicas should apply the operation for us to consider it successful * * @generated from field: optional uint32 write_consistency_factor = 2; */ - writeConsistencyFactor?: number; + writeConsistencyFactor?: number | undefined; /** + * Deprecated: use `payload.memory` instead. * If true - point's payload will not be stored in memory * - * @generated from field: optional bool on_disk_payload = 3; + * @generated from field: optional bool on_disk_payload = 3 [deprecated = true]; + * @deprecated */ - onDiskPayload?: boolean; + onDiskPayload?: boolean | undefined; /** * Fan-out every read request to these many additional remote nodes (and return first available response) * * @generated from field: optional uint32 read_fan_out_factor = 4; */ - readFanOutFactor?: number; + readFanOutFactor?: number | undefined; /** * Define number of milliseconds to wait before attempting to read from another replica. * * @generated from field: optional uint64 read_fan_out_delay_ms = 5; */ - readFanOutDelayMs?: bigint; + readFanOutDelayMs?: bigint | undefined; + + /** + * Update params of the payload storage + * + * @generated from field: optional qdrant.PayloadStorageParams payload = 6; + */ + payload?: PayloadStorageParams | undefined; }; /** @@ -1655,7 +1794,7 @@ export type CollectionParamsDiff = Message<"qdrant.CollectionParamsDiff"> & { * Use `create(CollectionParamsDiffSchema)` to create a new message. */ export const CollectionParamsDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 42); + messageDesc(file_collections, 43); /** * @generated from message qdrant.CollectionConfig @@ -1666,42 +1805,42 @@ export type CollectionConfig = Message<"qdrant.CollectionConfig"> & { * * @generated from field: qdrant.CollectionParams params = 1; */ - params?: CollectionParams; + params?: CollectionParams | undefined; /** * Configuration of vector index * * @generated from field: qdrant.HnswConfigDiff hnsw_config = 2; */ - hnswConfig?: HnswConfigDiff; + hnswConfig?: HnswConfigDiff | undefined; /** * Configuration of the optimizers * * @generated from field: qdrant.OptimizersConfigDiff optimizer_config = 3; */ - optimizerConfig?: OptimizersConfigDiff; + optimizerConfig?: OptimizersConfigDiff | undefined; /** * Configuration of the Write-Ahead-Log * * @generated from field: qdrant.WalConfigDiff wal_config = 4; */ - walConfig?: WalConfigDiff; + walConfig?: WalConfigDiff | undefined; /** * Configuration of the vector quantization * * @generated from field: optional qdrant.QuantizationConfig quantization_config = 5; */ - quantizationConfig?: QuantizationConfig; + quantizationConfig?: QuantizationConfig | undefined; /** * Configuration of strict mode. * * @generated from field: optional qdrant.StrictModeConfig strict_mode_config = 6; */ - strictModeConfig?: StrictModeConfig; + strictModeConfig?: StrictModeConfig | undefined; /** * Arbitrary JSON metadata for the collection @@ -1716,7 +1855,7 @@ export type CollectionConfig = Message<"qdrant.CollectionConfig"> & { * Use `create(CollectionConfigSchema)` to create a new message. */ export const CollectionConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 43); + messageDesc(file_collections, 44); /** * @generated from message qdrant.KeywordIndexParams @@ -1727,14 +1866,16 @@ export type KeywordIndexParams = Message<"qdrant.KeywordIndexParams"> & { * * @generated from field: optional bool is_tenant = 1; */ - isTenant?: boolean; + isTenant?: boolean | undefined; /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 2; + * @generated from field: optional bool on_disk = 2 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -1743,7 +1884,22 @@ export type KeywordIndexParams = Message<"qdrant.KeywordIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 3; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * If set, enable prefix matching (`match: { "prefix": ... }`) on this field. + * + * @generated from field: optional qdrant.KeywordPrefixParams prefix = 4; + */ + prefix?: KeywordPrefixParams | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 5; + */ + memory?: Memory | undefined; }; /** @@ -1751,7 +1907,23 @@ export type KeywordIndexParams = Message<"qdrant.KeywordIndexParams"> & { * Use `create(KeywordIndexParamsSchema)` to create a new message. */ export const KeywordIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 44); + messageDesc(file_collections, 45); + +/** + * Prefix matching options for the keyword index. Has no options yet: + * presence of this message enables prefix matching. + * + * @generated from message qdrant.KeywordPrefixParams + */ +export type KeywordPrefixParams = Message<"qdrant.KeywordPrefixParams"> & { +}; + +/** + * Describes the message qdrant.KeywordPrefixParams. + * Use `create(KeywordPrefixParamsSchema)` to create a new message. + */ +export const KeywordPrefixParamsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_collections, 46); /** * @generated from message qdrant.IntegerIndexParams @@ -1762,14 +1934,14 @@ export type IntegerIndexParams = Message<"qdrant.IntegerIndexParams"> & { * * @generated from field: optional bool lookup = 1; */ - lookup?: boolean; + lookup?: boolean | undefined; /** * If true - support ranges filters. Default is true. * * @generated from field: optional bool range = 2; */ - range?: boolean; + range?: boolean | undefined; /** * If true - use this key to organize storage of the collection data. @@ -1778,14 +1950,16 @@ export type IntegerIndexParams = Message<"qdrant.IntegerIndexParams"> & { * * @generated from field: optional bool is_principal = 3; */ - isPrincipal?: boolean; + isPrincipal?: boolean | undefined; /** + * Deprecated: use `memory` instead. * If true - store index on disk. Default is false. * - * @generated from field: optional bool on_disk = 4; + * @generated from field: optional bool on_disk = 4 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -1794,7 +1968,15 @@ export type IntegerIndexParams = Message<"qdrant.IntegerIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 5; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 6; + */ + memory?: Memory | undefined; }; /** @@ -1802,18 +1984,20 @@ export type IntegerIndexParams = Message<"qdrant.IntegerIndexParams"> & { * Use `create(IntegerIndexParamsSchema)` to create a new message. */ export const IntegerIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 45); + messageDesc(file_collections, 47); /** * @generated from message qdrant.FloatIndexParams */ export type FloatIndexParams = Message<"qdrant.FloatIndexParams"> & { /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 1; + * @generated from field: optional bool on_disk = 1 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * If true - use this key to organize storage of the collection data. @@ -1821,7 +2005,7 @@ export type FloatIndexParams = Message<"qdrant.FloatIndexParams"> & { * * @generated from field: optional bool is_principal = 2; */ - isPrincipal?: boolean; + isPrincipal?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -1830,7 +2014,15 @@ export type FloatIndexParams = Message<"qdrant.FloatIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 3; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 4; + */ + memory?: Memory | undefined; }; /** @@ -1838,18 +2030,20 @@ export type FloatIndexParams = Message<"qdrant.FloatIndexParams"> & { * Use `create(FloatIndexParamsSchema)` to create a new message. */ export const FloatIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 46); + messageDesc(file_collections, 48); /** * @generated from message qdrant.GeoIndexParams */ export type GeoIndexParams = Message<"qdrant.GeoIndexParams"> & { /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 1; + * @generated from field: optional bool on_disk = 1 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -1858,7 +2052,15 @@ export type GeoIndexParams = Message<"qdrant.GeoIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 2; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 3; + */ + memory?: Memory | undefined; }; /** @@ -1866,7 +2068,7 @@ export type GeoIndexParams = Message<"qdrant.GeoIndexParams"> & { * Use `create(GeoIndexParamsSchema)` to create a new message. */ export const GeoIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 47); + messageDesc(file_collections, 49); /** * @generated from message qdrant.StopwordsSet @@ -1892,7 +2094,7 @@ export type StopwordsSet = Message<"qdrant.StopwordsSet"> & { * Use `create(StopwordsSetSchema)` to create a new message. */ export const StopwordsSetSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 48); + messageDesc(file_collections, 50); /** * @generated from message qdrant.TextIndexParams @@ -1910,49 +2112,51 @@ export type TextIndexParams = Message<"qdrant.TextIndexParams"> & { * * @generated from field: optional bool lowercase = 2; */ - lowercase?: boolean; + lowercase?: boolean | undefined; /** * Minimal token length * * @generated from field: optional uint64 min_token_len = 3; */ - minTokenLen?: bigint; + minTokenLen?: bigint | undefined; /** * Maximal token length * * @generated from field: optional uint64 max_token_len = 4; */ - maxTokenLen?: bigint; + maxTokenLen?: bigint | undefined; /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 5; + * @generated from field: optional bool on_disk = 5 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Stopwords for the text index * * @generated from field: optional qdrant.StopwordsSet stopwords = 6; */ - stopwords?: StopwordsSet; + stopwords?: StopwordsSet | undefined; /** * If true - support phrase matching. * * @generated from field: optional bool phrase_matching = 7; */ - phraseMatching?: boolean; + phraseMatching?: boolean | undefined; /** * Set an algorithm for stemming. * * @generated from field: optional qdrant.StemmingAlgorithm stemmer = 8; */ - stemmer?: StemmingAlgorithm; + stemmer?: StemmingAlgorithm | undefined; /** * If true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao"). @@ -1960,7 +2164,7 @@ export type TextIndexParams = Message<"qdrant.TextIndexParams"> & { * * @generated from field: optional bool ascii_folding = 9; */ - asciiFolding?: boolean; + asciiFolding?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -1969,7 +2173,15 @@ export type TextIndexParams = Message<"qdrant.TextIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 10; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 11; + */ + memory?: Memory | undefined; }; /** @@ -1977,7 +2189,7 @@ export type TextIndexParams = Message<"qdrant.TextIndexParams"> & { * Use `create(TextIndexParamsSchema)` to create a new message. */ export const TextIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 49); + messageDesc(file_collections, 51); /** * @generated from message qdrant.StemmingAlgorithm @@ -1994,6 +2206,14 @@ export type StemmingAlgorithm = Message<"qdrant.StemmingAlgorithm"> & { */ value: SnowballParams; case: "snowball"; + } | { + /** + * Explicitly disable stemming (overrides the language default) + * + * @generated from field: qdrant.DisabledStemmer disabled = 2; + */ + value: DisabledStemmer; + case: "disabled"; } | { case: undefined; value?: undefined }; }; @@ -2002,7 +2222,7 @@ export type StemmingAlgorithm = Message<"qdrant.StemmingAlgorithm"> & { * Use `create(StemmingAlgorithmSchema)` to create a new message. */ export const StemmingAlgorithmSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 50); + messageDesc(file_collections, 52); /** * @generated from message qdrant.SnowballParams @@ -2021,18 +2241,35 @@ export type SnowballParams = Message<"qdrant.SnowballParams"> & { * Use `create(SnowballParamsSchema)` to create a new message. */ export const SnowballParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 51); + messageDesc(file_collections, 53); + +/** + * Marker selecting the "no stemming" algorithm. + * + * @generated from message qdrant.DisabledStemmer + */ +export type DisabledStemmer = Message<"qdrant.DisabledStemmer"> & { +}; + +/** + * Describes the message qdrant.DisabledStemmer. + * Use `create(DisabledStemmerSchema)` to create a new message. + */ +export const DisabledStemmerSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_collections, 54); /** * @generated from message qdrant.BoolIndexParams */ export type BoolIndexParams = Message<"qdrant.BoolIndexParams"> & { /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 1; + * @generated from field: optional bool on_disk = 1 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -2041,7 +2278,15 @@ export type BoolIndexParams = Message<"qdrant.BoolIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 2; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 3; + */ + memory?: Memory | undefined; }; /** @@ -2049,18 +2294,20 @@ export type BoolIndexParams = Message<"qdrant.BoolIndexParams"> & { * Use `create(BoolIndexParamsSchema)` to create a new message. */ export const BoolIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 52); + messageDesc(file_collections, 55); /** * @generated from message qdrant.DatetimeIndexParams */ export type DatetimeIndexParams = Message<"qdrant.DatetimeIndexParams"> & { /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 1; + * @generated from field: optional bool on_disk = 1 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * If true - use this key to organize storage of the collection data. @@ -2068,7 +2315,7 @@ export type DatetimeIndexParams = Message<"qdrant.DatetimeIndexParams"> & { * * @generated from field: optional bool is_principal = 2; */ - isPrincipal?: boolean; + isPrincipal?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -2077,7 +2324,15 @@ export type DatetimeIndexParams = Message<"qdrant.DatetimeIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 3; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 4; + */ + memory?: Memory | undefined; }; /** @@ -2085,7 +2340,7 @@ export type DatetimeIndexParams = Message<"qdrant.DatetimeIndexParams"> & { * Use `create(DatetimeIndexParamsSchema)` to create a new message. */ export const DatetimeIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 53); + messageDesc(file_collections, 56); /** * @generated from message qdrant.UuidIndexParams @@ -2096,14 +2351,16 @@ export type UuidIndexParams = Message<"qdrant.UuidIndexParams"> & { * * @generated from field: optional bool is_tenant = 1; */ - isTenant?: boolean; + isTenant?: boolean | undefined; /** + * Deprecated: use `memory` instead. * If true - store index on disk. * - * @generated from field: optional bool on_disk = 2; + * @generated from field: optional bool on_disk = 2 [deprecated = true]; + * @deprecated */ - onDisk?: boolean; + onDisk?: boolean | undefined; /** * Enable HNSW graph building for this payload field. @@ -2112,7 +2369,15 @@ export type UuidIndexParams = Message<"qdrant.UuidIndexParams"> & { * * @generated from field: optional bool enable_hnsw = 3; */ - enableHnsw?: boolean; + enableHnsw?: boolean | undefined; + + /** + * Memory placement of the index. + * Overrides the deprecated `on_disk` flag if both are set. + * + * @generated from field: optional qdrant.Memory memory = 4; + */ + memory?: Memory | undefined; }; /** @@ -2120,7 +2385,7 @@ export type UuidIndexParams = Message<"qdrant.UuidIndexParams"> & { * Use `create(UuidIndexParamsSchema)` to create a new message. */ export const UuidIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 54); + messageDesc(file_collections, 57); /** * @generated from message qdrant.PayloadIndexParams @@ -2201,7 +2466,7 @@ export type PayloadIndexParams = Message<"qdrant.PayloadIndexParams"> & { * Use `create(PayloadIndexParamsSchema)` to create a new message. */ export const PayloadIndexParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 55); + messageDesc(file_collections, 58); /** * @generated from message qdrant.PayloadSchemaInfo @@ -2219,14 +2484,14 @@ export type PayloadSchemaInfo = Message<"qdrant.PayloadSchemaInfo"> & { * * @generated from field: optional qdrant.PayloadIndexParams params = 2; */ - params?: PayloadIndexParams; + params?: PayloadIndexParams | undefined; /** * Number of points indexed within this field * * @generated from field: optional uint64 points = 3; */ - points?: bigint; + points?: bigint | undefined; }; /** @@ -2234,7 +2499,7 @@ export type PayloadSchemaInfo = Message<"qdrant.PayloadSchemaInfo"> & { * Use `create(PayloadSchemaInfoSchema)` to create a new message. */ export const PayloadSchemaInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 56); + messageDesc(file_collections, 59); /** * @generated from message qdrant.UpdateQueueInfo @@ -2252,7 +2517,7 @@ export type UpdateQueueInfo = Message<"qdrant.UpdateQueueInfo"> & { * * @generated from field: optional uint64 deferred_points = 2; */ - deferredPoints?: bigint; + deferredPoints?: bigint | undefined; }; /** @@ -2260,7 +2525,7 @@ export type UpdateQueueInfo = Message<"qdrant.UpdateQueueInfo"> & { * Use `create(UpdateQueueInfoSchema)` to create a new message. */ export const UpdateQueueInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 57); + messageDesc(file_collections, 60); /** * @generated from message qdrant.CollectionInfo @@ -2278,7 +2543,7 @@ export type CollectionInfo = Message<"qdrant.CollectionInfo"> & { * * @generated from field: qdrant.OptimizerStatus optimizer_status = 2; */ - optimizerStatus?: OptimizerStatus; + optimizerStatus?: OptimizerStatus | undefined; /** * Number of independent segments @@ -2292,7 +2557,7 @@ export type CollectionInfo = Message<"qdrant.CollectionInfo"> & { * * @generated from field: qdrant.CollectionConfig config = 7; */ - config?: CollectionConfig; + config?: CollectionConfig | undefined; /** * Collection data types @@ -2306,14 +2571,14 @@ export type CollectionInfo = Message<"qdrant.CollectionInfo"> & { * * @generated from field: optional uint64 points_count = 9; */ - pointsCount?: bigint; + pointsCount?: bigint | undefined; /** * Approximate number of indexed vectors in the collection. * * @generated from field: optional uint64 indexed_vectors_count = 10; */ - indexedVectorsCount?: bigint; + indexedVectorsCount?: bigint | undefined; /** * Warnings related to the collection @@ -2327,7 +2592,7 @@ export type CollectionInfo = Message<"qdrant.CollectionInfo"> & { * * @generated from field: qdrant.UpdateQueueInfo update_queue = 12; */ - updateQueue?: UpdateQueueInfo; + updateQueue?: UpdateQueueInfo | undefined; }; /** @@ -2335,7 +2600,7 @@ export type CollectionInfo = Message<"qdrant.CollectionInfo"> & { * Use `create(CollectionInfoSchema)` to create a new message. */ export const CollectionInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 58); + messageDesc(file_collections, 61); /** * @generated from message qdrant.ChangeAliases @@ -2354,7 +2619,7 @@ export type ChangeAliases = Message<"qdrant.ChangeAliases"> & { * * @generated from field: optional uint64 timeout = 2; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -2362,7 +2627,7 @@ export type ChangeAliases = Message<"qdrant.ChangeAliases"> & { * Use `create(ChangeAliasesSchema)` to create a new message. */ export const ChangeAliasesSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 59); + messageDesc(file_collections, 62); /** * @generated from message qdrant.AliasOperations @@ -2397,7 +2662,7 @@ export type AliasOperations = Message<"qdrant.AliasOperations"> & { * Use `create(AliasOperationsSchema)` to create a new message. */ export const AliasOperationsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 60); + messageDesc(file_collections, 63); /** * @generated from message qdrant.CreateAlias @@ -2423,7 +2688,7 @@ export type CreateAlias = Message<"qdrant.CreateAlias"> & { * Use `create(CreateAliasSchema)` to create a new message. */ export const CreateAliasSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 61); + messageDesc(file_collections, 64); /** * @generated from message qdrant.RenameAlias @@ -2449,7 +2714,7 @@ export type RenameAlias = Message<"qdrant.RenameAlias"> & { * Use `create(RenameAliasSchema)` to create a new message. */ export const RenameAliasSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 62); + messageDesc(file_collections, 65); /** * @generated from message qdrant.DeleteAlias @@ -2468,7 +2733,7 @@ export type DeleteAlias = Message<"qdrant.DeleteAlias"> & { * Use `create(DeleteAliasSchema)` to create a new message. */ export const DeleteAliasSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 63); + messageDesc(file_collections, 66); /** * @generated from message qdrant.ListAliasesRequest @@ -2481,7 +2746,7 @@ export type ListAliasesRequest = Message<"qdrant.ListAliasesRequest"> & { * Use `create(ListAliasesRequestSchema)` to create a new message. */ export const ListAliasesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 64); + messageDesc(file_collections, 67); /** * @generated from message qdrant.ListCollectionAliasesRequest @@ -2500,7 +2765,7 @@ export type ListCollectionAliasesRequest = Message<"qdrant.ListCollectionAliases * Use `create(ListCollectionAliasesRequestSchema)` to create a new message. */ export const ListCollectionAliasesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 65); + messageDesc(file_collections, 68); /** * @generated from message qdrant.AliasDescription @@ -2526,7 +2791,7 @@ export type AliasDescription = Message<"qdrant.AliasDescription"> & { * Use `create(AliasDescriptionSchema)` to create a new message. */ export const AliasDescriptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 66); + messageDesc(file_collections, 69); /** * @generated from message qdrant.ListAliasesResponse @@ -2550,7 +2815,7 @@ export type ListAliasesResponse = Message<"qdrant.ListAliasesResponse"> & { * Use `create(ListAliasesResponseSchema)` to create a new message. */ export const ListAliasesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 67); + messageDesc(file_collections, 70); /** * @generated from message qdrant.CollectionClusterInfoRequest @@ -2569,7 +2834,7 @@ export type CollectionClusterInfoRequest = Message<"qdrant.CollectionClusterInfo * Use `create(CollectionClusterInfoRequestSchema)` to create a new message. */ export const CollectionClusterInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 68); + messageDesc(file_collections, 71); /** * @generated from message qdrant.ShardKey @@ -2602,7 +2867,7 @@ export type ShardKey = Message<"qdrant.ShardKey"> & { * Use `create(ShardKeySchema)` to create a new message. */ export const ShardKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 69); + messageDesc(file_collections, 72); /** * @generated from message qdrant.LocalShardInfo @@ -2634,7 +2899,7 @@ export type LocalShardInfo = Message<"qdrant.LocalShardInfo"> & { * * @generated from field: optional qdrant.ShardKey shard_key = 4; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; }; /** @@ -2642,7 +2907,7 @@ export type LocalShardInfo = Message<"qdrant.LocalShardInfo"> & { * Use `create(LocalShardInfoSchema)` to create a new message. */ export const LocalShardInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 70); + messageDesc(file_collections, 73); /** * @generated from message qdrant.RemoteShardInfo @@ -2674,7 +2939,7 @@ export type RemoteShardInfo = Message<"qdrant.RemoteShardInfo"> & { * * @generated from field: optional qdrant.ShardKey shard_key = 4; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; }; /** @@ -2682,7 +2947,7 @@ export type RemoteShardInfo = Message<"qdrant.RemoteShardInfo"> & { * Use `create(RemoteShardInfoSchema)` to create a new message. */ export const RemoteShardInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 71); + messageDesc(file_collections, 74); /** * @generated from message qdrant.ShardTransferInfo @@ -2698,7 +2963,7 @@ export type ShardTransferInfo = Message<"qdrant.ShardTransferInfo"> & { /** * @generated from field: optional uint32 to_shard_id = 5; */ - toShardId?: number; + toShardId?: number | undefined; /** * @generated from field: uint64 from = 2; @@ -2724,7 +2989,7 @@ export type ShardTransferInfo = Message<"qdrant.ShardTransferInfo"> & { * Use `create(ShardTransferInfoSchema)` to create a new message. */ export const ShardTransferInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 72); + messageDesc(file_collections, 75); /** * @generated from message qdrant.ReshardingInfo @@ -2743,7 +3008,7 @@ export type ReshardingInfo = Message<"qdrant.ReshardingInfo"> & { /** * @generated from field: optional qdrant.ShardKey shard_key = 3; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; /** * @generated from field: qdrant.ReshardingDirection direction = 4; @@ -2756,7 +3021,7 @@ export type ReshardingInfo = Message<"qdrant.ReshardingInfo"> & { * Use `create(ReshardingInfoSchema)` to create a new message. */ export const ReshardingInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 73); + messageDesc(file_collections, 76); /** * @generated from message qdrant.CollectionClusterInfoResponse @@ -2803,6 +3068,13 @@ export type CollectionClusterInfoResponse = Message<"qdrant.CollectionClusterInf * @generated from field: repeated qdrant.ReshardingInfo resharding_operations = 6; */ reshardingOperations: ReshardingInfo[]; + + /** + * Time spent to process + * + * @generated from field: double time = 7; + */ + time: number; }; /** @@ -2810,7 +3082,7 @@ export type CollectionClusterInfoResponse = Message<"qdrant.CollectionClusterInf * Use `create(CollectionClusterInfoResponseSchema)` to create a new message. */ export const CollectionClusterInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 74); + messageDesc(file_collections, 77); /** * @generated from message qdrant.MoveShard @@ -2826,7 +3098,7 @@ export type MoveShard = Message<"qdrant.MoveShard"> & { /** * @generated from field: optional uint32 to_shard_id = 5; */ - toShardId?: number; + toShardId?: number | undefined; /** * @generated from field: uint64 from_peer_id = 2; @@ -2841,7 +3113,7 @@ export type MoveShard = Message<"qdrant.MoveShard"> & { /** * @generated from field: optional qdrant.ShardTransferMethod method = 4; */ - method?: ShardTransferMethod; + method?: ShardTransferMethod | undefined; }; /** @@ -2849,7 +3121,7 @@ export type MoveShard = Message<"qdrant.MoveShard"> & { * Use `create(MoveShardSchema)` to create a new message. */ export const MoveShardSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 75); + messageDesc(file_collections, 78); /** * @generated from message qdrant.ReplicateShard @@ -2865,7 +3137,7 @@ export type ReplicateShard = Message<"qdrant.ReplicateShard"> & { /** * @generated from field: optional uint32 to_shard_id = 5; */ - toShardId?: number; + toShardId?: number | undefined; /** * @generated from field: uint64 from_peer_id = 2; @@ -2880,7 +3152,7 @@ export type ReplicateShard = Message<"qdrant.ReplicateShard"> & { /** * @generated from field: optional qdrant.ShardTransferMethod method = 4; */ - method?: ShardTransferMethod; + method?: ShardTransferMethod | undefined; }; /** @@ -2888,7 +3160,7 @@ export type ReplicateShard = Message<"qdrant.ReplicateShard"> & { * Use `create(ReplicateShardSchema)` to create a new message. */ export const ReplicateShardSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 76); + messageDesc(file_collections, 79); /** * @generated from message qdrant.AbortShardTransfer @@ -2904,7 +3176,7 @@ export type AbortShardTransfer = Message<"qdrant.AbortShardTransfer"> & { /** * @generated from field: optional uint32 to_shard_id = 4; */ - toShardId?: number; + toShardId?: number | undefined; /** * @generated from field: uint64 from_peer_id = 2; @@ -2922,7 +3194,7 @@ export type AbortShardTransfer = Message<"qdrant.AbortShardTransfer"> & { * Use `create(AbortShardTransferSchema)` to create a new message. */ export const AbortShardTransferSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 77); + messageDesc(file_collections, 80); /** * @generated from message qdrant.RestartTransfer @@ -2938,7 +3210,7 @@ export type RestartTransfer = Message<"qdrant.RestartTransfer"> & { /** * @generated from field: optional uint32 to_shard_id = 5; */ - toShardId?: number; + toShardId?: number | undefined; /** * @generated from field: uint64 from_peer_id = 2; @@ -2961,7 +3233,7 @@ export type RestartTransfer = Message<"qdrant.RestartTransfer"> & { * Use `create(RestartTransferSchema)` to create a new message. */ export const RestartTransferSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 78); + messageDesc(file_collections, 81); /** * @generated from message qdrant.ReplicatePoints @@ -2972,21 +3244,21 @@ export type ReplicatePoints = Message<"qdrant.ReplicatePoints"> & { * * @generated from field: qdrant.ShardKey from_shard_key = 1; */ - fromShardKey?: ShardKey; + fromShardKey?: ShardKey | undefined; /** * Target shard key * * @generated from field: qdrant.ShardKey to_shard_key = 2; */ - toShardKey?: ShardKey; + toShardKey?: ShardKey | undefined; /** * If set - only points matching the filter will be replicated * * @generated from field: optional qdrant.Filter filter = 3; */ - filter?: Filter; + filter?: Filter | undefined; }; /** @@ -2994,7 +3266,7 @@ export type ReplicatePoints = Message<"qdrant.ReplicatePoints"> & { * Use `create(ReplicatePointsSchema)` to create a new message. */ export const ReplicatePointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 79); + messageDesc(file_collections, 82); /** * @generated from message qdrant.Replica @@ -3016,7 +3288,7 @@ export type Replica = Message<"qdrant.Replica"> & { * Use `create(ReplicaSchema)` to create a new message. */ export const ReplicaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 80); + messageDesc(file_collections, 83); /** * @generated from message qdrant.CreateShardKey @@ -3027,21 +3299,21 @@ export type CreateShardKey = Message<"qdrant.CreateShardKey"> & { * * @generated from field: qdrant.ShardKey shard_key = 1; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; /** * Number of shards to create per shard key * * @generated from field: optional uint32 shards_number = 2; */ - shardsNumber?: number; + shardsNumber?: number | undefined; /** * Number of replicas of each shard to create * * @generated from field: optional uint32 replication_factor = 3; */ - replicationFactor?: number; + replicationFactor?: number | undefined; /** * List of peer ids, allowed to create shards. If empty - all peers are allowed @@ -3055,7 +3327,7 @@ export type CreateShardKey = Message<"qdrant.CreateShardKey"> & { * * @generated from field: optional qdrant.ReplicaState initial_state = 5; */ - initialState?: ReplicaState; + initialState?: ReplicaState | undefined; }; /** @@ -3063,7 +3335,7 @@ export type CreateShardKey = Message<"qdrant.CreateShardKey"> & { * Use `create(CreateShardKeySchema)` to create a new message. */ export const CreateShardKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 81); + messageDesc(file_collections, 84); /** * @generated from message qdrant.DeleteShardKey @@ -3074,7 +3346,7 @@ export type DeleteShardKey = Message<"qdrant.DeleteShardKey"> & { * * @generated from field: qdrant.ShardKey shard_key = 1; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; }; /** @@ -3082,7 +3354,7 @@ export type DeleteShardKey = Message<"qdrant.DeleteShardKey"> & { * Use `create(DeleteShardKeySchema)` to create a new message. */ export const DeleteShardKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 82); + messageDesc(file_collections, 85); /** * @generated from message qdrant.UpdateCollectionClusterSetupRequest @@ -3154,7 +3426,7 @@ export type UpdateCollectionClusterSetupRequest = Message<"qdrant.UpdateCollecti * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -3162,7 +3434,7 @@ export type UpdateCollectionClusterSetupRequest = Message<"qdrant.UpdateCollecti * Use `create(UpdateCollectionClusterSetupRequestSchema)` to create a new message. */ export const UpdateCollectionClusterSetupRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 83); + messageDesc(file_collections, 86); /** * @generated from message qdrant.UpdateCollectionClusterSetupResponse @@ -3172,6 +3444,13 @@ export type UpdateCollectionClusterSetupResponse = Message<"qdrant.UpdateCollect * @generated from field: bool result = 1; */ result: boolean; + + /** + * Time spent to process + * + * @generated from field: double time = 2; + */ + time: number; }; /** @@ -3179,7 +3458,7 @@ export type UpdateCollectionClusterSetupResponse = Message<"qdrant.UpdateCollect * Use `create(UpdateCollectionClusterSetupResponseSchema)` to create a new message. */ export const UpdateCollectionClusterSetupResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 84); + messageDesc(file_collections, 87); /** * @generated from message qdrant.CreateShardKeyRequest @@ -3197,7 +3476,7 @@ export type CreateShardKeyRequest = Message<"qdrant.CreateShardKeyRequest"> & { * * @generated from field: qdrant.CreateShardKey request = 2; */ - request?: CreateShardKey; + request?: CreateShardKey | undefined; /** * Wait timeout for operation commit in seconds. @@ -3205,7 +3484,7 @@ export type CreateShardKeyRequest = Message<"qdrant.CreateShardKeyRequest"> & { * * @generated from field: optional uint64 timeout = 3; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -3213,7 +3492,7 @@ export type CreateShardKeyRequest = Message<"qdrant.CreateShardKeyRequest"> & { * Use `create(CreateShardKeyRequestSchema)` to create a new message. */ export const CreateShardKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 85); + messageDesc(file_collections, 88); /** * @generated from message qdrant.DeleteShardKeyRequest @@ -3231,7 +3510,7 @@ export type DeleteShardKeyRequest = Message<"qdrant.DeleteShardKeyRequest"> & { * * @generated from field: qdrant.DeleteShardKey request = 2; */ - request?: DeleteShardKey; + request?: DeleteShardKey | undefined; /** * Wait timeout for operation commit in seconds. @@ -3239,7 +3518,7 @@ export type DeleteShardKeyRequest = Message<"qdrant.DeleteShardKeyRequest"> & { * * @generated from field: optional uint64 timeout = 3; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -3247,7 +3526,7 @@ export type DeleteShardKeyRequest = Message<"qdrant.DeleteShardKeyRequest"> & { * Use `create(DeleteShardKeyRequestSchema)` to create a new message. */ export const DeleteShardKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 86); + messageDesc(file_collections, 89); /** * @generated from message qdrant.ListShardKeysRequest @@ -3266,7 +3545,7 @@ export type ListShardKeysRequest = Message<"qdrant.ListShardKeysRequest"> & { * Use `create(ListShardKeysRequestSchema)` to create a new message. */ export const ListShardKeysRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 87); + messageDesc(file_collections, 90); /** * @generated from message qdrant.CreateShardKeyResponse @@ -3276,6 +3555,13 @@ export type CreateShardKeyResponse = Message<"qdrant.CreateShardKeyResponse"> & * @generated from field: bool result = 1; */ result: boolean; + + /** + * Time spent to process + * + * @generated from field: double time = 2; + */ + time: number; }; /** @@ -3283,7 +3569,7 @@ export type CreateShardKeyResponse = Message<"qdrant.CreateShardKeyResponse"> & * Use `create(CreateShardKeyResponseSchema)` to create a new message. */ export const CreateShardKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 88); + messageDesc(file_collections, 91); /** * @generated from message qdrant.DeleteShardKeyResponse @@ -3293,6 +3579,13 @@ export type DeleteShardKeyResponse = Message<"qdrant.DeleteShardKeyResponse"> & * @generated from field: bool result = 1; */ result: boolean; + + /** + * Time spent to process + * + * @generated from field: double time = 2; + */ + time: number; }; /** @@ -3300,7 +3593,7 @@ export type DeleteShardKeyResponse = Message<"qdrant.DeleteShardKeyResponse"> & * Use `create(DeleteShardKeyResponseSchema)` to create a new message. */ export const DeleteShardKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 89); + messageDesc(file_collections, 92); /** * @generated from message qdrant.ShardKeyDescription @@ -3309,7 +3602,7 @@ export type ShardKeyDescription = Message<"qdrant.ShardKeyDescription"> & { /** * @generated from field: qdrant.ShardKey key = 1; */ - key?: ShardKey; + key?: ShardKey | undefined; }; /** @@ -3317,7 +3610,7 @@ export type ShardKeyDescription = Message<"qdrant.ShardKeyDescription"> & { * Use `create(ShardKeyDescriptionSchema)` to create a new message. */ export const ShardKeyDescriptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 90); + messageDesc(file_collections, 93); /** * @generated from message qdrant.ListShardKeysResponse @@ -3341,7 +3634,7 @@ export type ListShardKeysResponse = Message<"qdrant.ListShardKeysResponse"> & { * Use `create(ListShardKeysResponseSchema)` to create a new message. */ export const ListShardKeysResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_collections, 91); + messageDesc(file_collections, 94); /** * @generated from enum qdrant.Datatype @@ -3366,6 +3659,11 @@ export enum Datatype { * @generated from enum value: Float16 = 3; */ Float16 = 3, + + /** + * @generated from enum value: Turbo4 = 4; + */ + Turbo4 = 4, } /** @@ -3374,6 +3672,47 @@ export enum Datatype { export const DatatypeSchema: GenEnum = /*@__PURE__*/ enumDesc(file_collections, 0); +/** + * Memory placement of a component's data. + * Data is always persisted on disk regardless of this setting; + * it only controls how the data is held in RAM. + * + * @generated from enum qdrant.Memory + */ +export enum Memory { + /** + * @generated from enum value: MemoryUnknown = 0; + */ + MemoryUnknown = 0, + + /** + * Data is not pre-loaded from disk to RAM; cached with usage. + * + * @generated from enum value: Cold = 1; + */ + Cold = 1, + + /** + * Data is pre-loaded into disk-cache RAM on start, but may be evicted under memory pressure. + * + * @generated from enum value: Cached = 2; + */ + Cached = 2, + + /** + * Data is loaded in RAM and never evicted. + * + * @generated from enum value: Pinned = 3; + */ + Pinned = 3, +} + +/** + * Describes the enum qdrant.Memory. + */ +export const MemorySchema: GenEnum = /*@__PURE__*/ + enumDesc(file_collections, 1); + /** * @generated from enum qdrant.Modifier */ @@ -3395,7 +3734,7 @@ export enum Modifier { * Describes the enum qdrant.Modifier. */ export const ModifierSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 1); + enumDesc(file_collections, 2); /** * @generated from enum qdrant.MultiVectorComparator @@ -3411,7 +3750,7 @@ export enum MultiVectorComparator { * Describes the enum qdrant.MultiVectorComparator. */ export const MultiVectorComparatorSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 2); + enumDesc(file_collections, 3); /** * @generated from enum qdrant.Distance @@ -3447,7 +3786,7 @@ export enum Distance { * Describes the enum qdrant.Distance. */ export const DistanceSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 3); + enumDesc(file_collections, 4); /** * @generated from enum qdrant.CollectionStatus @@ -3491,7 +3830,7 @@ export enum CollectionStatus { * Describes the enum qdrant.CollectionStatus. */ export const CollectionStatusSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 4); + enumDesc(file_collections, 5); /** * @generated from enum qdrant.PayloadSchemaType @@ -3547,7 +3886,7 @@ export enum PayloadSchemaType { * Describes the enum qdrant.PayloadSchemaType. */ export const PayloadSchemaTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 5); + enumDesc(file_collections, 6); /** * @generated from enum qdrant.QuantizationType @@ -3568,7 +3907,7 @@ export enum QuantizationType { * Describes the enum qdrant.QuantizationType. */ export const QuantizationTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 6); + enumDesc(file_collections, 7); /** * @generated from enum qdrant.CompressionRatio @@ -3604,7 +3943,7 @@ export enum CompressionRatio { * Describes the enum qdrant.CompressionRatio. */ export const CompressionRatioSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 7); + enumDesc(file_collections, 8); /** * @generated from enum qdrant.BinaryQuantizationEncoding @@ -3630,7 +3969,7 @@ export enum BinaryQuantizationEncoding { * Describes the enum qdrant.BinaryQuantizationEncoding. */ export const BinaryQuantizationEncodingSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 8); + enumDesc(file_collections, 9); /** * @generated from enum qdrant.TurboQuantBitSize @@ -3661,7 +4000,7 @@ export enum TurboQuantBitSize { * Describes the enum qdrant.TurboQuantBitSize. */ export const TurboQuantBitSizeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 9); + enumDesc(file_collections, 10); /** * @generated from enum qdrant.ShardingMethod @@ -3686,7 +4025,7 @@ export enum ShardingMethod { * Describes the enum qdrant.ShardingMethod. */ export const ShardingMethodSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 10); + enumDesc(file_collections, 11); /** * @generated from enum qdrant.TokenizerType @@ -3722,7 +4061,7 @@ export enum TokenizerType { * Describes the enum qdrant.TokenizerType. */ export const TokenizerTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 11); + enumDesc(file_collections, 12); /** * @generated from enum qdrant.ReplicaState @@ -3817,7 +4156,7 @@ export enum ReplicaState { * Describes the enum qdrant.ReplicaState. */ export const ReplicaStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 12); + enumDesc(file_collections, 13); /** * Resharding direction, scale up or down in number of shards @@ -3844,7 +4183,7 @@ export enum ReshardingDirection { * Describes the enum qdrant.ReshardingDirection. */ export const ReshardingDirectionSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 13); + enumDesc(file_collections, 14); /** * @generated from enum qdrant.ShardTransferMethod @@ -3883,5 +4222,5 @@ export enum ShardTransferMethod { * Describes the enum qdrant.ShardTransferMethod. */ export const ShardTransferMethodSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_collections, 14); + enumDesc(file_collections, 15); diff --git a/packages/js-client-grpc/src/proto/collections_service_pb.ts b/packages/js-client-grpc/src/proto/collections_service_pb.ts index 7fc3291..208976a 100644 --- a/packages/js-client-grpc/src/proto/collections_service_pb.ts +++ b/packages/js-client-grpc/src/proto/collections_service_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file collections_service.proto (package qdrant, syntax proto3) /* eslint-disable */ diff --git a/packages/js-client-grpc/src/proto/json_with_int_pb.ts b/packages/js-client-grpc/src/proto/json_with_int_pb.ts index aea142e..bb0c02d 100644 --- a/packages/js-client-grpc/src/proto/json_with_int_pb.ts +++ b/packages/js-client-grpc/src/proto/json_with_int_pb.ts @@ -1,6 +1,6 @@ // Fork of the google.protobuf.Value with explicit support for integer values -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file json_with_int.proto (package qdrant, syntax proto3) /* eslint-disable */ diff --git a/packages/js-client-grpc/src/proto/points_pb.ts b/packages/js-client-grpc/src/proto/points_pb.ts index 502037e..12a40c2 100644 --- a/packages/js-client-grpc/src/proto/points_pb.ts +++ b/packages/js-client-grpc/src/proto/points_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file points.proto (package qdrant, syntax proto3) /* eslint-disable */ @@ -18,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file points.proto. */ export const file_points: GenFile = /*@__PURE__*/ - fileDesc("Cgxwb2ludHMucHJvdG8SBnFkcmFudCI4Cg1Xcml0ZU9yZGVyaW5nEicKBHR5cGUYASABKA4yGS5xZHJhbnQuV3JpdGVPcmRlcmluZ1R5cGUiWQoPUmVhZENvbnNpc3RlbmN5EisKBHR5cGUYASABKA4yGy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5VHlwZUgAEhAKBmZhY3RvchgCIAEoBEgAQgcKBXZhbHVlIh0KDVNwYXJzZUluZGljZXMSDAoEZGF0YRgBIAMoDSKWAQoIRG9jdW1lbnQSDAoEdGV4dBgBIAEoCRINCgVtb2RlbBgDIAEoCRIuCgdvcHRpb25zGAQgAygLMh0ucWRyYW50LkRvY3VtZW50Lk9wdGlvbnNFbnRyeRo9CgxPcHRpb25zRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4ASKgAQoFSW1hZ2USHAoFaW1hZ2UYASABKAsyDS5xZHJhbnQuVmFsdWUSDQoFbW9kZWwYAiABKAkSKwoHb3B0aW9ucxgDIAMoCzIaLnFkcmFudC5JbWFnZS5PcHRpb25zRW50cnkaPQoMT3B0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAEitQEKD0luZmVyZW5jZU9iamVjdBIdCgZvYmplY3QYASABKAsyDS5xZHJhbnQuVmFsdWUSDQoFbW9kZWwYAiABKAkSNQoHb3B0aW9ucxgDIAMoCzIkLnFkcmFudC5JbmZlcmVuY2VPYmplY3QuT3B0aW9uc0VudHJ5Gj0KDE9wdGlvbnNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBIoMDCgZWZWN0b3ISEAoEZGF0YRgBIAMoAkICGAESLwoHaW5kaWNlcxgCIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzQgIYAUgBiAEBEh4KDXZlY3RvcnNfY291bnQYAyABKA1CAhgBSAKIAQESJAoFZGVuc2UYZSABKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3JIABImCgZzcGFyc2UYZiABKAsyFC5xZHJhbnQuU3BhcnNlVmVjdG9ySAASLwoLbXVsdGlfZGVuc2UYZyABKAsyGC5xZHJhbnQuTXVsdGlEZW5zZVZlY3RvckgAEiQKCGRvY3VtZW50GGggASgLMhAucWRyYW50LkRvY3VtZW50SAASHgoFaW1hZ2UYaSABKAsyDS5xZHJhbnQuSW1hZ2VIABIpCgZvYmplY3QYaiABKAsyFy5xZHJhbnQuSW5mZXJlbmNlT2JqZWN0SABCCAoGdmVjdG9yQgoKCF9pbmRpY2VzQhAKDl92ZWN0b3JzX2NvdW50IpgCCgxWZWN0b3JPdXRwdXQSEAoEZGF0YRgBIAMoAkICGAESLwoHaW5kaWNlcxgCIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzQgIYAUgBiAEBEh4KDXZlY3RvcnNfY291bnQYAyABKA1CAhgBSAKIAQESJAoFZGVuc2UYZSABKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3JIABImCgZzcGFyc2UYZiABKAsyFC5xZHJhbnQuU3BhcnNlVmVjdG9ySAASLwoLbXVsdGlfZGVuc2UYZyABKAsyGC5xZHJhbnQuTXVsdGlEZW5zZVZlY3RvckgAQggKBnZlY3RvckIKCghfaW5kaWNlc0IQCg5fdmVjdG9yc19jb3VudCIbCgtEZW5zZVZlY3RvchIMCgRkYXRhGAEgAygCIi8KDFNwYXJzZVZlY3RvchIOCgZ2YWx1ZXMYASADKAISDwoHaW5kaWNlcxgCIAMoDSI4ChBNdWx0aURlbnNlVmVjdG9yEiQKB3ZlY3RvcnMYASADKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3IipwIKC1ZlY3RvcklucHV0Eh0KAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWRIABIkCgVkZW5zZRgCIAEoCzITLnFkcmFudC5EZW5zZVZlY3RvckgAEiYKBnNwYXJzZRgDIAEoCzIULnFkcmFudC5TcGFyc2VWZWN0b3JIABIvCgttdWx0aV9kZW5zZRgEIAEoCzIYLnFkcmFudC5NdWx0aURlbnNlVmVjdG9ySAASJAoIZG9jdW1lbnQYBSABKAsyEC5xZHJhbnQuRG9jdW1lbnRIABIeCgVpbWFnZRgGIAEoCzINLnFkcmFudC5JbWFnZUgAEikKBm9iamVjdBgHIAEoCzIXLnFkcmFudC5JbmZlcmVuY2VPYmplY3RIAEIJCgd2YXJpYW50Im4KEFNoYXJkS2V5U2VsZWN0b3ISJAoKc2hhcmRfa2V5cxgBIAMoCzIQLnFkcmFudC5TaGFyZEtleRInCghmYWxsYmFjaxgCIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgsKCV9mYWxsYmFjayKTAwoMVXBzZXJ0UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESIwoGcG9pbnRzGAMgAygLMhMucWRyYW50LlBvaW50U3RydWN0EiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBEioKDXVwZGF0ZV9maWx0ZXIYBiABKAsyDi5xZHJhbnQuRmlsdGVySAOIAQESFAoHdGltZW91dBgHIAEoBEgEiAEBEiwKC3VwZGF0ZV9tb2RlGAggASgOMhIucWRyYW50LlVwZGF0ZU1vZGVIBYgBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlckIKCghfdGltZW91dEIOCgxfdXBkYXRlX21vZGUimgIKDERlbGV0ZVBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEiYKBnBvaW50cxgDIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAYgASgESAOIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXQihQMKCUdldFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSHAoDaWRzGAIgAygLMg8ucWRyYW50LlBvaW50SWQSMQoMd2l0aF9wYXlsb2FkGAQgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISNgoMd2l0aF92ZWN0b3JzGAUgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GAYgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgHIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESFAoHdGltZW91dBgIIAEoBEgDiAEBQg8KDV93aXRoX3ZlY3RvcnNCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIKCghfdGltZW91dEoECAMQBCLcAgoSVXBkYXRlUG9pbnRWZWN0b3JzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESJAoGcG9pbnRzGAMgAygLMhQucWRyYW50LlBvaW50VmVjdG9ycxIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIqCg11cGRhdGVfZmlsdGVyGAYgASgLMg4ucWRyYW50LkZpbHRlckgDiAEBEhQKB3RpbWVvdXQYByABKARIBIgBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlckIKCghfdGltZW91dCJNCgxQb2ludFZlY3RvcnMSGwoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIgCgd2ZWN0b3JzGAIgASgLMg8ucWRyYW50LlZlY3RvcnMi0wIKEkRlbGV0ZVBvaW50VmVjdG9ycxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEi8KD3BvaW50c19zZWxlY3RvchgDIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIoCgd2ZWN0b3JzGAQgASgLMhcucWRyYW50LlZlY3RvcnNTZWxlY3RvchIsCghvcmRlcmluZxgFIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAYgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAcgASgESAOIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXQi1wMKEFNldFBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARI2CgdwYXlsb2FkGAMgAygLMiUucWRyYW50LlNldFBheWxvYWRQb2ludHMuUGF5bG9hZEVudHJ5EjQKD3BvaW50c19zZWxlY3RvchgFIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgBiAEBEiwKCG9yZGVyaW5nGAYgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAogBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYByABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgDiAEBEhAKA2tleRgIIAEoCUgEiAEBEhQKB3RpbWVvdXQYCSABKARIBYgBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIHCgVfd2FpdEISChBfcG9pbnRzX3NlbGVjdG9yQgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgYKBF9rZXlCCgoIX3RpbWVvdXRKBAgEEAUi1wIKE0RlbGV0ZVBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIMCgRrZXlzGAMgAygJEjQKD3BvaW50c19zZWxlY3RvchgFIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgBiAEBEiwKCG9yZGVyaW5nGAYgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAogBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYByABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgDiAEBEhQKB3RpbWVvdXQYCCABKARIBIgBAUIHCgVfd2FpdEISChBfcG9pbnRzX3NlbGVjdG9yQgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgoKCF90aW1lb3V0SgQIBBAFIqACChJDbGVhclBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARImCgZwb2ludHMYAyABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgFIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESFAoHdGltZW91dBgGIAEoBEgDiAEBQgcKBV93YWl0QgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgoKCF90aW1lb3V0ItECChpDcmVhdGVGaWVsZEluZGV4Q29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEhIKCmZpZWxkX25hbWUYAyABKAkSKgoKZmllbGRfdHlwZRgEIAEoDjIRLnFkcmFudC5GaWVsZFR5cGVIAYgBARI7ChJmaWVsZF9pbmRleF9wYXJhbXMYBSABKAsyGi5xZHJhbnQuUGF5bG9hZEluZGV4UGFyYW1zSAKIAQESLAoIb3JkZXJpbmcYBiABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gDiAEBEhQKB3RpbWVvdXQYByABKARIBIgBAUIHCgVfd2FpdEINCgtfZmllbGRfdHlwZUIVChNfZmllbGRfaW5kZXhfcGFyYW1zQgsKCV9vcmRlcmluZ0IKCghfdGltZW91dCLCAQoaRGVsZXRlRmllbGRJbmRleENvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARISCgpmaWVsZF9uYW1lGAMgASgJEiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARIUCgd0aW1lb3V0GAUgASgESAKIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQgoKCF90aW1lb3V0ItYBChlEZW5zZVZlY3RvckNyZWF0aW9uQ29uZmlnEgwKBHNpemUYASABKAQSIgoIZGlzdGFuY2UYAiABKA4yEC5xZHJhbnQuRGlzdGFuY2USOgoSbXVsdGl2ZWN0b3JfY29uZmlnGAMgASgLMhkucWRyYW50Lk11bHRpVmVjdG9yQ29uZmlnSACIAQESJwoIZGF0YXR5cGUYBCABKA4yEC5xZHJhbnQuRGF0YXR5cGVIAYgBAUIVChNfbXVsdGl2ZWN0b3JfY29uZmlnQgsKCV9kYXRhdHlwZSKIAQoaU3BhcnNlVmVjdG9yQ3JlYXRpb25Db25maWcSJwoIbW9kaWZpZXIYASABKA4yEC5xZHJhbnQuTW9kaWZpZXJIAIgBARInCghkYXRhdHlwZRgCIAEoDjIQLnFkcmFudC5EYXRhdHlwZUgBiAEBQgsKCV9tb2RpZmllckILCglfZGF0YXR5cGUiyQIKF0NyZWF0ZVZlY3Rvck5hbWVSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISAGIAQESEwoLdmVjdG9yX25hbWUYAyABKAkSOQoMZGVuc2VfY29uZmlnGAQgASgLMiEucWRyYW50LkRlbnNlVmVjdG9yQ3JlYXRpb25Db25maWdIABI7Cg1zcGFyc2VfY29uZmlnGAUgASgLMiIucWRyYW50LlNwYXJzZVZlY3RvckNyZWF0aW9uQ29uZmlnSAASFAoHdGltZW91dBgGIAEoBEgCiAEBEiwKCG9yZGVyaW5nGAcgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIA4gBAUIPCg12ZWN0b3JfY29uZmlnQgcKBV93YWl0QgoKCF90aW1lb3V0QgsKCV9vcmRlcmluZyLAAQoXRGVsZXRlVmVjdG9yTmFtZVJlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARITCgt2ZWN0b3JfbmFtZRgDIAEoCRIUCgd0aW1lb3V0GAQgASgESAGIAQESLAoIb3JkZXJpbmcYBSABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gCiAEBQgcKBV93YWl0QgoKCF90aW1lb3V0QgsKCV9vcmRlcmluZyIoChZQYXlsb2FkSW5jbHVkZVNlbGVjdG9yEg4KBmZpZWxkcxgBIAMoCSIoChZQYXlsb2FkRXhjbHVkZVNlbGVjdG9yEg4KBmZpZWxkcxgBIAMoCSKhAQoTV2l0aFBheWxvYWRTZWxlY3RvchIQCgZlbmFibGUYASABKAhIABIxCgdpbmNsdWRlGAIgASgLMh4ucWRyYW50LlBheWxvYWRJbmNsdWRlU2VsZWN0b3JIABIxCgdleGNsdWRlGAMgASgLMh4ucWRyYW50LlBheWxvYWRFeGNsdWRlU2VsZWN0b3JIAEISChBzZWxlY3Rvcl9vcHRpb25zIoIBCgxOYW1lZFZlY3RvcnMSMgoHdmVjdG9ycxgBIAMoCzIhLnFkcmFudC5OYW1lZFZlY3RvcnMuVmVjdG9yc0VudHJ5Gj4KDFZlY3RvcnNFbnRyeRILCgNrZXkYASABKAkSHQoFdmFsdWUYAiABKAsyDi5xZHJhbnQuVmVjdG9yOgI4ASKUAQoSTmFtZWRWZWN0b3JzT3V0cHV0EjgKB3ZlY3RvcnMYASADKAsyJy5xZHJhbnQuTmFtZWRWZWN0b3JzT3V0cHV0LlZlY3RvcnNFbnRyeRpECgxWZWN0b3JzRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQucWRyYW50LlZlY3Rvck91dHB1dDoCOAEiZwoHVmVjdG9ycxIgCgZ2ZWN0b3IYASABKAsyDi5xZHJhbnQuVmVjdG9ySAASJwoHdmVjdG9ycxgCIAEoCzIULnFkcmFudC5OYW1lZFZlY3RvcnNIAEIRCg92ZWN0b3JzX29wdGlvbnMieQoNVmVjdG9yc091dHB1dBImCgZ2ZWN0b3IYASABKAsyFC5xZHJhbnQuVmVjdG9yT3V0cHV0SAASLQoHdmVjdG9ycxgCIAEoCzIaLnFkcmFudC5OYW1lZFZlY3RvcnNPdXRwdXRIAEIRCg92ZWN0b3JzX29wdGlvbnMiIAoPVmVjdG9yc1NlbGVjdG9yEg0KBW5hbWVzGAEgAygJImcKE1dpdGhWZWN0b3JzU2VsZWN0b3ISEAoGZW5hYmxlGAEgASgISAASKgoHaW5jbHVkZRgCIAEoCzIXLnFkcmFudC5WZWN0b3JzU2VsZWN0b3JIAEISChBzZWxlY3Rvcl9vcHRpb25zIogBChhRdWFudGl6YXRpb25TZWFyY2hQYXJhbXMSEwoGaWdub3JlGAEgASgISACIAQESFAoHcmVzY29yZRgCIAEoCEgBiAEBEhkKDG92ZXJzYW1wbGluZxgDIAEoAUgCiAEBQgkKB19pZ25vcmVCCgoIX3Jlc2NvcmVCDwoNX292ZXJzYW1wbGluZyJlChFBY29yblNlYXJjaFBhcmFtcxITCgZlbmFibGUYASABKAhIAIgBARIcCg9tYXhfc2VsZWN0aXZpdHkYAiABKAFIAYgBAUIJCgdfZW5hYmxlQhIKEF9tYXhfc2VsZWN0aXZpdHkigQIKDFNlYXJjaFBhcmFtcxIUCgdobnN3X2VmGAEgASgESACIAQESEgoFZXhhY3QYAiABKAhIAYgBARI7CgxxdWFudGl6YXRpb24YAyABKAsyIC5xZHJhbnQuUXVhbnRpemF0aW9uU2VhcmNoUGFyYW1zSAKIAQESGQoMaW5kZXhlZF9vbmx5GAQgASgISAOIAQESLQoFYWNvcm4YBSABKAsyGS5xZHJhbnQuQWNvcm5TZWFyY2hQYXJhbXNIBIgBAUIKCghfaG5zd19lZkIICgZfZXhhY3RCDwoNX3F1YW50aXphdGlvbkIPCg1faW5kZXhlZF9vbmx5QggKBl9hY29ybiKSBQoMU2VhcmNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIOCgZ2ZWN0b3IYAiADKAISHgoGZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgEIAEoBBIxCgx3aXRoX3BheWxvYWQYBiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYByABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhwKD3Njb3JlX3RocmVzaG9sZBgIIAEoAkgAiAEBEhMKBm9mZnNldBgJIAEoBEgBiAEBEhgKC3ZlY3Rvcl9uYW1lGAogASgJSAKIAQESNgoMd2l0aF92ZWN0b3JzGAsgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIA4gBARI2ChByZWFkX2NvbnNpc3RlbmN5GAwgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgEiAEBEhQKB3RpbWVvdXQYDSABKARIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYDiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBEjIKDnNwYXJzZV9pbmRpY2VzGA8gASgLMhUucWRyYW50LlNwYXJzZUluZGljZXNIB4gBAUISChBfc2NvcmVfdGhyZXNob2xkQgkKB19vZmZzZXRCDgoMX3ZlY3Rvcl9uYW1lQg8KDV93aXRoX3ZlY3RvcnNCEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIRCg9fc3BhcnNlX2luZGljZXNKBAgFEAYiyAEKEVNlYXJjaEJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIrCg1zZWFyY2hfcG9pbnRzGAIgAygLMhQucWRyYW50LlNlYXJjaFBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCKyAQoKV2l0aExvb2t1cBISCgpjb2xsZWN0aW9uGAEgASgJEjYKDHdpdGhfcGF5bG9hZBgCIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9ySACIAQESNgoMd2l0aF92ZWN0b3JzGAMgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAYgBAUIPCg1fd2l0aF9wYXlsb2FkQg8KDV93aXRoX3ZlY3RvcnMi1QUKEVNlYXJjaFBvaW50R3JvdXBzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIOCgZ2ZWN0b3IYAiADKAISHgoGZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgEIAEoDRIxCgx3aXRoX3BheWxvYWQYBSABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYBiABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhwKD3Njb3JlX3RocmVzaG9sZBgHIAEoAkgAiAEBEhgKC3ZlY3Rvcl9uYW1lGAggASgJSAGIAQESNgoMd2l0aF92ZWN0b3JzGAkgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARIQCghncm91cF9ieRgKIAEoCRISCgpncm91cF9zaXplGAsgASgNEjYKEHJlYWRfY29uc2lzdGVuY3kYDCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAOIAQESLAoLd2l0aF9sb29rdXAYDSABKAsyEi5xZHJhbnQuV2l0aExvb2t1cEgEiAEBEhQKB3RpbWVvdXQYDiABKARIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYDyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBEjIKDnNwYXJzZV9pbmRpY2VzGBAgASgLMhUucWRyYW50LlNwYXJzZUluZGljZXNIB4gBAUISChBfc2NvcmVfdGhyZXNob2xkQg4KDF92ZWN0b3JfbmFtZUIPCg1fd2l0aF92ZWN0b3JzQhMKEV9yZWFkX2NvbnNpc3RlbmN5Qg4KDF93aXRoX2xvb2t1cEIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQhEKD19zcGFyc2VfaW5kaWNlcyJ9CglTdGFydEZyb20SDwoFZmxvYXQYASABKAFIABIRCgdpbnRlZ2VyGAIgASgDSAASLwoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAEhIKCGRhdGV0aW1lGAQgASgJSABCBwoFdmFsdWUiigEKB09yZGVyQnkSCwoDa2V5GAEgASgJEikKCWRpcmVjdGlvbhgCIAEoDjIRLnFkcmFudC5EaXJlY3Rpb25IAIgBARIqCgpzdGFydF9mcm9tGAMgASgLMhEucWRyYW50LlN0YXJ0RnJvbUgBiAEBQgwKCl9kaXJlY3Rpb25CDQoLX3N0YXJ0X2Zyb20ijgQKDFNjcm9sbFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSHgoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlchIkCgZvZmZzZXQYAyABKAsyDy5xZHJhbnQuUG9pbnRJZEgAiAEBEhIKBWxpbWl0GAQgASgNSAGIAQESMQoMd2l0aF9wYXlsb2FkGAYgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISNgoMd2l0aF92ZWN0b3JzGAcgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARI2ChByZWFkX2NvbnNpc3RlbmN5GAggASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgDiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgJIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySASIAQESJgoIb3JkZXJfYnkYCiABKAsyDy5xZHJhbnQuT3JkZXJCeUgFiAEBEhQKB3RpbWVvdXQYCyABKARIBogBAUIJCgdfb2Zmc2V0QggKBl9saW1pdEIPCg1fd2l0aF92ZWN0b3JzQhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCwoJX29yZGVyX2J5QgoKCF90aW1lb3V0SgQIBRAGIqUBCg5Mb29rdXBMb2NhdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSGAoLdmVjdG9yX25hbWUYAiABKAlIAIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgBiAEBQg4KDF92ZWN0b3JfbmFtZUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIs0GCg9SZWNvbW1lbmRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiEKCHBvc2l0aXZlGAIgAygLMg8ucWRyYW50LlBvaW50SWQSIQoIbmVnYXRpdmUYAyADKAsyDy5xZHJhbnQuUG9pbnRJZBIeCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAUgASgEEjEKDHdpdGhfcGF5bG9hZBgHIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgIIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSHAoPc2NvcmVfdGhyZXNob2xkGAkgASgCSACIAQESEwoGb2Zmc2V0GAogASgESAGIAQESEgoFdXNpbmcYCyABKAlIAogBARI2Cgx3aXRoX3ZlY3RvcnMYDCABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgDiAEBEjAKC2xvb2t1cF9mcm9tGA0gASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSASIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgOIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBYgBARIwCghzdHJhdGVneRgQIAEoDjIZLnFkcmFudC5SZWNvbW1lbmRTdHJhdGVneUgGiAEBEigKEHBvc2l0aXZlX3ZlY3RvcnMYESADKAsyDi5xZHJhbnQuVmVjdG9yEigKEG5lZ2F0aXZlX3ZlY3RvcnMYEiADKAsyDi5xZHJhbnQuVmVjdG9yEhQKB3RpbWVvdXQYEyABKARIB4gBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYFCABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgIiAEBQhIKEF9zY29yZV90aHJlc2hvbGRCCQoHX29mZnNldEIICgZfdXNpbmdCDwoNX3dpdGhfdmVjdG9yc0IOCgxfbG9va3VwX2Zyb21CEwoRX3JlYWRfY29uc2lzdGVuY3lCCwoJX3N0cmF0ZWd5QgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JKBAgGEAci0QEKFFJlY29tbWVuZEJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIxChByZWNvbW1lbmRfcG9pbnRzGAIgAygLMhcucWRyYW50LlJlY29tbWVuZFBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCKQBwoUUmVjb21tZW5kUG9pbnRHcm91cHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiEKCHBvc2l0aXZlGAIgAygLMg8ucWRyYW50LlBvaW50SWQSIQoIbmVnYXRpdmUYAyADKAsyDy5xZHJhbnQuUG9pbnRJZBIeCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVyEg0KBWxpbWl0GAUgASgNEjEKDHdpdGhfcGF5bG9hZBgGIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEiQKBnBhcmFtcxgHIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXMSHAoPc2NvcmVfdGhyZXNob2xkGAggASgCSACIAQESEgoFdXNpbmcYCSABKAlIAYgBARI2Cgx3aXRoX3ZlY3RvcnMYCiABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgCiAEBEjAKC2xvb2t1cF9mcm9tGAsgASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAOIAQESEAoIZ3JvdXBfYnkYDCABKAkSEgoKZ3JvdXBfc2l6ZRgNIAEoDRI2ChByZWFkX2NvbnNpc3RlbmN5GA4gASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgEiAEBEiwKC3dpdGhfbG9va3VwGA8gASgLMhIucWRyYW50LldpdGhMb29rdXBIBYgBARIwCghzdHJhdGVneRgRIAEoDjIZLnFkcmFudC5SZWNvbW1lbmRTdHJhdGVneUgGiAEBEigKEHBvc2l0aXZlX3ZlY3RvcnMYEiADKAsyDi5xZHJhbnQuVmVjdG9yEigKEG5lZ2F0aXZlX3ZlY3RvcnMYEyADKAsyDi5xZHJhbnQuVmVjdG9yEhQKB3RpbWVvdXQYFCABKARIB4gBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYFSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgIiAEBQhIKEF9zY29yZV90aHJlc2hvbGRCCAoGX3VzaW5nQg8KDV93aXRoX3ZlY3RvcnNCDgoMX2xvb2t1cF9mcm9tQhMKEV9yZWFkX2NvbnNpc3RlbmN5Qg4KDF93aXRoX2xvb2t1cEILCglfc3RyYXRlZ3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvciJBCgxUYXJnZXRWZWN0b3ISJwoGc2luZ2xlGAEgASgLMhUucWRyYW50LlZlY3RvckV4YW1wbGVIAEIICgZ0YXJnZXQiWwoNVmVjdG9yRXhhbXBsZRIdCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkSAASIAoGdmVjdG9yGAIgASgLMg4ucWRyYW50LlZlY3RvckgAQgkKB2V4YW1wbGUiZgoSQ29udGV4dEV4YW1wbGVQYWlyEicKCHBvc2l0aXZlGAEgASgLMhUucWRyYW50LlZlY3RvckV4YW1wbGUSJwoIbmVnYXRpdmUYAiABKAsyFS5xZHJhbnQuVmVjdG9yRXhhbXBsZSKOBQoORGlzY292ZXJQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEiQKBnRhcmdldBgCIAEoCzIULnFkcmFudC5UYXJnZXRWZWN0b3ISKwoHY29udGV4dBgDIAMoCzIaLnFkcmFudC5Db250ZXh0RXhhbXBsZVBhaXISHgoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgFIAEoBBIxCgx3aXRoX3BheWxvYWQYBiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYByABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhMKBm9mZnNldBgIIAEoBEgAiAEBEhIKBXVzaW5nGAkgASgJSAGIAQESNgoMd2l0aF92ZWN0b3JzGAogASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARIwCgtsb29rdXBfZnJvbRgLIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgDiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYDCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SASIAQESFAoHdGltZW91dBgNIAEoBEgFiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgOIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAaIAQFCCQoHX29mZnNldEIICgZfdXNpbmdCDwoNX3dpdGhfdmVjdG9yc0IOCgxfbG9va3VwX2Zyb21CEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvciLOAQoTRGlzY292ZXJCYXRjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSLwoPZGlzY292ZXJfcG9pbnRzGAIgAygLMhYucWRyYW50LkRpc2NvdmVyUG9pbnRzEjYKEHJlYWRfY29uc2lzdGVuY3kYAyABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SACIAQESFAoHdGltZW91dBgEIAEoBEgBiAEBQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0IqUCCgtDb3VudFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSHgoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlchISCgVleGFjdBgDIAEoCEgAiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYBCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAYgASgESAOIAQFCCAoGX2V4YWN0QhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXQinQEKDlJlY29tbWVuZElucHV0EiUKCHBvc2l0aXZlGAEgAygLMhMucWRyYW50LlZlY3RvcklucHV0EiUKCG5lZ2F0aXZlGAIgAygLMhMucWRyYW50LlZlY3RvcklucHV0EjAKCHN0cmF0ZWd5GAMgASgOMhkucWRyYW50LlJlY29tbWVuZFN0cmF0ZWd5SACIAQFCCwoJX3N0cmF0ZWd5ImAKEENvbnRleHRJbnB1dFBhaXISJQoIcG9zaXRpdmUYASABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSJQoIbmVnYXRpdmUYAiABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQiWwoNRGlzY292ZXJJbnB1dBIjCgZ0YXJnZXQYASABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSJQoHY29udGV4dBgCIAEoCzIULnFkcmFudC5Db250ZXh0SW5wdXQiNwoMQ29udGV4dElucHV0EicKBXBhaXJzGAEgAygLMhgucWRyYW50LkNvbnRleHRJbnB1dFBhaXIikQEKFlJlbGV2YW5jZUZlZWRiYWNrSW5wdXQSIwoGdGFyZ2V0GAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0EiYKCGZlZWRiYWNrGAIgAygLMhQucWRyYW50LkZlZWRiYWNrSXRlbRIqCghzdHJhdGVneRgDIAEoCzIYLnFkcmFudC5GZWVkYmFja1N0cmF0ZWd5IkMKDEZlZWRiYWNrSXRlbRIkCgdleGFtcGxlGAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0Eg0KBXNjb3JlGAIgASgCIk0KEEZlZWRiYWNrU3RyYXRlZ3kSLgoFbmFpdmUYASABKAsyHS5xZHJhbnQuTmFpdmVGZWVkYmFja1N0cmF0ZWd5SABCCQoHdmFyaWFudCI4ChVOYWl2ZUZlZWRiYWNrU3RyYXRlZ3kSCQoBYRgBIAEoAhIJCgFiGAIgASgCEgkKAWMYAyABKAIiogEKB0Zvcm11bGESJgoKZXhwcmVzc2lvbhgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEi8KCGRlZmF1bHRzGAIgAygLMh0ucWRyYW50LkZvcm11bGEuRGVmYXVsdHNFbnRyeRo+Cg1EZWZhdWx0c0VudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAEizAUKCkV4cHJlc3Npb24SEgoIY29uc3RhbnQYASABKAJIABISCgh2YXJpYWJsZRgCIAEoCUgAEiYKCWNvbmRpdGlvbhgDIAEoCzIRLnFkcmFudC5Db25kaXRpb25IABIrCgxnZW9fZGlzdGFuY2UYBCABKAsyEy5xZHJhbnQuR2VvRGlzdGFuY2VIABISCghkYXRldGltZRgFIAEoCUgAEhYKDGRhdGV0aW1lX2tleRgGIAEoCUgAEiYKBG11bHQYByABKAsyFi5xZHJhbnQuTXVsdEV4cHJlc3Npb25IABIkCgNzdW0YCCABKAsyFS5xZHJhbnQuU3VtRXhwcmVzc2lvbkgAEiQKA2RpdhgJIAEoCzIVLnFkcmFudC5EaXZFeHByZXNzaW9uSAASIQoDbmVnGAogASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIhCgNhYnMYCyABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiIKBHNxcnQYDCABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiQKA3BvdxgNIAEoCzIVLnFkcmFudC5Qb3dFeHByZXNzaW9uSAASIQoDZXhwGA4gASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIjCgVsb2cxMBgPIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASIAoCbG4YECABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEjIKCWV4cF9kZWNheRgRIAEoCzIdLnFkcmFudC5EZWNheVBhcmFtc0V4cHJlc3Npb25IABI0CgtnYXVzc19kZWNheRgSIAEoCzIdLnFkcmFudC5EZWNheVBhcmFtc0V4cHJlc3Npb25IABIyCglsaW5fZGVjYXkYEyABKAsyHS5xZHJhbnQuRGVjYXlQYXJhbXNFeHByZXNzaW9uSABCCQoHdmFyaWFudCI7CgtHZW9EaXN0YW5jZRIgCgZvcmlnaW4YASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSCgoCdG8YAiABKAkiMgoOTXVsdEV4cHJlc3Npb24SIAoEbXVsdBgBIAMoCzISLnFkcmFudC5FeHByZXNzaW9uIjAKDVN1bUV4cHJlc3Npb24SHwoDc3VtGAEgAygLMhIucWRyYW50LkV4cHJlc3Npb24ihgEKDURpdkV4cHJlc3Npb24SIAoEbGVmdBgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEiEKBXJpZ2h0GAIgASgLMhIucWRyYW50LkV4cHJlc3Npb24SHAoPYnlfemVyb19kZWZhdWx0GAMgASgCSACIAQFCEgoQX2J5X3plcm9fZGVmYXVsdCJXCg1Qb3dFeHByZXNzaW9uEiAKBGJhc2UYASABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbhIkCghleHBvbmVudBgCIAEoCzISLnFkcmFudC5FeHByZXNzaW9uIqwBChVEZWNheVBhcmFtc0V4cHJlc3Npb24SHQoBeBgBIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEicKBnRhcmdldBgCIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSACIAQESEgoFc2NhbGUYAyABKAJIAYgBARIVCghtaWRwb2ludBgEIAEoAkgCiAEBQgkKB190YXJnZXRCCAoGX3NjYWxlQgsKCV9taWRwb2ludCJVChNOZWFyZXN0SW5wdXRXaXRoTW1yEiQKB25lYXJlc3QYASABKAsyEy5xZHJhbnQuVmVjdG9ySW5wdXQSGAoDbW1yGAIgASgLMgsucWRyYW50Lk1tciJfCgNNbXISFgoJZGl2ZXJzaXR5GAIgASgCSACIAQESHQoQY2FuZGlkYXRlc19saW1pdBgDIAEoDUgBiAEBQgwKCl9kaXZlcnNpdHlCEwoRX2NhbmRpZGF0ZXNfbGltaXQiLAoDUnJmEg4KAWsYASABKA1IAIgBARIPCgd3ZWlnaHRzGAIgAygCQgQKAl9rItsDCgVRdWVyeRImCgduZWFyZXN0GAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0SAASKwoJcmVjb21tZW5kGAIgASgLMhYucWRyYW50LlJlY29tbWVuZElucHV0SAASKQoIZGlzY292ZXIYAyABKAsyFS5xZHJhbnQuRGlzY292ZXJJbnB1dEgAEicKB2NvbnRleHQYBCABKAsyFC5xZHJhbnQuQ29udGV4dElucHV0SAASIwoIb3JkZXJfYnkYBSABKAsyDy5xZHJhbnQuT3JkZXJCeUgAEiAKBmZ1c2lvbhgGIAEoDjIOLnFkcmFudC5GdXNpb25IABIgCgZzYW1wbGUYByABKA4yDi5xZHJhbnQuU2FtcGxlSAASIgoHZm9ybXVsYRgIIAEoCzIPLnFkcmFudC5Gb3JtdWxhSAASNwoQbmVhcmVzdF93aXRoX21tchgJIAEoCzIbLnFkcmFudC5OZWFyZXN0SW5wdXRXaXRoTW1ySAASGgoDcnJmGAogASgLMgsucWRyYW50LlJyZkgAEjwKEnJlbGV2YW5jZV9mZWVkYmFjaxgLIAEoCzIeLnFkcmFudC5SZWxldmFuY2VGZWVkYmFja0lucHV0SABCCQoHdmFyaWFudCL7AgoNUHJlZmV0Y2hRdWVyeRInCghwcmVmZXRjaBgBIAMoCzIVLnFkcmFudC5QcmVmZXRjaFF1ZXJ5EiEKBXF1ZXJ5GAIgASgLMg0ucWRyYW50LlF1ZXJ5SACIAQESEgoFdXNpbmcYAyABKAlIAYgBARIjCgZmaWx0ZXIYBCABKAsyDi5xZHJhbnQuRmlsdGVySAKIAQESKQoGcGFyYW1zGAUgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtc0gDiAEBEhwKD3Njb3JlX3RocmVzaG9sZBgGIAEoAkgEiAEBEhIKBWxpbWl0GAcgASgESAWIAQESMAoLbG9va3VwX2Zyb20YCCABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IBogBAUIICgZfcXVlcnlCCAoGX3VzaW5nQgkKB19maWx0ZXJCCQoHX3BhcmFtc0ISChBfc2NvcmVfdGhyZXNob2xkQggKBl9saW1pdEIOCgxfbG9va3VwX2Zyb20ihQYKC1F1ZXJ5UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCghwcmVmZXRjaBgCIAMoCzIVLnFkcmFudC5QcmVmZXRjaFF1ZXJ5EiEKBXF1ZXJ5GAMgASgLMg0ucWRyYW50LlF1ZXJ5SACIAQESEgoFdXNpbmcYBCABKAlIAYgBARIjCgZmaWx0ZXIYBSABKAsyDi5xZHJhbnQuRmlsdGVySAKIAQESKQoGcGFyYW1zGAYgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtc0gDiAEBEhwKD3Njb3JlX3RocmVzaG9sZBgHIAEoAkgEiAEBEhIKBWxpbWl0GAggASgESAWIAQESEwoGb2Zmc2V0GAkgASgESAaIAQESNgoMd2l0aF92ZWN0b3JzGAogASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIB4gBARI2Cgx3aXRoX3BheWxvYWQYCyABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvckgIiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYDCABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAmIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGA0gASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JICogBARIwCgtsb29rdXBfZnJvbRgOIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgLiAEBEhQKB3RpbWVvdXQYDyABKARIDIgBAUIICgZfcXVlcnlCCAoGX3VzaW5nQgkKB19maWx0ZXJCCQoHX3BhcmFtc0ISChBfc2NvcmVfdGhyZXNob2xkQggKBl9saW1pdEIJCgdfb2Zmc2V0Qg8KDV93aXRoX3ZlY3RvcnNCDwoNX3dpdGhfcGF5bG9hZEITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQg4KDF9sb29rdXBfZnJvbUIKCghfdGltZW91dCLFAQoQUXVlcnlCYXRjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSKQoMcXVlcnlfcG9pbnRzGAIgAygLMhMucWRyYW50LlF1ZXJ5UG9pbnRzEjYKEHJlYWRfY29uc2lzdGVuY3kYAyABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SACIAQESFAoHdGltZW91dBgEIAEoBEgBiAEBQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0IswGChBRdWVyeVBvaW50R3JvdXBzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRInCghwcmVmZXRjaBgCIAMoCzIVLnFkcmFudC5QcmVmZXRjaFF1ZXJ5EiEKBXF1ZXJ5GAMgASgLMg0ucWRyYW50LlF1ZXJ5SACIAQESEgoFdXNpbmcYBCABKAlIAYgBARIjCgZmaWx0ZXIYBSABKAsyDi5xZHJhbnQuRmlsdGVySAKIAQESKQoGcGFyYW1zGAYgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtc0gDiAEBEhwKD3Njb3JlX3RocmVzaG9sZBgHIAEoAkgEiAEBEjEKDHdpdGhfcGF5bG9hZBgIIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEjYKDHdpdGhfdmVjdG9ycxgJIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAWIAQESMAoLbG9va3VwX2Zyb20YCiABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IBogBARISCgVsaW1pdBgLIAEoBEgHiAEBEhcKCmdyb3VwX3NpemUYDCABKARICIgBARIQCghncm91cF9ieRgNIAEoCRI2ChByZWFkX2NvbnNpc3RlbmN5GA4gASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgJiAEBEiwKC3dpdGhfbG9va3VwGA8gASgLMhIucWRyYW50LldpdGhMb29rdXBICogBARIUCgd0aW1lb3V0GBAgASgESAuIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGBEgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIDIgBAUIICgZfcXVlcnlCCAoGX3VzaW5nQgkKB19maWx0ZXJCCQoHX3BhcmFtc0ISChBfc2NvcmVfdGhyZXNob2xkQg8KDV93aXRoX3ZlY3RvcnNCDgoMX2xvb2t1cF9mcm9tQggKBl9saW1pdEINCgtfZ3JvdXBfc2l6ZUITChFfcmVhZF9jb25zaXN0ZW5jeUIOCgxfd2l0aF9sb29rdXBCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvciLgAgoLRmFjZXRDb3VudHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEgsKA2tleRgCIAEoCRIjCgZmaWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVySACIAQESEgoFbGltaXQYBCABKARIAYgBARISCgVleGFjdBgFIAEoCEgCiAEBEhQKB3RpbWVvdXQYBiABKARIA4gBARI2ChByZWFkX2NvbnNpc3RlbmN5GAcgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgEiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgIIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAWIAQFCCQoHX2ZpbHRlckIICgZfbGltaXRCCAoGX2V4YWN0QgoKCF90aW1lb3V0QhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3IiXgoKRmFjZXRWYWx1ZRIWCgxzdHJpbmdfdmFsdWUYASABKAlIABIXCg1pbnRlZ2VyX3ZhbHVlGAIgASgDSAASFAoKYm9vbF92YWx1ZRgDIAEoCEgAQgkKB3ZhcmlhbnQiPAoIRmFjZXRIaXQSIQoFdmFsdWUYASABKAsyEi5xZHJhbnQuRmFjZXRWYWx1ZRINCgVjb3VudBgCIAEoBCL6AgoSU2VhcmNoTWF0cml4UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIjCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVySACIAQESEwoGc2FtcGxlGAMgASgESAGIAQESEgoFbGltaXQYBCABKARIAogBARISCgV1c2luZxgFIAEoCUgDiAEBEhQKB3RpbWVvdXQYBiABKARIBIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GAcgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgFiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgIIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAaIAQFCCQoHX2ZpbHRlckIJCgdfc2FtcGxlQggKBl9saW1pdEIICgZfdXNpbmdCCgoIX3RpbWVvdXRCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvciI8ChFTZWFyY2hNYXRyaXhQYWlycxInCgVwYWlycxgBIAMoCzIYLnFkcmFudC5TZWFyY2hNYXRyaXhQYWlyIlkKEFNlYXJjaE1hdHJpeFBhaXISGgoBYRgBIAEoCzIPLnFkcmFudC5Qb2ludElkEhoKAWIYAiABKAsyDy5xZHJhbnQuUG9pbnRJZBINCgVzY29yZRgDIAEoAiJtChNTZWFyY2hNYXRyaXhPZmZzZXRzEhMKC29mZnNldHNfcm93GAEgAygEEhMKC29mZnNldHNfY29sGAIgAygEEg4KBnNjb3JlcxgDIAMoAhIcCgNpZHMYBCADKAsyDy5xZHJhbnQuUG9pbnRJZCLPEwoVUG9pbnRzVXBkYXRlT3BlcmF0aW9uEj8KBnVwc2VydBgBIAEoCzItLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uUG9pbnRTdHJ1Y3RMaXN0SAASNwoRZGVsZXRlX2RlcHJlY2F0ZWQYAiABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3JCAhgBSAASPwoLc2V0X3BheWxvYWQYAyABKAsyKC5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLlNldFBheWxvYWRIABJLChFvdmVyd3JpdGVfcGF5bG9hZBgEIAEoCzIuLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uT3ZlcndyaXRlUGF5bG9hZEgAEkUKDmRlbGV0ZV9wYXlsb2FkGAUgASgLMisucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5EZWxldGVQYXlsb2FkSAASPgoYY2xlYXJfcGF5bG9hZF9kZXByZWNhdGVkGAYgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yQgIYAUgAEkUKDnVwZGF0ZV92ZWN0b3JzGAcgASgLMisucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5VcGRhdGVWZWN0b3JzSAASRQoOZGVsZXRlX3ZlY3RvcnMYCCABKAsyKy5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLkRlbGV0ZVZlY3RvcnNIABJDCg1kZWxldGVfcG9pbnRzGAkgASgLMioucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5EZWxldGVQb2ludHNIABJDCg1jbGVhcl9wYXlsb2FkGAogASgLMioucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5DbGVhclBheWxvYWRIABqEAgoPUG9pbnRTdHJ1Y3RMaXN0EiMKBnBvaW50cxgBIAMoCzITLnFkcmFudC5Qb2ludFN0cnVjdBI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgAiAEBEioKDXVwZGF0ZV9maWx0ZXIYAyABKAsyDi5xZHJhbnQuRmlsdGVySAGIAQESLAoLdXBkYXRlX21vZGUYBCABKA4yEi5xZHJhbnQuVXBkYXRlTW9kZUgCiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEAoOX3VwZGF0ZV9maWx0ZXJCDgoMX3VwZGF0ZV9tb2RlGskCCgpTZXRQYXlsb2FkEkYKB3BheWxvYWQYASADKAsyNS5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLlNldFBheWxvYWQuUGF5bG9hZEVudHJ5EjQKD3BvaW50c19zZWxlY3RvchgCIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgAiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAGIAQESEAoDa2V5GAQgASgJSAKIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCEgoQX3BvaW50c19zZWxlY3RvckIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgYKBF9rZXka1QIKEE92ZXJ3cml0ZVBheWxvYWQSTAoHcGF5bG9hZBgBIAMoCzI7LnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uT3ZlcndyaXRlUGF5bG9hZC5QYXlsb2FkRW50cnkSNAoPcG9pbnRzX3NlbGVjdG9yGAIgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9ySACIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAMgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAYgBARIQCgNrZXkYBCABKAlIAogBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUISChBfcG9pbnRzX3NlbGVjdG9yQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCBgoEX2tleRq5AQoNRGVsZXRlUGF5bG9hZBIMCgRrZXlzGAEgAygJEjQKD3BvaW50c19zZWxlY3RvchgCIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgAiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAGIAQFCEgoQX3BvaW50c19zZWxlY3RvckIVChNfc2hhcmRfa2V5X3NlbGVjdG9yGsUBCg1VcGRhdGVWZWN0b3JzEiQKBnBvaW50cxgBIAMoCzIULnFkcmFudC5Qb2ludFZlY3RvcnMSOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBARIqCg11cGRhdGVfZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlckgBiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEAoOX3VwZGF0ZV9maWx0ZXIavAEKDURlbGV0ZVZlY3RvcnMSLwoPcG9pbnRzX3NlbGVjdG9yGAEgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yEigKB3ZlY3RvcnMYAiABKAsyFy5xZHJhbnQuVmVjdG9yc1NlbGVjdG9yEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySACIAQFCFQoTX3NoYXJkX2tleV9zZWxlY3RvchqIAQoMRGVsZXRlUG9pbnRzEiYKBnBvaW50cxgBIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgAiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IaiAEKDENsZWFyUGF5bG9hZBImCgZwb2ludHMYASABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgsKCW9wZXJhdGlvbiLYAQoRVXBkYXRlQmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIxCgpvcGVyYXRpb25zGAMgAygLMh0ucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbhIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESFAoHdGltZW91dBgFIAEoBEgCiAEBQgcKBV93YWl0QgsKCV9vcmRlcmluZ0IKCghfdGltZW91dCJ6ChdQb2ludHNPcGVyYXRpb25SZXNwb25zZRIkCgZyZXN1bHQYASABKAsyFC5xZHJhbnQuVXBkYXRlUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiYAoMVXBkYXRlUmVzdWx0EhkKDG9wZXJhdGlvbl9pZBgBIAEoBEgAiAEBEiQKBnN0YXR1cxgCIAEoDjIULnFkcmFudC5VcGRhdGVTdGF0dXNCDwoNX29wZXJhdGlvbl9pZCI3CgpPcmRlclZhbHVlEg0KA2ludBgBIAEoA0gAEg8KBWZsb2F0GAIgASgBSABCCQoHdmFyaWFudCLxAgoLU2NvcmVkUG9pbnQSGwoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIxCgdwYXlsb2FkGAIgAygLMiAucWRyYW50LlNjb3JlZFBvaW50LlBheWxvYWRFbnRyeRINCgVzY29yZRgDIAEoAhIPCgd2ZXJzaW9uGAUgASgEEisKB3ZlY3RvcnMYBiABKAsyFS5xZHJhbnQuVmVjdG9yc091dHB1dEgAiAEBEigKCXNoYXJkX2tleRgHIAEoCzIQLnFkcmFudC5TaGFyZEtleUgBiAEBEiwKC29yZGVyX3ZhbHVlGAggASgLMhIucWRyYW50Lk9yZGVyVmFsdWVIAogBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIKCghfdmVjdG9yc0IMCgpfc2hhcmRfa2V5Qg4KDF9vcmRlcl92YWx1ZUoECAQQBSJcCgdHcm91cElkEhgKDnVuc2lnbmVkX3ZhbHVlGAEgASgESAASFwoNaW50ZWdlcl92YWx1ZRgCIAEoA0gAEhYKDHN0cmluZ192YWx1ZRgDIAEoCUgAQgYKBGtpbmQidAoKUG9pbnRHcm91cBIbCgJpZBgBIAEoCzIPLnFkcmFudC5Hcm91cElkEiEKBGhpdHMYAiADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSJgoGbG9va3VwGAMgASgLMhYucWRyYW50LlJldHJpZXZlZFBvaW50IjIKDEdyb3Vwc1Jlc3VsdBIiCgZncm91cHMYASADKAsyEi5xZHJhbnQuUG9pbnRHcm91cCJwCg5TZWFyY2hSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJvCg1RdWVyeVJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5TY29yZWRQb2ludBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInQKElF1ZXJ5QmF0Y2hSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuQmF0Y2hSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ2ChNRdWVyeUdyb3Vwc1Jlc3BvbnNlEiQKBnJlc3VsdBgBIAEoCzIULnFkcmFudC5Hcm91cHNSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSIyCgtCYXRjaFJlc3VsdBIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQidQoTU2VhcmNoQmF0Y2hSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuQmF0Y2hSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ3ChRTZWFyY2hHcm91cHNSZXNwb25zZRIkCgZyZXN1bHQYASABKAsyFC5xZHJhbnQuR3JvdXBzUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UibwoNQ291bnRSZXNwb25zZRIjCgZyZXN1bHQYASABKAsyEy5xZHJhbnQuQ291bnRSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSK4AQoOU2Nyb2xsUmVzcG9uc2USLgoQbmV4dF9wYWdlX29mZnNldBgBIAEoCzIPLnFkcmFudC5Qb2ludElkSACIAQESJgoGcmVzdWx0GAIgAygLMhYucWRyYW50LlJldHJpZXZlZFBvaW50EgwKBHRpbWUYAyABKAESIQoFdXNhZ2UYBCABKAsyDS5xZHJhbnQuVXNhZ2VIAYgBAUITChFfbmV4dF9wYWdlX29mZnNldEIICgZfdXNhZ2UiHAoLQ291bnRSZXN1bHQSDQoFY291bnQYASABKAQi1wIKDlJldHJpZXZlZFBvaW50EhsKAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWQSNAoHcGF5bG9hZBgCIAMoCzIjLnFkcmFudC5SZXRyaWV2ZWRQb2ludC5QYXlsb2FkRW50cnkSKwoHdmVjdG9ycxgEIAEoCzIVLnFkcmFudC5WZWN0b3JzT3V0cHV0SACIAQESKAoJc2hhcmRfa2V5GAUgASgLMhAucWRyYW50LlNoYXJkS2V5SAGIAQESLAoLb3JkZXJfdmFsdWUYBiABKAsyEi5xZHJhbnQuT3JkZXJWYWx1ZUgCiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQgoKCF92ZWN0b3JzQgwKCl9zaGFyZF9rZXlCDgoMX29yZGVyX3ZhbHVlSgQIAxAEInAKC0dldFJlc3BvbnNlEiYKBnJlc3VsdBgBIAMoCzIWLnFkcmFudC5SZXRyaWV2ZWRQb2ludBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInMKEVJlY29tbWVuZFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5TY29yZWRQb2ludBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIngKFlJlY29tbWVuZEJhdGNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LkJhdGNoUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UicgoQRGlzY292ZXJSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ3ChVEaXNjb3ZlckJhdGNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LkJhdGNoUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiegoXUmVjb21tZW5kR3JvdXBzUmVzcG9uc2USJAoGcmVzdWx0GAEgASgLMhQucWRyYW50Lkdyb3Vwc1Jlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInYKE1VwZGF0ZUJhdGNoUmVzcG9uc2USJAoGcmVzdWx0GAEgAygLMhQucWRyYW50LlVwZGF0ZVJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlImoKDUZhY2V0UmVzcG9uc2USHgoEaGl0cxgBIAMoCzIQLnFkcmFudC5GYWNldEhpdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIoEBChlTZWFyY2hNYXRyaXhQYWlyc1Jlc3BvbnNlEikKBnJlc3VsdBgBIAEoCzIZLnFkcmFudC5TZWFyY2hNYXRyaXhQYWlycxIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIoUBChtTZWFyY2hNYXRyaXhPZmZzZXRzUmVzcG9uc2USKwoGcmVzdWx0GAEgASgLMhsucWRyYW50LlNlYXJjaE1hdHJpeE9mZnNldHMSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ1Cg5Qb2ludHNTZWxlY3RvchInCgZwb2ludHMYASABKAsyFS5xZHJhbnQuUG9pbnRzSWRzTGlzdEgAEiAKBmZpbHRlchgCIAEoCzIOLnFkcmFudC5GaWx0ZXJIAEIYChZwb2ludHNfc2VsZWN0b3Jfb25lX29mIi0KDVBvaW50c0lkc0xpc3QSHAoDaWRzGAEgAygLMg8ucWRyYW50LlBvaW50SWQi1QEKC1BvaW50U3RydWN0EhsKAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWQSMQoHcGF5bG9hZBgDIAMoCzIgLnFkcmFudC5Qb2ludFN0cnVjdC5QYXlsb2FkRW50cnkSJQoHdmVjdG9ycxgEIAEoCzIPLnFkcmFudC5WZWN0b3JzSACIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCCgoIX3ZlY3RvcnNKBAgCEAMigAEKBVVzYWdlEiwKCGhhcmR3YXJlGAEgASgLMhUucWRyYW50LkhhcmR3YXJlVXNhZ2VIAIgBARIuCglpbmZlcmVuY2UYAiABKAsyFi5xZHJhbnQuSW5mZXJlbmNlVXNhZ2VIAYgBAUILCglfaGFyZHdhcmVCDAoKX2luZmVyZW5jZSKHAQoOSW5mZXJlbmNlVXNhZ2USMgoGbW9kZWxzGAEgAygLMiIucWRyYW50LkluZmVyZW5jZVVzYWdlLk1vZGVsc0VudHJ5GkEKC01vZGVsc0VudHJ5EgsKA2tleRgBIAEoCRIhCgV2YWx1ZRgCIAEoCzISLnFkcmFudC5Nb2RlbFVzYWdlOgI4ASIcCgpNb2RlbFVzYWdlEg4KBnRva2VucxgBIAEoBCK/AQoNSGFyZHdhcmVVc2FnZRILCgNjcHUYASABKAQSFwoPcGF5bG9hZF9pb19yZWFkGAIgASgEEhgKEHBheWxvYWRfaW9fd3JpdGUYAyABKAQSHQoVcGF5bG9hZF9pbmRleF9pb19yZWFkGAQgASgEEh4KFnBheWxvYWRfaW5kZXhfaW9fd3JpdGUYBSABKAQSFgoOdmVjdG9yX2lvX3JlYWQYBiABKAQSFwoPdmVjdG9yX2lvX3dyaXRlGAcgASgEKjUKEVdyaXRlT3JkZXJpbmdUeXBlEggKBFdlYWsQABIKCgZNZWRpdW0QARIKCgZTdHJvbmcQAio4CgpVcGRhdGVNb2RlEgoKBlVwc2VydBAAEg4KCkluc2VydE9ubHkQARIOCgpVcGRhdGVPbmx5EAIqOAoTUmVhZENvbnNpc3RlbmN5VHlwZRIHCgNBbGwQABIMCghNYWpvcml0eRABEgoKBlF1b3J1bRACKq0BCglGaWVsZFR5cGUSFAoQRmllbGRUeXBlS2V5d29yZBAAEhQKEEZpZWxkVHlwZUludGVnZXIQARISCg5GaWVsZFR5cGVGbG9hdBACEhAKDEZpZWxkVHlwZUdlbxADEhEKDUZpZWxkVHlwZVRleHQQBBIRCg1GaWVsZFR5cGVCb29sEAUSFQoRRmllbGRUeXBlRGF0ZXRpbWUQBhIRCg1GaWVsZFR5cGVVdWlkEAcqHgoJRGlyZWN0aW9uEgcKA0FzYxAAEggKBERlc2MQASpEChFSZWNvbW1lbmRTdHJhdGVneRIRCg1BdmVyYWdlVmVjdG9yEAASDQoJQmVzdFNjb3JlEAESDQoJU3VtU2NvcmVzEAIqGwoGRnVzaW9uEgcKA1JSRhAAEggKBERCU0YQASoUCgZTYW1wbGUSCgoGUmFuZG9tEAAqbAoMVXBkYXRlU3RhdHVzEhcKE1Vua25vd25VcGRhdGVTdGF0dXMQABIQCgxBY2tub3dsZWRnZWQQARINCglDb21wbGV0ZWQQAhIRCg1DbG9ja1JlamVjdGVkEAMSDwoLV2FpdFRpbWVvdXQQBEIVqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_collections, file_qdrant_common, file_google_protobuf_timestamp, file_json_with_int]); + fileDesc("Cgxwb2ludHMucHJvdG8SBnFkcmFudCI4Cg1Xcml0ZU9yZGVyaW5nEicKBHR5cGUYASABKA4yGS5xZHJhbnQuV3JpdGVPcmRlcmluZ1R5cGUiWQoPUmVhZENvbnNpc3RlbmN5EisKBHR5cGUYASABKA4yGy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5VHlwZUgAEhAKBmZhY3RvchgCIAEoBEgAQgcKBXZhbHVlIh0KDVNwYXJzZUluZGljZXMSDAoEZGF0YRgBIAMoDSKWAQoIRG9jdW1lbnQSDAoEdGV4dBgBIAEoCRINCgVtb2RlbBgDIAEoCRIuCgdvcHRpb25zGAQgAygLMh0ucWRyYW50LkRvY3VtZW50Lk9wdGlvbnNFbnRyeRo9CgxPcHRpb25zRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4ASKgAQoFSW1hZ2USHAoFaW1hZ2UYASABKAsyDS5xZHJhbnQuVmFsdWUSDQoFbW9kZWwYAiABKAkSKwoHb3B0aW9ucxgDIAMoCzIaLnFkcmFudC5JbWFnZS5PcHRpb25zRW50cnkaPQoMT3B0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAEitQEKD0luZmVyZW5jZU9iamVjdBIdCgZvYmplY3QYASABKAsyDS5xZHJhbnQuVmFsdWUSDQoFbW9kZWwYAiABKAkSNQoHb3B0aW9ucxgDIAMoCzIkLnFkcmFudC5JbmZlcmVuY2VPYmplY3QuT3B0aW9uc0VudHJ5Gj0KDE9wdGlvbnNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBIoMDCgZWZWN0b3ISEAoEZGF0YRgBIAMoAkICGAESLwoHaW5kaWNlcxgCIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzQgIYAUgBiAEBEh4KDXZlY3RvcnNfY291bnQYAyABKA1CAhgBSAKIAQESJAoFZGVuc2UYZSABKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3JIABImCgZzcGFyc2UYZiABKAsyFC5xZHJhbnQuU3BhcnNlVmVjdG9ySAASLwoLbXVsdGlfZGVuc2UYZyABKAsyGC5xZHJhbnQuTXVsdGlEZW5zZVZlY3RvckgAEiQKCGRvY3VtZW50GGggASgLMhAucWRyYW50LkRvY3VtZW50SAASHgoFaW1hZ2UYaSABKAsyDS5xZHJhbnQuSW1hZ2VIABIpCgZvYmplY3QYaiABKAsyFy5xZHJhbnQuSW5mZXJlbmNlT2JqZWN0SABCCAoGdmVjdG9yQgoKCF9pbmRpY2VzQhAKDl92ZWN0b3JzX2NvdW50IpgCCgxWZWN0b3JPdXRwdXQSEAoEZGF0YRgBIAMoAkICGAESLwoHaW5kaWNlcxgCIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzQgIYAUgBiAEBEh4KDXZlY3RvcnNfY291bnQYAyABKA1CAhgBSAKIAQESJAoFZGVuc2UYZSABKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3JIABImCgZzcGFyc2UYZiABKAsyFC5xZHJhbnQuU3BhcnNlVmVjdG9ySAASLwoLbXVsdGlfZGVuc2UYZyABKAsyGC5xZHJhbnQuTXVsdGlEZW5zZVZlY3RvckgAQggKBnZlY3RvckIKCghfaW5kaWNlc0IQCg5fdmVjdG9yc19jb3VudCIbCgtEZW5zZVZlY3RvchIMCgRkYXRhGAEgAygCIi8KDFNwYXJzZVZlY3RvchIOCgZ2YWx1ZXMYASADKAISDwoHaW5kaWNlcxgCIAMoDSI4ChBNdWx0aURlbnNlVmVjdG9yEiQKB3ZlY3RvcnMYASADKAsyEy5xZHJhbnQuRGVuc2VWZWN0b3IipwIKC1ZlY3RvcklucHV0Eh0KAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWRIABIkCgVkZW5zZRgCIAEoCzITLnFkcmFudC5EZW5zZVZlY3RvckgAEiYKBnNwYXJzZRgDIAEoCzIULnFkcmFudC5TcGFyc2VWZWN0b3JIABIvCgttdWx0aV9kZW5zZRgEIAEoCzIYLnFkcmFudC5NdWx0aURlbnNlVmVjdG9ySAASJAoIZG9jdW1lbnQYBSABKAsyEC5xZHJhbnQuRG9jdW1lbnRIABIeCgVpbWFnZRgGIAEoCzINLnFkcmFudC5JbWFnZUgAEikKBm9iamVjdBgHIAEoCzIXLnFkcmFudC5JbmZlcmVuY2VPYmplY3RIAEIJCgd2YXJpYW50Im4KEFNoYXJkS2V5U2VsZWN0b3ISJAoKc2hhcmRfa2V5cxgBIAMoCzIQLnFkcmFudC5TaGFyZEtleRInCghmYWxsYmFjaxgCIAEoCzIQLnFkcmFudC5TaGFyZEtleUgAiAEBQgsKCV9mYWxsYmFjayKTAwoMVXBzZXJ0UG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESIwoGcG9pbnRzGAMgAygLMhMucWRyYW50LlBvaW50U3RydWN0EiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYBSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgCiAEBEioKDXVwZGF0ZV9maWx0ZXIYBiABKAsyDi5xZHJhbnQuRmlsdGVySAOIAQESFAoHdGltZW91dBgHIAEoBEgEiAEBEiwKC3VwZGF0ZV9tb2RlGAggASgOMhIucWRyYW50LlVwZGF0ZU1vZGVIBYgBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlckIKCghfdGltZW91dEIOCgxfdXBkYXRlX21vZGUimgIKDERlbGV0ZVBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEiYKBnBvaW50cxgDIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAYgASgESAOIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXQihQMKCUdldFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSHAoDaWRzGAIgAygLMg8ucWRyYW50LlBvaW50SWQSMQoMd2l0aF9wYXlsb2FkGAQgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISNgoMd2l0aF92ZWN0b3JzGAUgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GAYgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgHIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESFAoHdGltZW91dBgIIAEoBEgDiAEBQg8KDV93aXRoX3ZlY3RvcnNCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIKCghfdGltZW91dEoECAMQBCLcAgoSVXBkYXRlUG9pbnRWZWN0b3JzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESJAoGcG9pbnRzGAMgAygLMhQucWRyYW50LlBvaW50VmVjdG9ycxIsCghvcmRlcmluZxgEIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIqCg11cGRhdGVfZmlsdGVyGAYgASgLMg4ucWRyYW50LkZpbHRlckgDiAEBEhQKB3RpbWVvdXQYByABKARIBIgBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIQCg5fdXBkYXRlX2ZpbHRlckIKCghfdGltZW91dCJNCgxQb2ludFZlY3RvcnMSGwoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIgCgd2ZWN0b3JzGAIgASgLMg8ucWRyYW50LlZlY3RvcnMi0wIKEkRlbGV0ZVBvaW50VmVjdG9ycxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEi8KD3BvaW50c19zZWxlY3RvchgDIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIoCgd2ZWN0b3JzGAQgASgLMhcucWRyYW50LlZlY3RvcnNTZWxlY3RvchIsCghvcmRlcmluZxgFIAEoCzIVLnFkcmFudC5Xcml0ZU9yZGVyaW5nSAGIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAYgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAogBARIUCgd0aW1lb3V0GAcgASgESAOIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCCgoIX3RpbWVvdXQi1wMKEFNldFBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARI2CgdwYXlsb2FkGAMgAygLMiUucWRyYW50LlNldFBheWxvYWRQb2ludHMuUGF5bG9hZEVudHJ5EjQKD3BvaW50c19zZWxlY3RvchgFIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgBiAEBEiwKCG9yZGVyaW5nGAYgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAogBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYByABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgDiAEBEhAKA2tleRgIIAEoCUgEiAEBEhQKB3RpbWVvdXQYCSABKARIBYgBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIHCgVfd2FpdEISChBfcG9pbnRzX3NlbGVjdG9yQgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgYKBF9rZXlCCgoIX3RpbWVvdXRKBAgEEAUi1wIKE0RlbGV0ZVBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARIMCgRrZXlzGAMgAygJEjQKD3BvaW50c19zZWxlY3RvchgFIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgBiAEBEiwKCG9yZGVyaW5nGAYgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAogBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYByABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgDiAEBEhQKB3RpbWVvdXQYCCABKARIBIgBAUIHCgVfd2FpdEISChBfcG9pbnRzX3NlbGVjdG9yQgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgoKCF90aW1lb3V0SgQIBBAFIqACChJDbGVhclBheWxvYWRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARImCgZwb2ludHMYAyABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgFIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESFAoHdGltZW91dBgGIAEoBEgDiAEBQgcKBV93YWl0QgsKCV9vcmRlcmluZ0IVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgoKCF90aW1lb3V0ItECChpDcmVhdGVGaWVsZEluZGV4Q29sbGVjdGlvbhIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSEQoEd2FpdBgCIAEoCEgAiAEBEhIKCmZpZWxkX25hbWUYAyABKAkSKgoKZmllbGRfdHlwZRgEIAEoDjIRLnFkcmFudC5GaWVsZFR5cGVIAYgBARI7ChJmaWVsZF9pbmRleF9wYXJhbXMYBSABKAsyGi5xZHJhbnQuUGF5bG9hZEluZGV4UGFyYW1zSAKIAQESLAoIb3JkZXJpbmcYBiABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gDiAEBEhQKB3RpbWVvdXQYByABKARIBIgBAUIHCgVfd2FpdEINCgtfZmllbGRfdHlwZUIVChNfZmllbGRfaW5kZXhfcGFyYW1zQgsKCV9vcmRlcmluZ0IKCghfdGltZW91dCLCAQoaRGVsZXRlRmllbGRJbmRleENvbGxlY3Rpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARISCgpmaWVsZF9uYW1lGAMgASgJEiwKCG9yZGVyaW5nGAQgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIAYgBARIUCgd0aW1lb3V0GAUgASgESAKIAQFCBwoFX3dhaXRCCwoJX29yZGVyaW5nQgoKCF90aW1lb3V0ItYBChlEZW5zZVZlY3RvckNyZWF0aW9uQ29uZmlnEgwKBHNpemUYASABKAQSIgoIZGlzdGFuY2UYAiABKA4yEC5xZHJhbnQuRGlzdGFuY2USOgoSbXVsdGl2ZWN0b3JfY29uZmlnGAMgASgLMhkucWRyYW50Lk11bHRpVmVjdG9yQ29uZmlnSACIAQESJwoIZGF0YXR5cGUYBCABKA4yEC5xZHJhbnQuRGF0YXR5cGVIAYgBAUIVChNfbXVsdGl2ZWN0b3JfY29uZmlnQgsKCV9kYXRhdHlwZSKIAQoaU3BhcnNlVmVjdG9yQ3JlYXRpb25Db25maWcSJwoIbW9kaWZpZXIYASABKA4yEC5xZHJhbnQuTW9kaWZpZXJIAIgBARInCghkYXRhdHlwZRgCIAEoDjIQLnFkcmFudC5EYXRhdHlwZUgBiAEBQgsKCV9tb2RpZmllckILCglfZGF0YXR5cGUiyQIKF0NyZWF0ZVZlY3Rvck5hbWVSZXF1ZXN0EhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISAGIAQESEwoLdmVjdG9yX25hbWUYAyABKAkSOQoMZGVuc2VfY29uZmlnGAQgASgLMiEucWRyYW50LkRlbnNlVmVjdG9yQ3JlYXRpb25Db25maWdIABI7Cg1zcGFyc2VfY29uZmlnGAUgASgLMiIucWRyYW50LlNwYXJzZVZlY3RvckNyZWF0aW9uQ29uZmlnSAASFAoHdGltZW91dBgGIAEoBEgCiAEBEiwKCG9yZGVyaW5nGAcgASgLMhUucWRyYW50LldyaXRlT3JkZXJpbmdIA4gBAUIPCg12ZWN0b3JfY29uZmlnQgcKBV93YWl0QgoKCF90aW1lb3V0QgsKCV9vcmRlcmluZyLAAQoXRGVsZXRlVmVjdG9yTmFtZVJlcXVlc3QSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhEKBHdhaXQYAiABKAhIAIgBARITCgt2ZWN0b3JfbmFtZRgDIAEoCRIUCgd0aW1lb3V0GAQgASgESAGIAQESLAoIb3JkZXJpbmcYBSABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gCiAEBQgcKBV93YWl0QgoKCF90aW1lb3V0QgsKCV9vcmRlcmluZyIoChZQYXlsb2FkSW5jbHVkZVNlbGVjdG9yEg4KBmZpZWxkcxgBIAMoCSIoChZQYXlsb2FkRXhjbHVkZVNlbGVjdG9yEg4KBmZpZWxkcxgBIAMoCSKhAQoTV2l0aFBheWxvYWRTZWxlY3RvchIQCgZlbmFibGUYASABKAhIABIxCgdpbmNsdWRlGAIgASgLMh4ucWRyYW50LlBheWxvYWRJbmNsdWRlU2VsZWN0b3JIABIxCgdleGNsdWRlGAMgASgLMh4ucWRyYW50LlBheWxvYWRFeGNsdWRlU2VsZWN0b3JIAEISChBzZWxlY3Rvcl9vcHRpb25zIoIBCgxOYW1lZFZlY3RvcnMSMgoHdmVjdG9ycxgBIAMoCzIhLnFkcmFudC5OYW1lZFZlY3RvcnMuVmVjdG9yc0VudHJ5Gj4KDFZlY3RvcnNFbnRyeRILCgNrZXkYASABKAkSHQoFdmFsdWUYAiABKAsyDi5xZHJhbnQuVmVjdG9yOgI4ASKUAQoSTmFtZWRWZWN0b3JzT3V0cHV0EjgKB3ZlY3RvcnMYASADKAsyJy5xZHJhbnQuTmFtZWRWZWN0b3JzT3V0cHV0LlZlY3RvcnNFbnRyeRpECgxWZWN0b3JzRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQucWRyYW50LlZlY3Rvck91dHB1dDoCOAEiZwoHVmVjdG9ycxIgCgZ2ZWN0b3IYASABKAsyDi5xZHJhbnQuVmVjdG9ySAASJwoHdmVjdG9ycxgCIAEoCzIULnFkcmFudC5OYW1lZFZlY3RvcnNIAEIRCg92ZWN0b3JzX29wdGlvbnMieQoNVmVjdG9yc091dHB1dBImCgZ2ZWN0b3IYASABKAsyFC5xZHJhbnQuVmVjdG9yT3V0cHV0SAASLQoHdmVjdG9ycxgCIAEoCzIaLnFkcmFudC5OYW1lZFZlY3RvcnNPdXRwdXRIAEIRCg92ZWN0b3JzX29wdGlvbnMiIAoPVmVjdG9yc1NlbGVjdG9yEg0KBW5hbWVzGAEgAygJImcKE1dpdGhWZWN0b3JzU2VsZWN0b3ISEAoGZW5hYmxlGAEgASgISAASKgoHaW5jbHVkZRgCIAEoCzIXLnFkcmFudC5WZWN0b3JzU2VsZWN0b3JIAEISChBzZWxlY3Rvcl9vcHRpb25zIogBChhRdWFudGl6YXRpb25TZWFyY2hQYXJhbXMSEwoGaWdub3JlGAEgASgISACIAQESFAoHcmVzY29yZRgCIAEoCEgBiAEBEhkKDG92ZXJzYW1wbGluZxgDIAEoAUgCiAEBQgkKB19pZ25vcmVCCgoIX3Jlc2NvcmVCDwoNX292ZXJzYW1wbGluZyJlChFBY29yblNlYXJjaFBhcmFtcxITCgZlbmFibGUYASABKAhIAIgBARIcCg9tYXhfc2VsZWN0aXZpdHkYAiABKAFIAYgBAUIJCgdfZW5hYmxlQhIKEF9tYXhfc2VsZWN0aXZpdHkiOwoJSWRmUGFyYW1zEiMKBmNvcnB1cxgBIAEoCzIOLnFkcmFudC5GaWx0ZXJIAIgBAUIJCgdfY29ycHVzIq4CCgxTZWFyY2hQYXJhbXMSFAoHaG5zd19lZhgBIAEoBEgAiAEBEhIKBWV4YWN0GAIgASgISAGIAQESOwoMcXVhbnRpemF0aW9uGAMgASgLMiAucWRyYW50LlF1YW50aXphdGlvblNlYXJjaFBhcmFtc0gCiAEBEhkKDGluZGV4ZWRfb25seRgEIAEoCEgDiAEBEi0KBWFjb3JuGAUgASgLMhkucWRyYW50LkFjb3JuU2VhcmNoUGFyYW1zSASIAQESIwoDaWRmGAYgASgLMhEucWRyYW50LklkZlBhcmFtc0gFiAEBQgoKCF9obnN3X2VmQggKBl9leGFjdEIPCg1fcXVhbnRpemF0aW9uQg8KDV9pbmRleGVkX29ubHlCCAoGX2Fjb3JuQgYKBF9pZGYikgUKDFNlYXJjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSDgoGdmVjdG9yGAIgAygCEh4KBmZpbHRlchgDIAEoCzIOLnFkcmFudC5GaWx0ZXISDQoFbGltaXQYBCABKAQSMQoMd2l0aF9wYXlsb2FkGAYgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISJAoGcGFyYW1zGAcgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtcxIcCg9zY29yZV90aHJlc2hvbGQYCCABKAJIAIgBARITCgZvZmZzZXQYCSABKARIAYgBARIYCgt2ZWN0b3JfbmFtZRgKIAEoCUgCiAEBEjYKDHdpdGhfdmVjdG9ycxgLIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAOIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgMIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBIgBARIUCgd0aW1lb3V0GA0gASgESAWIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGA4gASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIBogBARIyCg5zcGFyc2VfaW5kaWNlcxgPIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzSAeIAQFCEgoQX3Njb3JlX3RocmVzaG9sZEIJCgdfb2Zmc2V0Qg4KDF92ZWN0b3JfbmFtZUIPCg1fd2l0aF92ZWN0b3JzQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3JCEQoPX3NwYXJzZV9pbmRpY2VzSgQIBRAGIsgBChFTZWFyY2hCYXRjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSKwoNc2VhcmNoX3BvaW50cxgCIAMoCzIULnFkcmFudC5TZWFyY2hQb2ludHMSNgoQcmVhZF9jb25zaXN0ZW5jeRgDIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIAIgBARIUCgd0aW1lb3V0GAQgASgESAGIAQFCEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXQisgEKCldpdGhMb29rdXASEgoKY29sbGVjdGlvbhgBIAEoCRI2Cgx3aXRoX3BheWxvYWQYAiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvckgAiAEBEjYKDHdpdGhfdmVjdG9ycxgDIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAGIAQFCDwoNX3dpdGhfcGF5bG9hZEIPCg1fd2l0aF92ZWN0b3JzItUFChFTZWFyY2hQb2ludEdyb3VwcxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSDgoGdmVjdG9yGAIgAygCEh4KBmZpbHRlchgDIAEoCzIOLnFkcmFudC5GaWx0ZXISDQoFbGltaXQYBCABKA0SMQoMd2l0aF9wYXlsb2FkGAUgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISJAoGcGFyYW1zGAYgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtcxIcCg9zY29yZV90aHJlc2hvbGQYByABKAJIAIgBARIYCgt2ZWN0b3JfbmFtZRgIIAEoCUgBiAEBEjYKDHdpdGhfdmVjdG9ycxgJIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAKIAQESEAoIZ3JvdXBfYnkYCiABKAkSEgoKZ3JvdXBfc2l6ZRgLIAEoDRI2ChByZWFkX2NvbnNpc3RlbmN5GAwgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgDiAEBEiwKC3dpdGhfbG9va3VwGA0gASgLMhIucWRyYW50LldpdGhMb29rdXBIBIgBARIUCgd0aW1lb3V0GA4gASgESAWIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGA8gASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIBogBARIyCg5zcGFyc2VfaW5kaWNlcxgQIAEoCzIVLnFkcmFudC5TcGFyc2VJbmRpY2VzSAeIAQFCEgoQX3Njb3JlX3RocmVzaG9sZEIOCgxfdmVjdG9yX25hbWVCDwoNX3dpdGhfdmVjdG9yc0ITChFfcmVhZF9jb25zaXN0ZW5jeUIOCgxfd2l0aF9sb29rdXBCCgoIX3RpbWVvdXRCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIRCg9fc3BhcnNlX2luZGljZXMifQoJU3RhcnRGcm9tEg8KBWZsb2F0GAEgASgBSAASEQoHaW50ZWdlchgCIAEoA0gAEi8KCXRpbWVzdGFtcBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIABISCghkYXRldGltZRgEIAEoCUgAQgcKBXZhbHVlIooBCgdPcmRlckJ5EgsKA2tleRgBIAEoCRIpCglkaXJlY3Rpb24YAiABKA4yES5xZHJhbnQuRGlyZWN0aW9uSACIAQESKgoKc3RhcnRfZnJvbRgDIAEoCzIRLnFkcmFudC5TdGFydEZyb21IAYgBAUIMCgpfZGlyZWN0aW9uQg0KC19zdGFydF9mcm9tIo4ECgxTY3JvbGxQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEh4KBmZpbHRlchgCIAEoCzIOLnFkcmFudC5GaWx0ZXISJAoGb2Zmc2V0GAMgASgLMg8ucWRyYW50LlBvaW50SWRIAIgBARISCgVsaW1pdBgEIAEoDUgBiAEBEjEKDHdpdGhfcGF5bG9hZBgGIAEoCzIbLnFkcmFudC5XaXRoUGF5bG9hZFNlbGVjdG9yEjYKDHdpdGhfdmVjdG9ycxgHIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAKIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgIIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIA4gBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYCSABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgEiAEBEiYKCG9yZGVyX2J5GAogASgLMg8ucWRyYW50Lk9yZGVyQnlIBYgBARIUCgd0aW1lb3V0GAsgASgESAaIAQFCCQoHX29mZnNldEIICgZfbGltaXRCDwoNX3dpdGhfdmVjdG9yc0ITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgsKCV9vcmRlcl9ieUIKCghfdGltZW91dEoECAUQBiKlAQoOTG9va3VwTG9jYXRpb24SFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEhgKC3ZlY3Rvcl9uYW1lGAIgASgJSACIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAMgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAYgBAUIOCgxfdmVjdG9yX25hbWVCFQoTX3NoYXJkX2tleV9zZWxlY3RvciLNBgoPUmVjb21tZW5kUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIhCghwb3NpdGl2ZRgCIAMoCzIPLnFkcmFudC5Qb2ludElkEiEKCG5lZ2F0aXZlGAMgAygLMg8ucWRyYW50LlBvaW50SWQSHgoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgFIAEoBBIxCgx3aXRoX3BheWxvYWQYByABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYCCABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhwKD3Njb3JlX3RocmVzaG9sZBgJIAEoAkgAiAEBEhMKBm9mZnNldBgKIAEoBEgBiAEBEhIKBXVzaW5nGAsgASgJSAKIAQESNgoMd2l0aF92ZWN0b3JzGAwgASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIA4gBARIwCgtsb29rdXBfZnJvbRgNIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgEiAEBEjYKEHJlYWRfY29uc2lzdGVuY3kYDiABKAsyFy5xZHJhbnQuUmVhZENvbnNpc3RlbmN5SAWIAQESMAoIc3RyYXRlZ3kYECABKA4yGS5xZHJhbnQuUmVjb21tZW5kU3RyYXRlZ3lIBogBARIoChBwb3NpdGl2ZV92ZWN0b3JzGBEgAygLMg4ucWRyYW50LlZlY3RvchIoChBuZWdhdGl2ZV92ZWN0b3JzGBIgAygLMg4ucWRyYW50LlZlY3RvchIUCgd0aW1lb3V0GBMgASgESAeIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGBQgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JICIgBAUISChBfc2NvcmVfdGhyZXNob2xkQgkKB19vZmZzZXRCCAoGX3VzaW5nQg8KDV93aXRoX3ZlY3RvcnNCDgoMX2xvb2t1cF9mcm9tQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgsKCV9zdHJhdGVneUIKCghfdGltZW91dEIVChNfc2hhcmRfa2V5X3NlbGVjdG9ySgQIBhAHItEBChRSZWNvbW1lbmRCYXRjaFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSMQoQcmVjb21tZW5kX3BvaW50cxgCIAMoCzIXLnFkcmFudC5SZWNvbW1lbmRQb2ludHMSNgoQcmVhZF9jb25zaXN0ZW5jeRgDIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIAIgBARIUCgd0aW1lb3V0GAQgASgESAGIAQFCEwoRX3JlYWRfY29uc2lzdGVuY3lCCgoIX3RpbWVvdXQikAcKFFJlY29tbWVuZFBvaW50R3JvdXBzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIhCghwb3NpdGl2ZRgCIAMoCzIPLnFkcmFudC5Qb2ludElkEiEKCG5lZ2F0aXZlGAMgAygLMg8ucWRyYW50LlBvaW50SWQSHgoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlchINCgVsaW1pdBgFIAEoDRIxCgx3aXRoX3BheWxvYWQYBiABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchIkCgZwYXJhbXMYByABKAsyFC5xZHJhbnQuU2VhcmNoUGFyYW1zEhwKD3Njb3JlX3RocmVzaG9sZBgIIAEoAkgAiAEBEhIKBXVzaW5nGAkgASgJSAGIAQESNgoMd2l0aF92ZWN0b3JzGAogASgLMhsucWRyYW50LldpdGhWZWN0b3JzU2VsZWN0b3JIAogBARIwCgtsb29rdXBfZnJvbRgLIAEoCzIWLnFkcmFudC5Mb29rdXBMb2NhdGlvbkgDiAEBEhAKCGdyb3VwX2J5GAwgASgJEhIKCmdyb3VwX3NpemUYDSABKA0SNgoQcmVhZF9jb25zaXN0ZW5jeRgOIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBIgBARIsCgt3aXRoX2xvb2t1cBgPIAEoCzISLnFkcmFudC5XaXRoTG9va3VwSAWIAQESMAoIc3RyYXRlZ3kYESABKA4yGS5xZHJhbnQuUmVjb21tZW5kU3RyYXRlZ3lIBogBARIoChBwb3NpdGl2ZV92ZWN0b3JzGBIgAygLMg4ucWRyYW50LlZlY3RvchIoChBuZWdhdGl2ZV92ZWN0b3JzGBMgAygLMg4ucWRyYW50LlZlY3RvchIUCgd0aW1lb3V0GBQgASgESAeIAQESOQoSc2hhcmRfa2V5X3NlbGVjdG9yGBUgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JICIgBAUISChBfc2NvcmVfdGhyZXNob2xkQggKBl91c2luZ0IPCg1fd2l0aF92ZWN0b3JzQg4KDF9sb29rdXBfZnJvbUITChFfcmVhZF9jb25zaXN0ZW5jeUIOCgxfd2l0aF9sb29rdXBCCwoJX3N0cmF0ZWd5QgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3IiQQoMVGFyZ2V0VmVjdG9yEicKBnNpbmdsZRgBIAEoCzIVLnFkcmFudC5WZWN0b3JFeGFtcGxlSABCCAoGdGFyZ2V0IlsKDVZlY3RvckV4YW1wbGUSHQoCaWQYASABKAsyDy5xZHJhbnQuUG9pbnRJZEgAEiAKBnZlY3RvchgCIAEoCzIOLnFkcmFudC5WZWN0b3JIAEIJCgdleGFtcGxlImYKEkNvbnRleHRFeGFtcGxlUGFpchInCghwb3NpdGl2ZRgBIAEoCzIVLnFkcmFudC5WZWN0b3JFeGFtcGxlEicKCG5lZ2F0aXZlGAIgASgLMhUucWRyYW50LlZlY3RvckV4YW1wbGUijgUKDkRpc2NvdmVyUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIkCgZ0YXJnZXQYAiABKAsyFC5xZHJhbnQuVGFyZ2V0VmVjdG9yEisKB2NvbnRleHQYAyADKAsyGi5xZHJhbnQuQ29udGV4dEV4YW1wbGVQYWlyEh4KBmZpbHRlchgEIAEoCzIOLnFkcmFudC5GaWx0ZXISDQoFbGltaXQYBSABKAQSMQoMd2l0aF9wYXlsb2FkGAYgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3ISJAoGcGFyYW1zGAcgASgLMhQucWRyYW50LlNlYXJjaFBhcmFtcxITCgZvZmZzZXQYCCABKARIAIgBARISCgV1c2luZxgJIAEoCUgBiAEBEjYKDHdpdGhfdmVjdG9ycxgKIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAKIAQESMAoLbG9va3VwX2Zyb20YCyABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IA4gBARI2ChByZWFkX2NvbnNpc3RlbmN5GAwgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgEiAEBEhQKB3RpbWVvdXQYDSABKARIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYDiABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBQgkKB19vZmZzZXRCCAoGX3VzaW5nQg8KDV93aXRoX3ZlY3RvcnNCDgoMX2xvb2t1cF9mcm9tQhMKEV9yZWFkX2NvbnNpc3RlbmN5QgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3IizgEKE0Rpc2NvdmVyQmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEi8KD2Rpc2NvdmVyX3BvaW50cxgCIAMoCzIWLnFkcmFudC5EaXNjb3ZlclBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCKlAgoLQ291bnRQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEh4KBmZpbHRlchgCIAEoCzIOLnFkcmFudC5GaWx0ZXISEgoFZXhhY3QYAyABKAhIAIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GAQgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgBiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgFIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAKIAQESFAoHdGltZW91dBgGIAEoBEgDiAEBQggKBl9leGFjdEITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgoKCF90aW1lb3V0Ip0BCg5SZWNvbW1lbmRJbnB1dBIlCghwb3NpdGl2ZRgBIAMoCzITLnFkcmFudC5WZWN0b3JJbnB1dBIlCghuZWdhdGl2ZRgCIAMoCzITLnFkcmFudC5WZWN0b3JJbnB1dBIwCghzdHJhdGVneRgDIAEoDjIZLnFkcmFudC5SZWNvbW1lbmRTdHJhdGVneUgAiAEBQgsKCV9zdHJhdGVneSJgChBDb250ZXh0SW5wdXRQYWlyEiUKCHBvc2l0aXZlGAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0EiUKCG5lZ2F0aXZlGAIgASgLMhMucWRyYW50LlZlY3RvcklucHV0IlsKDURpc2NvdmVySW5wdXQSIwoGdGFyZ2V0GAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0EiUKB2NvbnRleHQYAiABKAsyFC5xZHJhbnQuQ29udGV4dElucHV0IjcKDENvbnRleHRJbnB1dBInCgVwYWlycxgBIAMoCzIYLnFkcmFudC5Db250ZXh0SW5wdXRQYWlyIpEBChZSZWxldmFuY2VGZWVkYmFja0lucHV0EiMKBnRhcmdldBgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dBImCghmZWVkYmFjaxgCIAMoCzIULnFkcmFudC5GZWVkYmFja0l0ZW0SKgoIc3RyYXRlZ3kYAyABKAsyGC5xZHJhbnQuRmVlZGJhY2tTdHJhdGVneSJDCgxGZWVkYmFja0l0ZW0SJAoHZXhhbXBsZRgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dBINCgVzY29yZRgCIAEoAiJNChBGZWVkYmFja1N0cmF0ZWd5Ei4KBW5haXZlGAEgASgLMh0ucWRyYW50Lk5haXZlRmVlZGJhY2tTdHJhdGVneUgAQgkKB3ZhcmlhbnQiOAoVTmFpdmVGZWVkYmFja1N0cmF0ZWd5EgkKAWEYASABKAISCQoBYhgCIAEoAhIJCgFjGAMgASgCIqIBCgdGb3JtdWxhEiYKCmV4cHJlc3Npb24YASABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbhIvCghkZWZhdWx0cxgCIAMoCzIdLnFkcmFudC5Gb3JtdWxhLkRlZmF1bHRzRW50cnkaPgoNRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBIswFCgpFeHByZXNzaW9uEhIKCGNvbnN0YW50GAEgASgCSAASEgoIdmFyaWFibGUYAiABKAlIABImCgljb25kaXRpb24YAyABKAsyES5xZHJhbnQuQ29uZGl0aW9uSAASKwoMZ2VvX2Rpc3RhbmNlGAQgASgLMhMucWRyYW50Lkdlb0Rpc3RhbmNlSAASEgoIZGF0ZXRpbWUYBSABKAlIABIWCgxkYXRldGltZV9rZXkYBiABKAlIABImCgRtdWx0GAcgASgLMhYucWRyYW50Lk11bHRFeHByZXNzaW9uSAASJAoDc3VtGAggASgLMhUucWRyYW50LlN1bUV4cHJlc3Npb25IABIkCgNkaXYYCSABKAsyFS5xZHJhbnQuRGl2RXhwcmVzc2lvbkgAEiEKA25lZxgKIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASIQoDYWJzGAsgASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIiCgRzcXJ0GAwgASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIkCgNwb3cYDSABKAsyFS5xZHJhbnQuUG93RXhwcmVzc2lvbkgAEiEKA2V4cBgOIAEoCzISLnFkcmFudC5FeHByZXNzaW9uSAASIwoFbG9nMTAYDyABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAEiAKAmxuGBAgASgLMhIucWRyYW50LkV4cHJlc3Npb25IABIyCglleHBfZGVjYXkYESABKAsyHS5xZHJhbnQuRGVjYXlQYXJhbXNFeHByZXNzaW9uSAASNAoLZ2F1c3NfZGVjYXkYEiABKAsyHS5xZHJhbnQuRGVjYXlQYXJhbXNFeHByZXNzaW9uSAASMgoJbGluX2RlY2F5GBMgASgLMh0ucWRyYW50LkRlY2F5UGFyYW1zRXhwcmVzc2lvbkgAQgkKB3ZhcmlhbnQiOwoLR2VvRGlzdGFuY2USIAoGb3JpZ2luGAEgASgLMhAucWRyYW50Lkdlb1BvaW50EgoKAnRvGAIgASgJIjIKDk11bHRFeHByZXNzaW9uEiAKBG11bHQYASADKAsyEi5xZHJhbnQuRXhwcmVzc2lvbiIwCg1TdW1FeHByZXNzaW9uEh8KA3N1bRgBIAMoCzISLnFkcmFudC5FeHByZXNzaW9uIoYBCg1EaXZFeHByZXNzaW9uEiAKBGxlZnQYASABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbhIhCgVyaWdodBgCIAEoCzISLnFkcmFudC5FeHByZXNzaW9uEhwKD2J5X3plcm9fZGVmYXVsdBgDIAEoAkgAiAEBQhIKEF9ieV96ZXJvX2RlZmF1bHQiVwoNUG93RXhwcmVzc2lvbhIgCgRiYXNlGAEgASgLMhIucWRyYW50LkV4cHJlc3Npb24SJAoIZXhwb25lbnQYAiABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbiKsAQoVRGVjYXlQYXJhbXNFeHByZXNzaW9uEh0KAXgYASABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbhInCgZ0YXJnZXQYAiABKAsyEi5xZHJhbnQuRXhwcmVzc2lvbkgAiAEBEhIKBXNjYWxlGAMgASgCSAGIAQESFQoIbWlkcG9pbnQYBCABKAJIAogBAUIJCgdfdGFyZ2V0QggKBl9zY2FsZUILCglfbWlkcG9pbnQiVQoTTmVhcmVzdElucHV0V2l0aE1tchIkCgduZWFyZXN0GAEgASgLMhMucWRyYW50LlZlY3RvcklucHV0EhgKA21tchgCIAEoCzILLnFkcmFudC5NbXIiXwoDTW1yEhYKCWRpdmVyc2l0eRgCIAEoAkgAiAEBEh0KEGNhbmRpZGF0ZXNfbGltaXQYAyABKA1IAYgBAUIMCgpfZGl2ZXJzaXR5QhMKEV9jYW5kaWRhdGVzX2xpbWl0IiwKA1JyZhIOCgFrGAEgASgNSACIAQESDwoHd2VpZ2h0cxgCIAMoAkIECgJfayLbAwoFUXVlcnkSJgoHbmVhcmVzdBgBIAEoCzITLnFkcmFudC5WZWN0b3JJbnB1dEgAEisKCXJlY29tbWVuZBgCIAEoCzIWLnFkcmFudC5SZWNvbW1lbmRJbnB1dEgAEikKCGRpc2NvdmVyGAMgASgLMhUucWRyYW50LkRpc2NvdmVySW5wdXRIABInCgdjb250ZXh0GAQgASgLMhQucWRyYW50LkNvbnRleHRJbnB1dEgAEiMKCG9yZGVyX2J5GAUgASgLMg8ucWRyYW50Lk9yZGVyQnlIABIgCgZmdXNpb24YBiABKA4yDi5xZHJhbnQuRnVzaW9uSAASIAoGc2FtcGxlGAcgASgOMg4ucWRyYW50LlNhbXBsZUgAEiIKB2Zvcm11bGEYCCABKAsyDy5xZHJhbnQuRm9ybXVsYUgAEjcKEG5lYXJlc3Rfd2l0aF9tbXIYCSABKAsyGy5xZHJhbnQuTmVhcmVzdElucHV0V2l0aE1tckgAEhoKA3JyZhgKIAEoCzILLnFkcmFudC5ScmZIABI8ChJyZWxldmFuY2VfZmVlZGJhY2sYCyABKAsyHi5xZHJhbnQuUmVsZXZhbmNlRmVlZGJhY2tJbnB1dEgAQgkKB3ZhcmlhbnQi+wIKDVByZWZldGNoUXVlcnkSJwoIcHJlZmV0Y2gYASADKAsyFS5xZHJhbnQuUHJlZmV0Y2hRdWVyeRIhCgVxdWVyeRgCIAEoCzINLnFkcmFudC5RdWVyeUgAiAEBEhIKBXVzaW5nGAMgASgJSAGIAQESIwoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlckgCiAEBEikKBnBhcmFtcxgFIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXNIA4gBARIcCg9zY29yZV90aHJlc2hvbGQYBiABKAJIBIgBARISCgVsaW1pdBgHIAEoBEgFiAEBEjAKC2xvb2t1cF9mcm9tGAggASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAaIAQFCCAoGX3F1ZXJ5QggKBl91c2luZ0IJCgdfZmlsdGVyQgkKB19wYXJhbXNCEgoQX3Njb3JlX3RocmVzaG9sZEIICgZfbGltaXRCDgoMX2xvb2t1cF9mcm9tIoUGCgtRdWVyeVBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoIcHJlZmV0Y2gYAiADKAsyFS5xZHJhbnQuUHJlZmV0Y2hRdWVyeRIhCgVxdWVyeRgDIAEoCzINLnFkcmFudC5RdWVyeUgAiAEBEhIKBXVzaW5nGAQgASgJSAGIAQESIwoGZmlsdGVyGAUgASgLMg4ucWRyYW50LkZpbHRlckgCiAEBEikKBnBhcmFtcxgGIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXNIA4gBARIcCg9zY29yZV90aHJlc2hvbGQYByABKAJIBIgBARISCgVsaW1pdBgIIAEoBEgFiAEBEhMKBm9mZnNldBgJIAEoBEgGiAEBEjYKDHdpdGhfdmVjdG9ycxgKIAEoCzIbLnFkcmFudC5XaXRoVmVjdG9yc1NlbGVjdG9ySAeIAQESNgoMd2l0aF9wYXlsb2FkGAsgASgLMhsucWRyYW50LldpdGhQYXlsb2FkU2VsZWN0b3JICIgBARI2ChByZWFkX2NvbnNpc3RlbmN5GAwgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgJiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgNIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAqIAQESMAoLbG9va3VwX2Zyb20YDiABKAsyFi5xZHJhbnQuTG9va3VwTG9jYXRpb25IC4gBARIUCgd0aW1lb3V0GA8gASgESAyIAQFCCAoGX3F1ZXJ5QggKBl91c2luZ0IJCgdfZmlsdGVyQgkKB19wYXJhbXNCEgoQX3Njb3JlX3RocmVzaG9sZEIICgZfbGltaXRCCQoHX29mZnNldEIPCg1fd2l0aF92ZWN0b3JzQg8KDV93aXRoX3BheWxvYWRCEwoRX3JlYWRfY29uc2lzdGVuY3lCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIOCgxfbG9va3VwX2Zyb21CCgoIX3RpbWVvdXQixQEKEFF1ZXJ5QmF0Y2hQb2ludHMSFwoPY29sbGVjdGlvbl9uYW1lGAEgASgJEikKDHF1ZXJ5X3BvaW50cxgCIAMoCzITLnFkcmFudC5RdWVyeVBvaW50cxI2ChByZWFkX2NvbnNpc3RlbmN5GAMgASgLMhcucWRyYW50LlJlYWRDb25zaXN0ZW5jeUgAiAEBEhQKB3RpbWVvdXQYBCABKARIAYgBAUITChFfcmVhZF9jb25zaXN0ZW5jeUIKCghfdGltZW91dCLMBgoQUXVlcnlQb2ludEdyb3VwcxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSJwoIcHJlZmV0Y2gYAiADKAsyFS5xZHJhbnQuUHJlZmV0Y2hRdWVyeRIhCgVxdWVyeRgDIAEoCzINLnFkcmFudC5RdWVyeUgAiAEBEhIKBXVzaW5nGAQgASgJSAGIAQESIwoGZmlsdGVyGAUgASgLMg4ucWRyYW50LkZpbHRlckgCiAEBEikKBnBhcmFtcxgGIAEoCzIULnFkcmFudC5TZWFyY2hQYXJhbXNIA4gBARIcCg9zY29yZV90aHJlc2hvbGQYByABKAJIBIgBARIxCgx3aXRoX3BheWxvYWQYCCABKAsyGy5xZHJhbnQuV2l0aFBheWxvYWRTZWxlY3RvchI2Cgx3aXRoX3ZlY3RvcnMYCSABKAsyGy5xZHJhbnQuV2l0aFZlY3RvcnNTZWxlY3RvckgFiAEBEjAKC2xvb2t1cF9mcm9tGAogASgLMhYucWRyYW50Lkxvb2t1cExvY2F0aW9uSAaIAQESEgoFbGltaXQYCyABKARIB4gBARIXCgpncm91cF9zaXplGAwgASgESAiIAQESEAoIZ3JvdXBfYnkYDSABKAkSNgoQcmVhZF9jb25zaXN0ZW5jeRgOIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lICYgBARIsCgt3aXRoX2xvb2t1cBgPIAEoCzISLnFkcmFudC5XaXRoTG9va3VwSAqIAQESFAoHdGltZW91dBgQIAEoBEgLiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgRIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAyIAQFCCAoGX3F1ZXJ5QggKBl91c2luZ0IJCgdfZmlsdGVyQgkKB19wYXJhbXNCEgoQX3Njb3JlX3RocmVzaG9sZEIPCg1fd2l0aF92ZWN0b3JzQg4KDF9sb29rdXBfZnJvbUIICgZfbGltaXRCDQoLX2dyb3VwX3NpemVCEwoRX3JlYWRfY29uc2lzdGVuY3lCDgoMX3dpdGhfbG9va3VwQgoKCF90aW1lb3V0QhUKE19zaGFyZF9rZXlfc2VsZWN0b3Ii4AIKC0ZhY2V0Q291bnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRILCgNrZXkYAiABKAkSIwoGZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlckgAiAEBEhIKBWxpbWl0GAQgASgESAGIAQESEgoFZXhhY3QYBSABKAhIAogBARIUCgd0aW1lb3V0GAYgASgESAOIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgHIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYCCABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgFiAEBQgkKB19maWx0ZXJCCAoGX2xpbWl0QggKBl9leGFjdEIKCghfdGltZW91dEITChFfcmVhZF9jb25zaXN0ZW5jeUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yIl4KCkZhY2V0VmFsdWUSFgoMc3RyaW5nX3ZhbHVlGAEgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgCIAEoA0gAEhQKCmJvb2xfdmFsdWUYAyABKAhIAEIJCgd2YXJpYW50IjwKCEZhY2V0SGl0EiEKBXZhbHVlGAEgASgLMhIucWRyYW50LkZhY2V0VmFsdWUSDQoFY291bnQYAiABKAQi+gIKElNlYXJjaE1hdHJpeFBvaW50cxIXCg9jb2xsZWN0aW9uX25hbWUYASABKAkSIwoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlckgAiAEBEhMKBnNhbXBsZRgDIAEoBEgBiAEBEhIKBWxpbWl0GAQgASgESAKIAQESEgoFdXNpbmcYBSABKAlIA4gBARIUCgd0aW1lb3V0GAYgASgESASIAQESNgoQcmVhZF9jb25zaXN0ZW5jeRgHIAEoCzIXLnFkcmFudC5SZWFkQ29uc2lzdGVuY3lIBYgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYCCABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgGiAEBQgkKB19maWx0ZXJCCQoHX3NhbXBsZUIICgZfbGltaXRCCAoGX3VzaW5nQgoKCF90aW1lb3V0QhMKEV9yZWFkX2NvbnNpc3RlbmN5QhUKE19zaGFyZF9rZXlfc2VsZWN0b3IiPAoRU2VhcmNoTWF0cml4UGFpcnMSJwoFcGFpcnMYASADKAsyGC5xZHJhbnQuU2VhcmNoTWF0cml4UGFpciJZChBTZWFyY2hNYXRyaXhQYWlyEhoKAWEYASABKAsyDy5xZHJhbnQuUG9pbnRJZBIaCgFiGAIgASgLMg8ucWRyYW50LlBvaW50SWQSDQoFc2NvcmUYAyABKAIibQoTU2VhcmNoTWF0cml4T2Zmc2V0cxITCgtvZmZzZXRzX3JvdxgBIAMoBBITCgtvZmZzZXRzX2NvbBgCIAMoBBIOCgZzY29yZXMYAyADKAISHAoDaWRzGAQgAygLMg8ucWRyYW50LlBvaW50SWQizxMKFVBvaW50c1VwZGF0ZU9wZXJhdGlvbhI/CgZ1cHNlcnQYASABKAsyLS5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLlBvaW50U3RydWN0TGlzdEgAEjcKEWRlbGV0ZV9kZXByZWNhdGVkGAIgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yQgIYAUgAEj8KC3NldF9wYXlsb2FkGAMgASgLMigucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5TZXRQYXlsb2FkSAASSwoRb3ZlcndyaXRlX3BheWxvYWQYBCABKAsyLi5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLk92ZXJ3cml0ZVBheWxvYWRIABJFCg5kZWxldGVfcGF5bG9hZBgFIAEoCzIrLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uRGVsZXRlUGF5bG9hZEgAEj4KGGNsZWFyX3BheWxvYWRfZGVwcmVjYXRlZBgGIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckICGAFIABJFCg51cGRhdGVfdmVjdG9ycxgHIAEoCzIrLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uVXBkYXRlVmVjdG9yc0gAEkUKDmRlbGV0ZV92ZWN0b3JzGAggASgLMisucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5EZWxldGVWZWN0b3JzSAASQwoNZGVsZXRlX3BvaW50cxgJIAEoCzIqLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uRGVsZXRlUG9pbnRzSAASQwoNY2xlYXJfcGF5bG9hZBgKIAEoCzIqLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24uQ2xlYXJQYXlsb2FkSAAahAIKD1BvaW50U3RydWN0TGlzdBIjCgZwb2ludHMYASADKAsyEy5xZHJhbnQuUG9pbnRTdHJ1Y3QSOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBARIqCg11cGRhdGVfZmlsdGVyGAMgASgLMg4ucWRyYW50LkZpbHRlckgBiAEBEiwKC3VwZGF0ZV9tb2RlGAQgASgOMhIucWRyYW50LlVwZGF0ZU1vZGVIAogBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQhAKDl91cGRhdGVfZmlsdGVyQg4KDF91cGRhdGVfbW9kZRrJAgoKU2V0UGF5bG9hZBJGCgdwYXlsb2FkGAEgAygLMjUucWRyYW50LlBvaW50c1VwZGF0ZU9wZXJhdGlvbi5TZXRQYXlsb2FkLlBheWxvYWRFbnRyeRI0Cg9wb2ludHNfc2VsZWN0b3IYAiABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3JIAIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgBiAEBEhAKA2tleRgEIAEoCUgCiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQhIKEF9wb2ludHNfc2VsZWN0b3JCFQoTX3NoYXJkX2tleV9zZWxlY3RvckIGCgRfa2V5GtUCChBPdmVyd3JpdGVQYXlsb2FkEkwKB3BheWxvYWQYASADKAsyOy5xZHJhbnQuUG9pbnRzVXBkYXRlT3BlcmF0aW9uLk92ZXJ3cml0ZVBheWxvYWQuUGF5bG9hZEVudHJ5EjQKD3BvaW50c19zZWxlY3RvchgCIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvckgAiAEBEjkKEnNoYXJkX2tleV9zZWxlY3RvchgDIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySAGIAQESEAoDa2V5GAQgASgJSAKIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCEgoQX3BvaW50c19zZWxlY3RvckIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQgYKBF9rZXkauQEKDURlbGV0ZVBheWxvYWQSDAoEa2V5cxgBIAMoCRI0Cg9wb2ludHNfc2VsZWN0b3IYAiABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3JIAIgBARI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgBiAEBQhIKEF9wb2ludHNfc2VsZWN0b3JCFQoTX3NoYXJkX2tleV9zZWxlY3RvchrFAQoNVXBkYXRlVmVjdG9ycxIkCgZwb2ludHMYASADKAsyFC5xZHJhbnQuUG9pbnRWZWN0b3JzEjkKEnNoYXJkX2tleV9zZWxlY3RvchgCIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySACIAQESKgoNdXBkYXRlX2ZpbHRlchgDIAEoCzIOLnFkcmFudC5GaWx0ZXJIAYgBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yQhAKDl91cGRhdGVfZmlsdGVyGrwBCg1EZWxldGVWZWN0b3JzEi8KD3BvaW50c19zZWxlY3RvchgBIAEoCzIWLnFkcmFudC5Qb2ludHNTZWxlY3RvchIoCgd2ZWN0b3JzGAIgASgLMhcucWRyYW50LlZlY3RvcnNTZWxlY3RvchI5ChJzaGFyZF9rZXlfc2VsZWN0b3IYAyABKAsyGC5xZHJhbnQuU2hhcmRLZXlTZWxlY3RvckgAiAEBQhUKE19zaGFyZF9rZXlfc2VsZWN0b3IaiAEKDERlbGV0ZVBvaW50cxImCgZwb2ludHMYASABKAsyFi5xZHJhbnQuUG9pbnRzU2VsZWN0b3ISOQoSc2hhcmRfa2V5X3NlbGVjdG9yGAIgASgLMhgucWRyYW50LlNoYXJkS2V5U2VsZWN0b3JIAIgBAUIVChNfc2hhcmRfa2V5X3NlbGVjdG9yGogBCgxDbGVhclBheWxvYWQSJgoGcG9pbnRzGAEgASgLMhYucWRyYW50LlBvaW50c1NlbGVjdG9yEjkKEnNoYXJkX2tleV9zZWxlY3RvchgCIAEoCzIYLnFkcmFudC5TaGFyZEtleVNlbGVjdG9ySACIAQFCFQoTX3NoYXJkX2tleV9zZWxlY3RvckILCglvcGVyYXRpb24i2AEKEVVwZGF0ZUJhdGNoUG9pbnRzEhcKD2NvbGxlY3Rpb25fbmFtZRgBIAEoCRIRCgR3YWl0GAIgASgISACIAQESMQoKb3BlcmF0aW9ucxgDIAMoCzIdLnFkcmFudC5Qb2ludHNVcGRhdGVPcGVyYXRpb24SLAoIb3JkZXJpbmcYBCABKAsyFS5xZHJhbnQuV3JpdGVPcmRlcmluZ0gBiAEBEhQKB3RpbWVvdXQYBSABKARIAogBAUIHCgVfd2FpdEILCglfb3JkZXJpbmdCCgoIX3RpbWVvdXQiegoXUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2USJAoGcmVzdWx0GAEgASgLMhQucWRyYW50LlVwZGF0ZVJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlImAKDFVwZGF0ZVJlc3VsdBIZCgxvcGVyYXRpb25faWQYASABKARIAIgBARIkCgZzdGF0dXMYAiABKA4yFC5xZHJhbnQuVXBkYXRlU3RhdHVzQg8KDV9vcGVyYXRpb25faWQiNwoKT3JkZXJWYWx1ZRINCgNpbnQYASABKANIABIPCgVmbG9hdBgCIAEoAUgAQgkKB3ZhcmlhbnQi8QIKC1Njb3JlZFBvaW50EhsKAmlkGAEgASgLMg8ucWRyYW50LlBvaW50SWQSMQoHcGF5bG9hZBgCIAMoCzIgLnFkcmFudC5TY29yZWRQb2ludC5QYXlsb2FkRW50cnkSDQoFc2NvcmUYAyABKAISDwoHdmVyc2lvbhgFIAEoBBIrCgd2ZWN0b3JzGAYgASgLMhUucWRyYW50LlZlY3RvcnNPdXRwdXRIAIgBARIoCglzaGFyZF9rZXkYByABKAsyEC5xZHJhbnQuU2hhcmRLZXlIAYgBARIsCgtvcmRlcl92YWx1ZRgIIAEoCzISLnFkcmFudC5PcmRlclZhbHVlSAKIAQEaPQoMUGF5bG9hZEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLnFkcmFudC5WYWx1ZToCOAFCCgoIX3ZlY3RvcnNCDAoKX3NoYXJkX2tleUIOCgxfb3JkZXJfdmFsdWVKBAgEEAUiXAoHR3JvdXBJZBIYCg51bnNpZ25lZF92YWx1ZRgBIAEoBEgAEhcKDWludGVnZXJfdmFsdWUYAiABKANIABIWCgxzdHJpbmdfdmFsdWUYAyABKAlIAEIGCgRraW5kInQKClBvaW50R3JvdXASGwoCaWQYASABKAsyDy5xZHJhbnQuR3JvdXBJZBIhCgRoaXRzGAIgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EiYKBmxvb2t1cBgDIAEoCzIWLnFkcmFudC5SZXRyaWV2ZWRQb2ludCIyCgxHcm91cHNSZXN1bHQSIgoGZ3JvdXBzGAEgAygLMhIucWRyYW50LlBvaW50R3JvdXAicAoOU2VhcmNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UibwoNUXVlcnlSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ0ChJRdWVyeUJhdGNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LkJhdGNoUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidgoTUXVlcnlHcm91cHNSZXNwb25zZRIkCgZyZXN1bHQYASABKAsyFC5xZHJhbnQuR3JvdXBzUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiMgoLQmF0Y2hSZXN1bHQSIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50InUKE1NlYXJjaEJhdGNoUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LkJhdGNoUmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidwoUU2VhcmNoR3JvdXBzUmVzcG9uc2USJAoGcmVzdWx0GAEgASgLMhQucWRyYW50Lkdyb3Vwc1Jlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlIm8KDUNvdW50UmVzcG9uc2USIwoGcmVzdWx0GAEgASgLMhMucWRyYW50LkNvdW50UmVzdWx0EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UiuAEKDlNjcm9sbFJlc3BvbnNlEi4KEG5leHRfcGFnZV9vZmZzZXQYASABKAsyDy5xZHJhbnQuUG9pbnRJZEgAiAEBEiYKBnJlc3VsdBgCIAMoCzIWLnFkcmFudC5SZXRyaWV2ZWRQb2ludBIMCgR0aW1lGAMgASgBEiEKBXVzYWdlGAQgASgLMg0ucWRyYW50LlVzYWdlSAGIAQFCEwoRX25leHRfcGFnZV9vZmZzZXRCCAoGX3VzYWdlIhwKC0NvdW50UmVzdWx0Eg0KBWNvdW50GAEgASgEItcCCg5SZXRyaWV2ZWRQb2ludBIbCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkEjQKB3BheWxvYWQYAiADKAsyIy5xZHJhbnQuUmV0cmlldmVkUG9pbnQuUGF5bG9hZEVudHJ5EisKB3ZlY3RvcnMYBCABKAsyFS5xZHJhbnQuVmVjdG9yc091dHB1dEgAiAEBEigKCXNoYXJkX2tleRgFIAEoCzIQLnFkcmFudC5TaGFyZEtleUgBiAEBEiwKC29yZGVyX3ZhbHVlGAYgASgLMhIucWRyYW50Lk9yZGVyVmFsdWVIAogBARo9CgxQYXlsb2FkRW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0ucWRyYW50LlZhbHVlOgI4AUIKCghfdmVjdG9yc0IMCgpfc2hhcmRfa2V5Qg4KDF9vcmRlcl92YWx1ZUoECAMQBCJwCgtHZXRSZXNwb25zZRImCgZyZXN1bHQYASADKAsyFi5xZHJhbnQuUmV0cmlldmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJzChFSZWNvbW1lbmRSZXNwb25zZRIjCgZyZXN1bHQYASADKAsyEy5xZHJhbnQuU2NvcmVkUG9pbnQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ4ChZSZWNvbW1lbmRCYXRjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5CYXRjaFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInIKEERpc2NvdmVyUmVzcG9uc2USIwoGcmVzdWx0GAEgAygLMhMucWRyYW50LlNjb3JlZFBvaW50EgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidwoVRGlzY292ZXJCYXRjaFJlc3BvbnNlEiMKBnJlc3VsdBgBIAMoCzITLnFkcmFudC5CYXRjaFJlc3VsdBIMCgR0aW1lGAIgASgBEiEKBXVzYWdlGAMgASgLMg0ucWRyYW50LlVzYWdlSACIAQFCCAoGX3VzYWdlInoKF1JlY29tbWVuZEdyb3Vwc1Jlc3BvbnNlEiQKBnJlc3VsdBgBIAEoCzIULnFkcmFudC5Hcm91cHNSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJ2ChNVcGRhdGVCYXRjaFJlc3BvbnNlEiQKBnJlc3VsdBgBIAMoCzIULnFkcmFudC5VcGRhdGVSZXN1bHQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSJqCg1GYWNldFJlc3BvbnNlEh4KBGhpdHMYASADKAsyEC5xZHJhbnQuRmFjZXRIaXQSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSKBAQoZU2VhcmNoTWF0cml4UGFpcnNSZXNwb25zZRIpCgZyZXN1bHQYASABKAsyGS5xZHJhbnQuU2VhcmNoTWF0cml4UGFpcnMSDAoEdGltZRgCIAEoARIhCgV1c2FnZRgDIAEoCzINLnFkcmFudC5Vc2FnZUgAiAEBQggKBl91c2FnZSKFAQobU2VhcmNoTWF0cml4T2Zmc2V0c1Jlc3BvbnNlEisKBnJlc3VsdBgBIAEoCzIbLnFkcmFudC5TZWFyY2hNYXRyaXhPZmZzZXRzEgwKBHRpbWUYAiABKAESIQoFdXNhZ2UYAyABKAsyDS5xZHJhbnQuVXNhZ2VIAIgBAUIICgZfdXNhZ2UidQoOUG9pbnRzU2VsZWN0b3ISJwoGcG9pbnRzGAEgASgLMhUucWRyYW50LlBvaW50c0lkc0xpc3RIABIgCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVySABCGAoWcG9pbnRzX3NlbGVjdG9yX29uZV9vZiItCg1Qb2ludHNJZHNMaXN0EhwKA2lkcxgBIAMoCzIPLnFkcmFudC5Qb2ludElkItUBCgtQb2ludFN0cnVjdBIbCgJpZBgBIAEoCzIPLnFkcmFudC5Qb2ludElkEjEKB3BheWxvYWQYAyADKAsyIC5xZHJhbnQuUG9pbnRTdHJ1Y3QuUGF5bG9hZEVudHJ5EiUKB3ZlY3RvcnMYBCABKAsyDy5xZHJhbnQuVmVjdG9yc0gAiAEBGj0KDFBheWxvYWRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5xZHJhbnQuVmFsdWU6AjgBQgoKCF92ZWN0b3JzSgQIAhADIoABCgVVc2FnZRIsCghoYXJkd2FyZRgBIAEoCzIVLnFkcmFudC5IYXJkd2FyZVVzYWdlSACIAQESLgoJaW5mZXJlbmNlGAIgASgLMhYucWRyYW50LkluZmVyZW5jZVVzYWdlSAGIAQFCCwoJX2hhcmR3YXJlQgwKCl9pbmZlcmVuY2UihwEKDkluZmVyZW5jZVVzYWdlEjIKBm1vZGVscxgBIAMoCzIiLnFkcmFudC5JbmZlcmVuY2VVc2FnZS5Nb2RlbHNFbnRyeRpBCgtNb2RlbHNFbnRyeRILCgNrZXkYASABKAkSIQoFdmFsdWUYAiABKAsyEi5xZHJhbnQuTW9kZWxVc2FnZToCOAEiHAoKTW9kZWxVc2FnZRIOCgZ0b2tlbnMYASABKAQivwEKDUhhcmR3YXJlVXNhZ2USCwoDY3B1GAEgASgEEhcKD3BheWxvYWRfaW9fcmVhZBgCIAEoBBIYChBwYXlsb2FkX2lvX3dyaXRlGAMgASgEEh0KFXBheWxvYWRfaW5kZXhfaW9fcmVhZBgEIAEoBBIeChZwYXlsb2FkX2luZGV4X2lvX3dyaXRlGAUgASgEEhYKDnZlY3Rvcl9pb19yZWFkGAYgASgEEhcKD3ZlY3Rvcl9pb193cml0ZRgHIAEoBCo1ChFXcml0ZU9yZGVyaW5nVHlwZRIICgRXZWFrEAASCgoGTWVkaXVtEAESCgoGU3Ryb25nEAIqOAoKVXBkYXRlTW9kZRIKCgZVcHNlcnQQABIOCgpJbnNlcnRPbmx5EAESDgoKVXBkYXRlT25seRACKjgKE1JlYWRDb25zaXN0ZW5jeVR5cGUSBwoDQWxsEAASDAoITWFqb3JpdHkQARIKCgZRdW9ydW0QAiqtAQoJRmllbGRUeXBlEhQKEEZpZWxkVHlwZUtleXdvcmQQABIUChBGaWVsZFR5cGVJbnRlZ2VyEAESEgoORmllbGRUeXBlRmxvYXQQAhIQCgxGaWVsZFR5cGVHZW8QAxIRCg1GaWVsZFR5cGVUZXh0EAQSEQoNRmllbGRUeXBlQm9vbBAFEhUKEUZpZWxkVHlwZURhdGV0aW1lEAYSEQoNRmllbGRUeXBlVXVpZBAHKh4KCURpcmVjdGlvbhIHCgNBc2MQABIICgREZXNjEAEqRAoRUmVjb21tZW5kU3RyYXRlZ3kSEQoNQXZlcmFnZVZlY3RvchAAEg0KCUJlc3RTY29yZRABEg0KCVN1bVNjb3JlcxACKhsKBkZ1c2lvbhIHCgNSUkYQABIICgREQlNGEAEqFAoGU2FtcGxlEgoKBlJhbmRvbRAAKmwKDFVwZGF0ZVN0YXR1cxIXChNVbmtub3duVXBkYXRlU3RhdHVzEAASEAoMQWNrbm93bGVkZ2VkEAESDQoJQ29tcGxldGVkEAISEQoNQ2xvY2tSZWplY3RlZBADEg8KC1dhaXRUaW1lb3V0EARCFaoCElFkcmFudC5DbGllbnQuR3JwY2IGcHJvdG8z", [file_collections, file_qdrant_common, file_google_protobuf_timestamp, file_json_with_int]); /** * @generated from message qdrant.WriteOrdering @@ -132,7 +132,7 @@ export type Image = Message<"qdrant.Image"> & { * * @generated from field: qdrant.Value image = 1; */ - image?: Value; + image?: Value | undefined; /** * Model name @@ -165,7 +165,7 @@ export type InferenceObject = Message<"qdrant.InferenceObject"> & { * * @generated from field: qdrant.Value object = 1; */ - object?: Value; + object?: Value | undefined; /** * Model name @@ -207,7 +207,7 @@ export type Vector = Message<"qdrant.Vector"> & { * @generated from field: optional qdrant.SparseIndices indices = 2 [deprecated = true]; * @deprecated */ - indices?: SparseIndices; + indices?: SparseIndices | undefined; /** * Number of vectors per multi vector, deprecated @@ -215,7 +215,7 @@ export type Vector = Message<"qdrant.Vector"> & { * @generated from field: optional uint32 vectors_count = 3 [deprecated = true]; * @deprecated */ - vectorsCount?: number; + vectorsCount?: number | undefined; /** * @generated from oneof qdrant.Vector.vector @@ -290,7 +290,7 @@ export type VectorOutput = Message<"qdrant.VectorOutput"> & { * @generated from field: optional qdrant.SparseIndices indices = 2 [deprecated = true]; * @deprecated */ - indices?: SparseIndices; + indices?: SparseIndices | undefined; /** * Number of vectors per multi vector, deprecated @@ -298,7 +298,7 @@ export type VectorOutput = Message<"qdrant.VectorOutput"> & { * @generated from field: optional uint32 vectors_count = 3 [deprecated = true]; * @deprecated */ - vectorsCount?: number; + vectorsCount?: number | undefined; /** * @generated from oneof qdrant.VectorOutput.vector @@ -469,7 +469,7 @@ export type ShardKeySelector = Message<"qdrant.ShardKeySelector"> & { /** * @generated from field: optional qdrant.ShardKey fallback = 2; */ - fallback?: ShardKey; + fallback?: ShardKey | undefined; }; /** @@ -495,7 +495,7 @@ export type UpsertPoints = Message<"qdrant.UpsertPoints"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * @generated from field: repeated qdrant.PointStruct points = 3; @@ -507,14 +507,14 @@ export type UpsertPoints = Message<"qdrant.UpsertPoints"> & { * * @generated from field: optional qdrant.WriteOrdering ordering = 4; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 5; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Filter to apply when updating existing points. Only points matching this filter will be updated. @@ -522,21 +522,21 @@ export type UpsertPoints = Message<"qdrant.UpsertPoints"> & { * * @generated from field: optional qdrant.Filter update_filter = 6; */ - updateFilter?: Filter; + updateFilter?: Filter | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 7; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Mode of the upsert operation: insert_only, upsert (default), update_only * * @generated from field: optional qdrant.UpdateMode update_mode = 8; */ - updateMode?: UpdateMode; + updateMode?: UpdateMode | undefined; }; /** @@ -562,35 +562,35 @@ export type DeletePoints = Message<"qdrant.DeletePoints"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Affected points * * @generated from field: qdrant.PointsSelector points = 3; */ - points?: PointsSelector; + points?: PointsSelector | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 4; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 5; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -623,35 +623,35 @@ export type GetPoints = Message<"qdrant.GetPoints"> & { * * @generated from field: qdrant.WithPayloadSelector with_payload = 4; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 5; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 6; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 7; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 8; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -677,7 +677,7 @@ export type UpdatePointVectors = Message<"qdrant.UpdatePointVectors"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * List of points and vectors to update @@ -691,28 +691,28 @@ export type UpdatePointVectors = Message<"qdrant.UpdatePointVectors"> & { * * @generated from field: optional qdrant.WriteOrdering ordering = 4; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 5; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * If specified, only points that match this filter will be updated * * @generated from field: optional qdrant.Filter update_filter = 6; */ - updateFilter?: Filter; + updateFilter?: Filter | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 7; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -731,14 +731,14 @@ export type PointVectors = Message<"qdrant.PointVectors"> & { * * @generated from field: qdrant.PointId id = 1; */ - id?: PointId; + id?: PointId | undefined; /** * Named vectors to update, leave others intact * * @generated from field: qdrant.Vectors vectors = 2; */ - vectors?: Vectors; + vectors?: Vectors | undefined; }; /** @@ -764,42 +764,42 @@ export type DeletePointVectors = Message<"qdrant.DeletePointVectors"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Affected points * * @generated from field: qdrant.PointsSelector points_selector = 3; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * List of vector names to delete * * @generated from field: qdrant.VectorsSelector vectors = 4; */ - vectors?: VectorsSelector; + vectors?: VectorsSelector | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 5; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 6; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 7; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -825,7 +825,7 @@ export type SetPayloadPoints = Message<"qdrant.SetPayloadPoints"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * New payload values @@ -839,35 +839,35 @@ export type SetPayloadPoints = Message<"qdrant.SetPayloadPoints"> & { * * @generated from field: optional qdrant.PointsSelector points_selector = 5; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 6; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 7; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Option for indicate property of payload * * @generated from field: optional string key = 8; */ - key?: string; + key?: string | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 9; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -893,7 +893,7 @@ export type DeletePayloadPoints = Message<"qdrant.DeletePayloadPoints"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * List of keys to delete @@ -907,28 +907,28 @@ export type DeletePayloadPoints = Message<"qdrant.DeletePayloadPoints"> & { * * @generated from field: optional qdrant.PointsSelector points_selector = 5; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 6; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 7; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 8; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -954,35 +954,35 @@ export type ClearPayloadPoints = Message<"qdrant.ClearPayloadPoints"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Affected points * * @generated from field: qdrant.PointsSelector points = 3; */ - points?: PointsSelector; + points?: PointsSelector | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 4; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 5; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -1008,7 +1008,7 @@ export type CreateFieldIndexCollection = Message<"qdrant.CreateFieldIndexCollect * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Field name to index @@ -1022,28 +1022,28 @@ export type CreateFieldIndexCollection = Message<"qdrant.CreateFieldIndexCollect * * @generated from field: optional qdrant.FieldType field_type = 4; */ - fieldType?: FieldType; + fieldType?: FieldType | undefined; /** * Payload index params. * * @generated from field: optional qdrant.PayloadIndexParams field_index_params = 5; */ - fieldIndexParams?: PayloadIndexParams; + fieldIndexParams?: PayloadIndexParams | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 6; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 7; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -1069,7 +1069,7 @@ export type DeleteFieldIndexCollection = Message<"qdrant.DeleteFieldIndexCollect * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Field name to delete @@ -1083,14 +1083,14 @@ export type DeleteFieldIndexCollection = Message<"qdrant.DeleteFieldIndexCollect * * @generated from field: optional qdrant.WriteOrdering ordering = 4; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Timeout for the request in seconds * * @generated from field: optional uint64 timeout = 5; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -1127,14 +1127,14 @@ export type DenseVectorCreationConfig = Message<"qdrant.DenseVectorCreationConfi * * @generated from field: optional qdrant.MultiVectorConfig multivector_config = 3; */ - multivectorConfig?: MultiVectorConfig; + multivectorConfig?: MultiVectorConfig | undefined; /** - * Data type of the vectors (Float32, Float16, Uint8) + * Data type of the vectors (Float32, Float16, Uint8, Turbo4) * * @generated from field: optional qdrant.Datatype datatype = 4; */ - datatype?: Datatype; + datatype?: Datatype | undefined; }; /** @@ -1156,14 +1156,14 @@ export type SparseVectorCreationConfig = Message<"qdrant.SparseVectorCreationCon * * @generated from field: optional qdrant.Modifier modifier = 1; */ - modifier?: Modifier; + modifier?: Modifier | undefined; /** * Data type used to store weights in the index * * @generated from field: optional qdrant.Datatype datatype = 2; */ - datatype?: Datatype; + datatype?: Datatype | undefined; }; /** @@ -1189,7 +1189,7 @@ export type CreateVectorNameRequest = Message<"qdrant.CreateVectorNameRequest"> * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Name of the new vector @@ -1226,14 +1226,14 @@ export type CreateVectorNameRequest = Message<"qdrant.CreateVectorNameRequest"> * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 7; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; }; /** @@ -1259,7 +1259,7 @@ export type DeleteVectorNameRequest = Message<"qdrant.DeleteVectorNameRequest"> * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * Name of the vector to delete @@ -1273,14 +1273,14 @@ export type DeleteVectorNameRequest = Message<"qdrant.DeleteVectorNameRequest"> * * @generated from field: optional uint64 timeout = 4; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Write ordering guarantees * * @generated from field: optional qdrant.WriteOrdering ordering = 5; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; }; /** @@ -1518,7 +1518,7 @@ export type QuantizationSearchParams = Message<"qdrant.QuantizationSearchParams" * * @generated from field: optional bool ignore = 1; */ - ignore?: boolean; + ignore?: boolean | undefined; /** * If true, use original vectors to re-score top-k results. @@ -1526,7 +1526,7 @@ export type QuantizationSearchParams = Message<"qdrant.QuantizationSearchParams" * * @generated from field: optional bool rescore = 2; */ - rescore?: boolean; + rescore?: boolean | undefined; /** * Oversampling factor for quantization. @@ -1540,7 +1540,7 @@ export type QuantizationSearchParams = Message<"qdrant.QuantizationSearchParams" * * @generated from field: optional double oversampling = 3; */ - oversampling?: number; + oversampling?: number | undefined; }; /** @@ -1563,7 +1563,7 @@ export type AcornSearchParams = Message<"qdrant.AcornSearchParams"> & { * * @generated from field: optional bool enable = 1; */ - enable?: boolean; + enable?: boolean | undefined; /** * Maximum selectivity of filters to enable ACORN. @@ -1576,7 +1576,7 @@ export type AcornSearchParams = Message<"qdrant.AcornSearchParams"> & { * * @generated from field: optional double max_selectivity = 2; */ - maxSelectivity?: number; + maxSelectivity?: number | undefined; }; /** @@ -1586,6 +1586,29 @@ export type AcornSearchParams = Message<"qdrant.AcornSearchParams"> & { export const AcornSearchParamsSchema: GenMessage = /*@__PURE__*/ messageDesc(file_points, 38); +/** + * Population over which sparse vector IDF statistics are computed for scoring - the IDF corpus. + * Only applicable to sparse vectors with the IDF modifier enabled. + * + * @generated from message qdrant.IdfParams + */ +export type IdfParams = Message<"qdrant.IdfParams"> & { + /** + * Filter defining the corpus: IDF statistics are computed over the points matching this filter. + * If unset, statistics are collection-wide (global) - same as omitting `idf` entirely. + * + * @generated from field: optional qdrant.Filter corpus = 1; + */ + corpus?: Filter | undefined; +}; + +/** + * Describes the message qdrant.IdfParams. + * Use `create(IdfParamsSchema)` to create a new message. + */ +export const IdfParamsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_points, 39); + /** * @generated from message qdrant.SearchParams */ @@ -1596,21 +1619,21 @@ export type SearchParams = Message<"qdrant.SearchParams"> & { * * @generated from field: optional uint64 hnsw_ef = 1; */ - hnswEf?: bigint; + hnswEf?: bigint | undefined; /** * Search without approximation. If set to true, search may run long but with exact results. * * @generated from field: optional bool exact = 2; */ - exact?: boolean; + exact?: boolean | undefined; /** * If set to true, search will ignore quantized vector data * * @generated from field: optional qdrant.QuantizationSearchParams quantization = 3; */ - quantization?: QuantizationSearchParams; + quantization?: QuantizationSearchParams | undefined; /** * If enabled, the engine will only perform search among indexed or small segments. @@ -1619,14 +1642,22 @@ export type SearchParams = Message<"qdrant.SearchParams"> & { * * @generated from field: optional bool indexed_only = 4; */ - indexedOnly?: boolean; + indexedOnly?: boolean | undefined; /** * ACORN search params * * @generated from field: optional qdrant.AcornSearchParams acorn = 5; */ - acorn?: AcornSearchParams; + acorn?: AcornSearchParams | undefined; + + /** + * Which population sparse vector IDF statistics are computed over. + * If unset, statistics are collection-wide (global). + * + * @generated from field: optional qdrant.IdfParams idf = 6; + */ + idf?: IdfParams | undefined; }; /** @@ -1634,7 +1665,7 @@ export type SearchParams = Message<"qdrant.SearchParams"> & { * Use `create(SearchParamsSchema)` to create a new message. */ export const SearchParamsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 39); + messageDesc(file_points, 40); /** * @generated from message qdrant.SearchPoints @@ -1659,7 +1690,7 @@ export type SearchPoints = Message<"qdrant.SearchPoints"> & { * * @generated from field: qdrant.Filter filter = 3; */ - filter?: Filter; + filter?: Filter | undefined; /** * Max number of result @@ -1673,68 +1704,68 @@ export type SearchPoints = Message<"qdrant.SearchPoints"> & { * * @generated from field: qdrant.WithPayloadSelector with_payload = 6; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Search config * * @generated from field: qdrant.SearchParams params = 7; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * If provided - cut off results with worse scores * * @generated from field: optional float score_threshold = 8; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Offset of the result * * @generated from field: optional uint64 offset = 9; */ - offset?: bigint; + offset?: bigint | undefined; /** * Which vector to use for search, if not specified - use default vector * * @generated from field: optional string vector_name = 10; */ - vectorName?: string; + vectorName?: string | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 11; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 12; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 13; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 14; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * @generated from field: optional qdrant.SparseIndices sparse_indices = 15; */ - sparseIndices?: SparseIndices; + sparseIndices?: SparseIndices | undefined; }; /** @@ -1742,7 +1773,7 @@ export type SearchPoints = Message<"qdrant.SearchPoints"> & { * Use `create(SearchPointsSchema)` to create a new message. */ export const SearchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 40); + messageDesc(file_points, 41); /** * @generated from message qdrant.SearchBatchPoints @@ -1765,14 +1796,14 @@ export type SearchBatchPoints = Message<"qdrant.SearchBatchPoints"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 3; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 4; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -1780,7 +1811,7 @@ export type SearchBatchPoints = Message<"qdrant.SearchBatchPoints"> & { * Use `create(SearchBatchPointsSchema)` to create a new message. */ export const SearchBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 41); + messageDesc(file_points, 42); /** * @generated from message qdrant.WithLookup @@ -1798,14 +1829,14 @@ export type WithLookup = Message<"qdrant.WithLookup"> & { * * @generated from field: optional qdrant.WithPayloadSelector with_payload = 2; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Options for specifying which vectors to include (or not) * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 3; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; }; /** @@ -1813,7 +1844,7 @@ export type WithLookup = Message<"qdrant.WithLookup"> & { * Use `create(WithLookupSchema)` to create a new message. */ export const WithLookupSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 42); + messageDesc(file_points, 43); /** * @generated from message qdrant.SearchPointGroups @@ -1838,7 +1869,7 @@ export type SearchPointGroups = Message<"qdrant.SearchPointGroups"> & { * * @generated from field: qdrant.Filter filter = 3; */ - filter?: Filter; + filter?: Filter | undefined; /** * Max number of result @@ -1852,35 +1883,35 @@ export type SearchPointGroups = Message<"qdrant.SearchPointGroups"> & { * * @generated from field: qdrant.WithPayloadSelector with_payload = 5; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Search config * * @generated from field: qdrant.SearchParams params = 6; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * If provided - cut off results with worse scores * * @generated from field: optional float score_threshold = 7; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Which vector to use for search, if not specified - use default vector * * @generated from field: optional string vector_name = 8; */ - vectorName?: string; + vectorName?: string | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 9; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Payload field to group by, must be a string or number field. @@ -1903,33 +1934,33 @@ export type SearchPointGroups = Message<"qdrant.SearchPointGroups"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 12; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Options for specifying how to use the group id to lookup points in another collection * * @generated from field: optional qdrant.WithLookup with_lookup = 13; */ - withLookup?: WithLookup; + withLookup?: WithLookup | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 14; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 15; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * @generated from field: optional qdrant.SparseIndices sparse_indices = 16; */ - sparseIndices?: SparseIndices; + sparseIndices?: SparseIndices | undefined; }; /** @@ -1937,7 +1968,7 @@ export type SearchPointGroups = Message<"qdrant.SearchPointGroups"> & { * Use `create(SearchPointGroupsSchema)` to create a new message. */ export const SearchPointGroupsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 43); + messageDesc(file_points, 44); /** * @generated from message qdrant.StartFrom @@ -1978,7 +2009,7 @@ export type StartFrom = Message<"qdrant.StartFrom"> & { * Use `create(StartFromSchema)` to create a new message. */ export const StartFromSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 44); + messageDesc(file_points, 45); /** * @generated from message qdrant.OrderBy @@ -1996,14 +2027,14 @@ export type OrderBy = Message<"qdrant.OrderBy"> & { * * @generated from field: optional qdrant.Direction direction = 2; */ - direction?: Direction; + direction?: Direction | undefined; /** * Start from this value * * @generated from field: optional qdrant.StartFrom start_from = 3; */ - startFrom?: StartFrom; + startFrom?: StartFrom | undefined; }; /** @@ -2011,7 +2042,7 @@ export type OrderBy = Message<"qdrant.OrderBy"> & { * Use `create(OrderBySchema)` to create a new message. */ export const OrderBySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 45); + messageDesc(file_points, 46); /** * @generated from message qdrant.ScrollPoints @@ -2027,63 +2058,63 @@ export type ScrollPoints = Message<"qdrant.ScrollPoints"> & { * * @generated from field: qdrant.Filter filter = 2; */ - filter?: Filter; + filter?: Filter | undefined; /** * Start with this ID * * @generated from field: optional qdrant.PointId offset = 3; */ - offset?: PointId; + offset?: PointId | undefined; /** * Max number of result * * @generated from field: optional uint32 limit = 4; */ - limit?: number; + limit?: number | undefined; /** * Options for specifying which payload to include or not * * @generated from field: qdrant.WithPayloadSelector with_payload = 6; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 7; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 8; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 9; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Order the records by a payload field * * @generated from field: optional qdrant.OrderBy order_by = 10; */ - orderBy?: OrderBy; + orderBy?: OrderBy | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 11; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -2091,7 +2122,7 @@ export type ScrollPoints = Message<"qdrant.ScrollPoints"> & { * Use `create(ScrollPointsSchema)` to create a new message. */ export const ScrollPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 46); + messageDesc(file_points, 47); /** * @generated from message qdrant.LookupLocation @@ -2107,14 +2138,14 @@ export type LookupLocation = Message<"qdrant.LookupLocation"> & { * * @generated from field: optional string vector_name = 2; */ - vectorName?: string; + vectorName?: string | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 3; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -2122,7 +2153,7 @@ export type LookupLocation = Message<"qdrant.LookupLocation"> & { * Use `create(LookupLocationSchema)` to create a new message. */ export const LookupLocationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 47); + messageDesc(file_points, 48); /** * @generated from message qdrant.RecommendPoints @@ -2154,7 +2185,7 @@ export type RecommendPoints = Message<"qdrant.RecommendPoints"> & { * * @generated from field: qdrant.Filter filter = 4; */ - filter?: Filter; + filter?: Filter | undefined; /** * Max number of result @@ -2168,63 +2199,63 @@ export type RecommendPoints = Message<"qdrant.RecommendPoints"> & { * * @generated from field: qdrant.WithPayloadSelector with_payload = 7; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Search config * * @generated from field: qdrant.SearchParams params = 8; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * If provided - cut off results with worse scores * * @generated from field: optional float score_threshold = 9; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Offset of the result * * @generated from field: optional uint64 offset = 10; */ - offset?: bigint; + offset?: bigint | undefined; /** * Define which vector to use for recommendation, if not specified - default vector * * @generated from field: optional string using = 11; */ - using?: string; + using?: string | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 12; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Name of the collection to use for points lookup, if not specified - use current collection * * @generated from field: optional qdrant.LookupLocation lookup_from = 13; */ - lookupFrom?: LookupLocation; + lookupFrom?: LookupLocation | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 14; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * How to use the example vectors to find the results * * @generated from field: optional qdrant.RecommendStrategy strategy = 16; */ - strategy?: RecommendStrategy; + strategy?: RecommendStrategy | undefined; /** * Look for vectors closest to those @@ -2245,14 +2276,14 @@ export type RecommendPoints = Message<"qdrant.RecommendPoints"> & { * * @generated from field: optional uint64 timeout = 19; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 20; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -2260,7 +2291,7 @@ export type RecommendPoints = Message<"qdrant.RecommendPoints"> & { * Use `create(RecommendPointsSchema)` to create a new message. */ export const RecommendPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 48); + messageDesc(file_points, 49); /** * @generated from message qdrant.RecommendBatchPoints @@ -2283,14 +2314,14 @@ export type RecommendBatchPoints = Message<"qdrant.RecommendBatchPoints"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 3; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 4; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -2298,7 +2329,7 @@ export type RecommendBatchPoints = Message<"qdrant.RecommendBatchPoints"> & { * Use `create(RecommendBatchPointsSchema)` to create a new message. */ export const RecommendBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 49); + messageDesc(file_points, 50); /** * @generated from message qdrant.RecommendPointGroups @@ -2330,7 +2361,7 @@ export type RecommendPointGroups = Message<"qdrant.RecommendPointGroups"> & { * * @generated from field: qdrant.Filter filter = 4; */ - filter?: Filter; + filter?: Filter | undefined; /** * Max number of groups in result @@ -2344,42 +2375,42 @@ export type RecommendPointGroups = Message<"qdrant.RecommendPointGroups"> & { * * @generated from field: qdrant.WithPayloadSelector with_payload = 6; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Search config * * @generated from field: qdrant.SearchParams params = 7; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * If provided - cut off results with worse scores * * @generated from field: optional float score_threshold = 8; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Define which vector to use for recommendation, if not specified - default vector * * @generated from field: optional string using = 9; */ - using?: string; + using?: string | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 10; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Name of the collection to use for points lookup, if not specified - use current collection * * @generated from field: optional qdrant.LookupLocation lookup_from = 11; */ - lookupFrom?: LookupLocation; + lookupFrom?: LookupLocation | undefined; /** * Payload field to group by, must be a string or number field. @@ -2402,21 +2433,21 @@ export type RecommendPointGroups = Message<"qdrant.RecommendPointGroups"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 14; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Options for specifying how to use the group id to lookup points in another collection * * @generated from field: optional qdrant.WithLookup with_lookup = 15; */ - withLookup?: WithLookup; + withLookup?: WithLookup | undefined; /** * How to use the example vectors to find the results * * @generated from field: optional qdrant.RecommendStrategy strategy = 17; */ - strategy?: RecommendStrategy; + strategy?: RecommendStrategy | undefined; /** * Look for vectors closest to those @@ -2437,14 +2468,14 @@ export type RecommendPointGroups = Message<"qdrant.RecommendPointGroups"> & { * * @generated from field: optional uint64 timeout = 20; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 21; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -2452,7 +2483,7 @@ export type RecommendPointGroups = Message<"qdrant.RecommendPointGroups"> & { * Use `create(RecommendPointGroupsSchema)` to create a new message. */ export const RecommendPointGroupsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 50); + messageDesc(file_points, 51); /** * @generated from message qdrant.TargetVector @@ -2475,7 +2506,7 @@ export type TargetVector = Message<"qdrant.TargetVector"> & { * Use `create(TargetVectorSchema)` to create a new message. */ export const TargetVectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 51); + messageDesc(file_points, 52); /** * @generated from message qdrant.VectorExample @@ -2504,7 +2535,7 @@ export type VectorExample = Message<"qdrant.VectorExample"> & { * Use `create(VectorExampleSchema)` to create a new message. */ export const VectorExampleSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 52); + messageDesc(file_points, 53); /** * @generated from message qdrant.ContextExamplePair @@ -2513,12 +2544,12 @@ export type ContextExamplePair = Message<"qdrant.ContextExamplePair"> & { /** * @generated from field: qdrant.VectorExample positive = 1; */ - positive?: VectorExample; + positive?: VectorExample | undefined; /** * @generated from field: qdrant.VectorExample negative = 2; */ - negative?: VectorExample; + negative?: VectorExample | undefined; }; /** @@ -2526,7 +2557,7 @@ export type ContextExamplePair = Message<"qdrant.ContextExamplePair"> & { * Use `create(ContextExamplePairSchema)` to create a new message. */ export const ContextExamplePairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 53); + messageDesc(file_points, 54); /** * @generated from message qdrant.DiscoverPoints @@ -2544,7 +2575,7 @@ export type DiscoverPoints = Message<"qdrant.DiscoverPoints"> & { * * @generated from field: qdrant.TargetVector target = 2; */ - target?: TargetVector; + target?: TargetVector | undefined; /** * Search will be constrained by these pairs of examples @@ -2558,7 +2589,7 @@ export type DiscoverPoints = Message<"qdrant.DiscoverPoints"> & { * * @generated from field: qdrant.Filter filter = 4; */ - filter?: Filter; + filter?: Filter | undefined; /** * Max number of result @@ -2572,63 +2603,63 @@ export type DiscoverPoints = Message<"qdrant.DiscoverPoints"> & { * * @generated from field: qdrant.WithPayloadSelector with_payload = 6; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Search config * * @generated from field: qdrant.SearchParams params = 7; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * Offset of the result * * @generated from field: optional uint64 offset = 8; */ - offset?: bigint; + offset?: bigint | undefined; /** * Define which vector to use for recommendation, if not specified - default vector * * @generated from field: optional string using = 9; */ - using?: string; + using?: string | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 10; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Name of the collection to use for points lookup, if not specified - use current collection * * @generated from field: optional qdrant.LookupLocation lookup_from = 11; */ - lookupFrom?: LookupLocation; + lookupFrom?: LookupLocation | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 12; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 13; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 14; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -2636,7 +2667,7 @@ export type DiscoverPoints = Message<"qdrant.DiscoverPoints"> & { * Use `create(DiscoverPointsSchema)` to create a new message. */ export const DiscoverPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 54); + messageDesc(file_points, 55); /** * @generated from message qdrant.DiscoverBatchPoints @@ -2659,14 +2690,14 @@ export type DiscoverBatchPoints = Message<"qdrant.DiscoverBatchPoints"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 3; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 4; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -2674,7 +2705,7 @@ export type DiscoverBatchPoints = Message<"qdrant.DiscoverBatchPoints"> & { * Use `create(DiscoverBatchPointsSchema)` to create a new message. */ export const DiscoverBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 55); + messageDesc(file_points, 56); /** * @generated from message qdrant.CountPoints @@ -2692,35 +2723,35 @@ export type CountPoints = Message<"qdrant.CountPoints"> & { * * @generated from field: qdrant.Filter filter = 2; */ - filter?: Filter; + filter?: Filter | undefined; /** * If `true` - return exact count, if `false` - return approximate count * * @generated from field: optional bool exact = 3; */ - exact?: boolean; + exact?: boolean | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 4; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 5; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -2728,7 +2759,7 @@ export type CountPoints = Message<"qdrant.CountPoints"> & { * Use `create(CountPointsSchema)` to create a new message. */ export const CountPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 56); + messageDesc(file_points, 57); /** * @generated from message qdrant.RecommendInput @@ -2753,7 +2784,7 @@ export type RecommendInput = Message<"qdrant.RecommendInput"> & { * * @generated from field: optional qdrant.RecommendStrategy strategy = 3; */ - strategy?: RecommendStrategy; + strategy?: RecommendStrategy | undefined; }; /** @@ -2761,7 +2792,7 @@ export type RecommendInput = Message<"qdrant.RecommendInput"> & { * Use `create(RecommendInputSchema)` to create a new message. */ export const RecommendInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 57); + messageDesc(file_points, 58); /** * @generated from message qdrant.ContextInputPair @@ -2772,14 +2803,14 @@ export type ContextInputPair = Message<"qdrant.ContextInputPair"> & { * * @generated from field: qdrant.VectorInput positive = 1; */ - positive?: VectorInput; + positive?: VectorInput | undefined; /** * Repel from this vector * * @generated from field: qdrant.VectorInput negative = 2; */ - negative?: VectorInput; + negative?: VectorInput | undefined; }; /** @@ -2787,7 +2818,7 @@ export type ContextInputPair = Message<"qdrant.ContextInputPair"> & { * Use `create(ContextInputPairSchema)` to create a new message. */ export const ContextInputPairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 58); + messageDesc(file_points, 59); /** * @generated from message qdrant.DiscoverInput @@ -2798,14 +2829,14 @@ export type DiscoverInput = Message<"qdrant.DiscoverInput"> & { * * @generated from field: qdrant.VectorInput target = 1; */ - target?: VectorInput; + target?: VectorInput | undefined; /** * Search space will be constrained by these pairs of vectors * * @generated from field: qdrant.ContextInput context = 2; */ - context?: ContextInput; + context?: ContextInput | undefined; }; /** @@ -2813,7 +2844,7 @@ export type DiscoverInput = Message<"qdrant.DiscoverInput"> & { * Use `create(DiscoverInputSchema)` to create a new message. */ export const DiscoverInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 59); + messageDesc(file_points, 60); /** * @generated from message qdrant.ContextInput @@ -2832,7 +2863,7 @@ export type ContextInput = Message<"qdrant.ContextInput"> & { * Use `create(ContextInputSchema)` to create a new message. */ export const ContextInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 60); + messageDesc(file_points, 61); /** * @generated from message qdrant.RelevanceFeedbackInput @@ -2843,7 +2874,7 @@ export type RelevanceFeedbackInput = Message<"qdrant.RelevanceFeedbackInput"> & * * @generated from field: qdrant.VectorInput target = 1; */ - target?: VectorInput; + target?: VectorInput | undefined; /** * Previous results scored by the feedback provider. @@ -2857,7 +2888,7 @@ export type RelevanceFeedbackInput = Message<"qdrant.RelevanceFeedbackInput"> & * * @generated from field: qdrant.FeedbackStrategy strategy = 3; */ - strategy?: FeedbackStrategy; + strategy?: FeedbackStrategy | undefined; }; /** @@ -2865,7 +2896,7 @@ export type RelevanceFeedbackInput = Message<"qdrant.RelevanceFeedbackInput"> & * Use `create(RelevanceFeedbackInputSchema)` to create a new message. */ export const RelevanceFeedbackInputSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 61); + messageDesc(file_points, 62); /** * @generated from message qdrant.FeedbackItem @@ -2876,7 +2907,7 @@ export type FeedbackItem = Message<"qdrant.FeedbackItem"> & { * * @generated from field: qdrant.VectorInput example = 1; */ - example?: VectorInput; + example?: VectorInput | undefined; /** * Score for this vector as determined by the feedback provider @@ -2891,7 +2922,7 @@ export type FeedbackItem = Message<"qdrant.FeedbackItem"> & { * Use `create(FeedbackItemSchema)` to create a new message. */ export const FeedbackItemSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 62); + messageDesc(file_points, 63); /** * @generated from message qdrant.FeedbackStrategy @@ -2916,7 +2947,7 @@ export type FeedbackStrategy = Message<"qdrant.FeedbackStrategy"> & { * Use `create(FeedbackStrategySchema)` to create a new message. */ export const FeedbackStrategySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 63); + messageDesc(file_points, 64); /** * @generated from message qdrant.NaiveFeedbackStrategy @@ -2943,7 +2974,7 @@ export type NaiveFeedbackStrategy = Message<"qdrant.NaiveFeedbackStrategy"> & { * Use `create(NaiveFeedbackStrategySchema)` to create a new message. */ export const NaiveFeedbackStrategySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 64); + messageDesc(file_points, 65); /** * @generated from message qdrant.Formula @@ -2952,7 +2983,7 @@ export type Formula = Message<"qdrant.Formula"> & { /** * @generated from field: qdrant.Expression expression = 1; */ - expression?: Expression; + expression?: Expression | undefined; /** * @generated from field: map defaults = 2; @@ -2965,7 +2996,7 @@ export type Formula = Message<"qdrant.Formula"> & { * Use `create(FormulaSchema)` to create a new message. */ export const FormulaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 65); + messageDesc(file_points, 66); /** * @generated from message qdrant.Expression @@ -3132,7 +3163,7 @@ export type Expression = Message<"qdrant.Expression"> & { * Use `create(ExpressionSchema)` to create a new message. */ export const ExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 66); + messageDesc(file_points, 67); /** * @generated from message qdrant.GeoDistance @@ -3141,7 +3172,7 @@ export type GeoDistance = Message<"qdrant.GeoDistance"> & { /** * @generated from field: qdrant.GeoPoint origin = 1; */ - origin?: GeoPoint; + origin?: GeoPoint | undefined; /** * @generated from field: string to = 2; @@ -3154,7 +3185,7 @@ export type GeoDistance = Message<"qdrant.GeoDistance"> & { * Use `create(GeoDistanceSchema)` to create a new message. */ export const GeoDistanceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 67); + messageDesc(file_points, 68); /** * @generated from message qdrant.MultExpression @@ -3171,7 +3202,7 @@ export type MultExpression = Message<"qdrant.MultExpression"> & { * Use `create(MultExpressionSchema)` to create a new message. */ export const MultExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 68); + messageDesc(file_points, 69); /** * @generated from message qdrant.SumExpression @@ -3188,7 +3219,7 @@ export type SumExpression = Message<"qdrant.SumExpression"> & { * Use `create(SumExpressionSchema)` to create a new message. */ export const SumExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 69); + messageDesc(file_points, 70); /** * @generated from message qdrant.DivExpression @@ -3197,17 +3228,17 @@ export type DivExpression = Message<"qdrant.DivExpression"> & { /** * @generated from field: qdrant.Expression left = 1; */ - left?: Expression; + left?: Expression | undefined; /** * @generated from field: qdrant.Expression right = 2; */ - right?: Expression; + right?: Expression | undefined; /** * @generated from field: optional float by_zero_default = 3; */ - byZeroDefault?: number; + byZeroDefault?: number | undefined; }; /** @@ -3215,7 +3246,7 @@ export type DivExpression = Message<"qdrant.DivExpression"> & { * Use `create(DivExpressionSchema)` to create a new message. */ export const DivExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 70); + messageDesc(file_points, 71); /** * @generated from message qdrant.PowExpression @@ -3224,12 +3255,12 @@ export type PowExpression = Message<"qdrant.PowExpression"> & { /** * @generated from field: qdrant.Expression base = 1; */ - base?: Expression; + base?: Expression | undefined; /** * @generated from field: qdrant.Expression exponent = 2; */ - exponent?: Expression; + exponent?: Expression | undefined; }; /** @@ -3237,7 +3268,7 @@ export type PowExpression = Message<"qdrant.PowExpression"> & { * Use `create(PowExpressionSchema)` to create a new message. */ export const PowExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 71); + messageDesc(file_points, 72); /** * @generated from message qdrant.DecayParamsExpression @@ -3248,14 +3279,14 @@ export type DecayParamsExpression = Message<"qdrant.DecayParamsExpression"> & { * * @generated from field: qdrant.Expression x = 1; */ - x?: Expression; + x?: Expression | undefined; /** * The target value to start decaying from. Defaults to 0. * * @generated from field: optional qdrant.Expression target = 2; */ - target?: Expression; + target?: Expression | undefined; /** * The scale factor of the decay, in terms of `x`. @@ -3263,7 +3294,7 @@ export type DecayParamsExpression = Message<"qdrant.DecayParamsExpression"> & { * * @generated from field: optional float scale = 3; */ - scale?: number; + scale?: number | undefined; /** * The midpoint of the decay. @@ -3272,7 +3303,7 @@ export type DecayParamsExpression = Message<"qdrant.DecayParamsExpression"> & { * * @generated from field: optional float midpoint = 4; */ - midpoint?: number; + midpoint?: number | undefined; }; /** @@ -3280,7 +3311,7 @@ export type DecayParamsExpression = Message<"qdrant.DecayParamsExpression"> & { * Use `create(DecayParamsExpressionSchema)` to create a new message. */ export const DecayParamsExpressionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 72); + messageDesc(file_points, 73); /** * @generated from message qdrant.NearestInputWithMmr @@ -3291,7 +3322,7 @@ export type NearestInputWithMmr = Message<"qdrant.NearestInputWithMmr"> & { * * @generated from field: qdrant.VectorInput nearest = 1; */ - nearest?: VectorInput; + nearest?: VectorInput | undefined; /** * Perform MMR (Maximal Marginal Relevance) reranking after search, @@ -3299,7 +3330,7 @@ export type NearestInputWithMmr = Message<"qdrant.NearestInputWithMmr"> & { * * @generated from field: qdrant.Mmr mmr = 2; */ - mmr?: Mmr; + mmr?: Mmr | undefined; }; /** @@ -3307,7 +3338,7 @@ export type NearestInputWithMmr = Message<"qdrant.NearestInputWithMmr"> & { * Use `create(NearestInputWithMmrSchema)` to create a new message. */ export const NearestInputWithMmrSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 73); + messageDesc(file_points, 74); /** * Maximal Marginal Relevance (MMR) algorithm for re-ranking the points. @@ -3327,7 +3358,7 @@ export type Mmr = Message<"qdrant.Mmr"> & { * * @generated from field: optional float diversity = 2; */ - diversity?: number; + diversity?: number | undefined; /** * The maximum number of candidates to consider for re-ranking. @@ -3336,7 +3367,7 @@ export type Mmr = Message<"qdrant.Mmr"> & { * * @generated from field: optional uint32 candidates_limit = 3; */ - candidatesLimit?: number; + candidatesLimit?: number | undefined; }; /** @@ -3344,7 +3375,7 @@ export type Mmr = Message<"qdrant.Mmr"> & { * Use `create(MmrSchema)` to create a new message. */ export const MmrSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 74); + messageDesc(file_points, 75); /** * Parameterized reciprocal rank fusion @@ -3357,7 +3388,7 @@ export type Rrf = Message<"qdrant.Rrf"> & { * * @generated from field: optional uint32 k = 1; */ - k?: number; + k?: number | undefined; /** * Weights for each prefetch source. @@ -3375,7 +3406,7 @@ export type Rrf = Message<"qdrant.Rrf"> & { * Use `create(RrfSchema)` to create a new message. */ export const RrfSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 75); + messageDesc(file_points, 76); /** * @generated from message qdrant.Query @@ -3480,7 +3511,7 @@ export type Query = Message<"qdrant.Query"> & { * Use `create(QuerySchema)` to create a new message. */ export const QuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 76); + messageDesc(file_points, 77); /** * @generated from message qdrant.PrefetchQuery @@ -3500,7 +3531,7 @@ export type PrefetchQuery = Message<"qdrant.PrefetchQuery"> & { * * @generated from field: optional qdrant.Query query = 2; */ - query?: Query; + query?: Query | undefined; /** * Define which vector to use for querying. @@ -3508,35 +3539,35 @@ export type PrefetchQuery = Message<"qdrant.PrefetchQuery"> & { * * @generated from field: optional string using = 3; */ - using?: string; + using?: string | undefined; /** * Filter conditions - return only those points that satisfy the specified conditions. * * @generated from field: optional qdrant.Filter filter = 4; */ - filter?: Filter; + filter?: Filter | undefined; /** * Search params for when there is no prefetch. * * @generated from field: optional qdrant.SearchParams params = 5; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * Return points with scores better than this threshold. * * @generated from field: optional float score_threshold = 6; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Max number of points. Default is 10 * * @generated from field: optional uint64 limit = 7; */ - limit?: bigint; + limit?: bigint | undefined; /** * The location to use for IDs lookup. @@ -3544,7 +3575,7 @@ export type PrefetchQuery = Message<"qdrant.PrefetchQuery"> & { * * @generated from field: optional qdrant.LookupLocation lookup_from = 8; */ - lookupFrom?: LookupLocation; + lookupFrom?: LookupLocation | undefined; }; /** @@ -3552,7 +3583,7 @@ export type PrefetchQuery = Message<"qdrant.PrefetchQuery"> & { * Use `create(PrefetchQuerySchema)` to create a new message. */ export const PrefetchQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 77); + messageDesc(file_points, 78); /** * @generated from message qdrant.QueryPoints @@ -3578,7 +3609,7 @@ export type QueryPoints = Message<"qdrant.QueryPoints"> & { * * @generated from field: optional qdrant.Query query = 3; */ - query?: Query; + query?: Query | undefined; /** * Define which vector to use for querying. @@ -3586,63 +3617,63 @@ export type QueryPoints = Message<"qdrant.QueryPoints"> & { * * @generated from field: optional string using = 4; */ - using?: string; + using?: string | undefined; /** * Filter conditions - return only those points that satisfy the specified conditions. * * @generated from field: optional qdrant.Filter filter = 5; */ - filter?: Filter; + filter?: Filter | undefined; /** * Search params for when there is no prefetch. * * @generated from field: optional qdrant.SearchParams params = 6; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * Return points with scores better than this threshold. * * @generated from field: optional float score_threshold = 7; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Max number of points. Default is 10. * * @generated from field: optional uint64 limit = 8; */ - limit?: bigint; + limit?: bigint | undefined; /** * Offset of the result. Skip this many points. Default is 0. * * @generated from field: optional uint64 offset = 9; */ - offset?: bigint; + offset?: bigint | undefined; /** * Options for specifying which vectors to include into the response. * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 10; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * Options for specifying which payload to include or not. * * @generated from field: optional qdrant.WithPayloadSelector with_payload = 11; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Options for specifying read consistency guarantees. * * @generated from field: optional qdrant.ReadConsistency read_consistency = 12; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Specify in which shards to look for the points. @@ -3650,7 +3681,7 @@ export type QueryPoints = Message<"qdrant.QueryPoints"> & { * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 13; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * The location to use for IDs lookup. @@ -3658,14 +3689,14 @@ export type QueryPoints = Message<"qdrant.QueryPoints"> & { * * @generated from field: optional qdrant.LookupLocation lookup_from = 14; */ - lookupFrom?: LookupLocation; + lookupFrom?: LookupLocation | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 15; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -3673,7 +3704,7 @@ export type QueryPoints = Message<"qdrant.QueryPoints"> & { * Use `create(QueryPointsSchema)` to create a new message. */ export const QueryPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 78); + messageDesc(file_points, 79); /** * @generated from message qdrant.QueryBatchPoints @@ -3694,14 +3725,14 @@ export type QueryBatchPoints = Message<"qdrant.QueryBatchPoints"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 3; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 4; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -3709,7 +3740,7 @@ export type QueryBatchPoints = Message<"qdrant.QueryBatchPoints"> & { * Use `create(QueryBatchPointsSchema)` to create a new message. */ export const QueryBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 79); + messageDesc(file_points, 80); /** * @generated from message qdrant.QueryPointGroups @@ -3735,7 +3766,7 @@ export type QueryPointGroups = Message<"qdrant.QueryPointGroups"> & { * * @generated from field: optional qdrant.Query query = 3; */ - query?: Query; + query?: Query | undefined; /** * Define which vector to use for querying. @@ -3743,42 +3774,42 @@ export type QueryPointGroups = Message<"qdrant.QueryPointGroups"> & { * * @generated from field: optional string using = 4; */ - using?: string; + using?: string | undefined; /** * Filter conditions - return only those points that satisfy the specified conditions. * * @generated from field: optional qdrant.Filter filter = 5; */ - filter?: Filter; + filter?: Filter | undefined; /** * Search params for when there is no prefetch. * * @generated from field: optional qdrant.SearchParams params = 6; */ - params?: SearchParams; + params?: SearchParams | undefined; /** * Return points with scores better than this threshold. * * @generated from field: optional float score_threshold = 7; */ - scoreThreshold?: number; + scoreThreshold?: number | undefined; /** * Options for specifying which payload to include or not * * @generated from field: qdrant.WithPayloadSelector with_payload = 8; */ - withPayload?: WithPayloadSelector; + withPayload?: WithPayloadSelector | undefined; /** * Options for specifying which vectors to include into response * * @generated from field: optional qdrant.WithVectorsSelector with_vectors = 9; */ - withVectors?: WithVectorsSelector; + withVectors?: WithVectorsSelector | undefined; /** * The location to use for IDs lookup. @@ -3786,21 +3817,21 @@ export type QueryPointGroups = Message<"qdrant.QueryPointGroups"> & { * * @generated from field: optional qdrant.LookupLocation lookup_from = 10; */ - lookupFrom?: LookupLocation; + lookupFrom?: LookupLocation | undefined; /** * Max number of points. Default is 3. * * @generated from field: optional uint64 limit = 11; */ - limit?: bigint; + limit?: bigint | undefined; /** * Maximum amount of points to return per group. Defaults to 10. * * @generated from field: optional uint64 group_size = 12; */ - groupSize?: bigint; + groupSize?: bigint | undefined; /** * Payload field to group by, must be a string or number field. @@ -3816,28 +3847,28 @@ export type QueryPointGroups = Message<"qdrant.QueryPointGroups"> & { * * @generated from field: optional qdrant.ReadConsistency read_consistency = 14; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Options for specifying how to use the group id to lookup points in another collection * * @generated from field: optional qdrant.WithLookup with_lookup = 15; */ - withLookup?: WithLookup; + withLookup?: WithLookup | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 16; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 17; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -3845,7 +3876,7 @@ export type QueryPointGroups = Message<"qdrant.QueryPointGroups"> & { * Use `create(QueryPointGroupsSchema)` to create a new message. */ export const QueryPointGroupsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 80); + messageDesc(file_points, 81); /** * @generated from message qdrant.FacetCounts @@ -3870,42 +3901,42 @@ export type FacetCounts = Message<"qdrant.FacetCounts"> & { * * @generated from field: optional qdrant.Filter filter = 3; */ - filter?: Filter; + filter?: Filter | undefined; /** * Max number of facets. Default is 10. * * @generated from field: optional uint64 limit = 4; */ - limit?: bigint; + limit?: bigint | undefined; /** * If true, return exact counts, slower but useful for debugging purposes. Default is false. * * @generated from field: optional bool exact = 5; */ - exact?: boolean; + exact?: boolean | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 7; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 8; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -3913,7 +3944,7 @@ export type FacetCounts = Message<"qdrant.FacetCounts"> & { * Use `create(FacetCountsSchema)` to create a new message. */ export const FacetCountsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 81); + messageDesc(file_points, 82); /** * @generated from message qdrant.FacetValue @@ -3954,7 +3985,7 @@ export type FacetValue = Message<"qdrant.FacetValue"> & { * Use `create(FacetValueSchema)` to create a new message. */ export const FacetValueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 82); + messageDesc(file_points, 83); /** * @generated from message qdrant.FacetHit @@ -3965,7 +3996,7 @@ export type FacetHit = Message<"qdrant.FacetHit"> & { * * @generated from field: qdrant.FacetValue value = 1; */ - value?: FacetValue; + value?: FacetValue | undefined; /** * Number of points with this value @@ -3980,7 +4011,7 @@ export type FacetHit = Message<"qdrant.FacetHit"> & { * Use `create(FacetHitSchema)` to create a new message. */ export const FacetHitSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 83); + messageDesc(file_points, 84); /** * @generated from message qdrant.SearchMatrixPoints @@ -3998,49 +4029,49 @@ export type SearchMatrixPoints = Message<"qdrant.SearchMatrixPoints"> & { * * @generated from field: optional qdrant.Filter filter = 2; */ - filter?: Filter; + filter?: Filter | undefined; /** * How many points to select and search within. Default is 10. * * @generated from field: optional uint64 sample = 3; */ - sample?: bigint; + sample?: bigint | undefined; /** * How many neighbours per sample to find. Default is 3. * * @generated from field: optional uint64 limit = 4; */ - limit?: bigint; + limit?: bigint | undefined; /** * Define which vector to use for querying. If missing, the default vector is used. * * @generated from field: optional string using = 5; */ - using?: string; + using?: string | undefined; /** * If set, overrides global timeout setting for this request. Unit is seconds. * * @generated from field: optional uint64 timeout = 6; */ - timeout?: bigint; + timeout?: bigint | undefined; /** * Options for specifying read consistency guarantees * * @generated from field: optional qdrant.ReadConsistency read_consistency = 7; */ - readConsistency?: ReadConsistency; + readConsistency?: ReadConsistency | undefined; /** * Specify in which shards to look for the points, if not specified - look in all shards * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 8; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -4048,7 +4079,7 @@ export type SearchMatrixPoints = Message<"qdrant.SearchMatrixPoints"> & { * Use `create(SearchMatrixPointsSchema)` to create a new message. */ export const SearchMatrixPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 84); + messageDesc(file_points, 85); /** * @generated from message qdrant.SearchMatrixPairs @@ -4067,7 +4098,7 @@ export type SearchMatrixPairs = Message<"qdrant.SearchMatrixPairs"> & { * Use `create(SearchMatrixPairsSchema)` to create a new message. */ export const SearchMatrixPairsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 85); + messageDesc(file_points, 86); /** * @generated from message qdrant.SearchMatrixPair @@ -4078,14 +4109,14 @@ export type SearchMatrixPair = Message<"qdrant.SearchMatrixPair"> & { * * @generated from field: qdrant.PointId a = 1; */ - a?: PointId; + a?: PointId | undefined; /** * second id of the pair * * @generated from field: qdrant.PointId b = 2; */ - b?: PointId; + b?: PointId | undefined; /** * score of the pair @@ -4100,7 +4131,7 @@ export type SearchMatrixPair = Message<"qdrant.SearchMatrixPair"> & { * Use `create(SearchMatrixPairSchema)` to create a new message. */ export const SearchMatrixPairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 86); + messageDesc(file_points, 87); /** * @generated from message qdrant.SearchMatrixOffsets @@ -4140,7 +4171,7 @@ export type SearchMatrixOffsets = Message<"qdrant.SearchMatrixOffsets"> & { * Use `create(SearchMatrixOffsetsSchema)` to create a new message. */ export const SearchMatrixOffsetsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 87); + messageDesc(file_points, 88); /** * @generated from message qdrant.PointsUpdateOperation @@ -4219,7 +4250,7 @@ export type PointsUpdateOperation = Message<"qdrant.PointsUpdateOperation"> & { * Use `create(PointsUpdateOperationSchema)` to create a new message. */ export const PointsUpdateOperationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88); + messageDesc(file_points, 89); /** * @generated from message qdrant.PointsUpdateOperation.PointStructList @@ -4235,7 +4266,7 @@ export type PointsUpdateOperation_PointStructList = Message<"qdrant.PointsUpdate * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 2; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Filter to apply when updating existing points. Only points matching this filter will be updated. @@ -4243,14 +4274,14 @@ export type PointsUpdateOperation_PointStructList = Message<"qdrant.PointsUpdate * * @generated from field: optional qdrant.Filter update_filter = 3; */ - updateFilter?: Filter; + updateFilter?: Filter | undefined; /** * Mode of the upsert operation: insert_only, upsert (default), update_only * * @generated from field: optional qdrant.UpdateMode update_mode = 4; */ - updateMode?: UpdateMode; + updateMode?: UpdateMode | undefined; }; /** @@ -4258,7 +4289,7 @@ export type PointsUpdateOperation_PointStructList = Message<"qdrant.PointsUpdate * Use `create(PointsUpdateOperation_PointStructListSchema)` to create a new message. */ export const PointsUpdateOperation_PointStructListSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 0); + messageDesc(file_points, 89, 0); /** * @generated from message qdrant.PointsUpdateOperation.SetPayload @@ -4274,21 +4305,21 @@ export type PointsUpdateOperation_SetPayload = Message<"qdrant.PointsUpdateOpera * * @generated from field: optional qdrant.PointsSelector points_selector = 2; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 3; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Option for indicate property of payload * * @generated from field: optional string key = 4; */ - key?: string; + key?: string | undefined; }; /** @@ -4296,7 +4327,7 @@ export type PointsUpdateOperation_SetPayload = Message<"qdrant.PointsUpdateOpera * Use `create(PointsUpdateOperation_SetPayloadSchema)` to create a new message. */ export const PointsUpdateOperation_SetPayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 1); + messageDesc(file_points, 89, 1); /** * @generated from message qdrant.PointsUpdateOperation.OverwritePayload @@ -4312,21 +4343,21 @@ export type PointsUpdateOperation_OverwritePayload = Message<"qdrant.PointsUpdat * * @generated from field: optional qdrant.PointsSelector points_selector = 2; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 3; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * Option for indicate property of payload * * @generated from field: optional string key = 4; */ - key?: string; + key?: string | undefined; }; /** @@ -4334,7 +4365,7 @@ export type PointsUpdateOperation_OverwritePayload = Message<"qdrant.PointsUpdat * Use `create(PointsUpdateOperation_OverwritePayloadSchema)` to create a new message. */ export const PointsUpdateOperation_OverwritePayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 2); + messageDesc(file_points, 89, 2); /** * @generated from message qdrant.PointsUpdateOperation.DeletePayload @@ -4350,14 +4381,14 @@ export type PointsUpdateOperation_DeletePayload = Message<"qdrant.PointsUpdateOp * * @generated from field: optional qdrant.PointsSelector points_selector = 2; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 3; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -4365,7 +4396,7 @@ export type PointsUpdateOperation_DeletePayload = Message<"qdrant.PointsUpdateOp * Use `create(PointsUpdateOperation_DeletePayloadSchema)` to create a new message. */ export const PointsUpdateOperation_DeletePayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 3); + messageDesc(file_points, 89, 3); /** * @generated from message qdrant.PointsUpdateOperation.UpdateVectors @@ -4383,14 +4414,14 @@ export type PointsUpdateOperation_UpdateVectors = Message<"qdrant.PointsUpdateOp * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 2; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; /** * If specified, only points that match this filter will be updated * * @generated from field: optional qdrant.Filter update_filter = 3; */ - updateFilter?: Filter; + updateFilter?: Filter | undefined; }; /** @@ -4398,7 +4429,7 @@ export type PointsUpdateOperation_UpdateVectors = Message<"qdrant.PointsUpdateOp * Use `create(PointsUpdateOperation_UpdateVectorsSchema)` to create a new message. */ export const PointsUpdateOperation_UpdateVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 4); + messageDesc(file_points, 89, 4); /** * @generated from message qdrant.PointsUpdateOperation.DeleteVectors @@ -4409,21 +4440,21 @@ export type PointsUpdateOperation_DeleteVectors = Message<"qdrant.PointsUpdateOp * * @generated from field: qdrant.PointsSelector points_selector = 1; */ - pointsSelector?: PointsSelector; + pointsSelector?: PointsSelector | undefined; /** * List of vector names to delete * * @generated from field: qdrant.VectorsSelector vectors = 2; */ - vectors?: VectorsSelector; + vectors?: VectorsSelector | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 3; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -4431,7 +4462,7 @@ export type PointsUpdateOperation_DeleteVectors = Message<"qdrant.PointsUpdateOp * Use `create(PointsUpdateOperation_DeleteVectorsSchema)` to create a new message. */ export const PointsUpdateOperation_DeleteVectorsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 5); + messageDesc(file_points, 89, 5); /** * @generated from message qdrant.PointsUpdateOperation.DeletePoints @@ -4442,14 +4473,14 @@ export type PointsUpdateOperation_DeletePoints = Message<"qdrant.PointsUpdateOpe * * @generated from field: qdrant.PointsSelector points = 1; */ - points?: PointsSelector; + points?: PointsSelector | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 2; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -4457,7 +4488,7 @@ export type PointsUpdateOperation_DeletePoints = Message<"qdrant.PointsUpdateOpe * Use `create(PointsUpdateOperation_DeletePointsSchema)` to create a new message. */ export const PointsUpdateOperation_DeletePointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 6); + messageDesc(file_points, 89, 6); /** * @generated from message qdrant.PointsUpdateOperation.ClearPayload @@ -4468,14 +4499,14 @@ export type PointsUpdateOperation_ClearPayload = Message<"qdrant.PointsUpdateOpe * * @generated from field: qdrant.PointsSelector points = 1; */ - points?: PointsSelector; + points?: PointsSelector | undefined; /** * Option for custom sharding to specify used shard keys * * @generated from field: optional qdrant.ShardKeySelector shard_key_selector = 2; */ - shardKeySelector?: ShardKeySelector; + shardKeySelector?: ShardKeySelector | undefined; }; /** @@ -4483,7 +4514,7 @@ export type PointsUpdateOperation_ClearPayload = Message<"qdrant.PointsUpdateOpe * Use `create(PointsUpdateOperation_ClearPayloadSchema)` to create a new message. */ export const PointsUpdateOperation_ClearPayloadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 88, 7); + messageDesc(file_points, 89, 7); /** * @generated from message qdrant.UpdateBatchPoints @@ -4501,7 +4532,7 @@ export type UpdateBatchPoints = Message<"qdrant.UpdateBatchPoints"> & { * * @generated from field: optional bool wait = 2; */ - wait?: boolean; + wait?: boolean | undefined; /** * @generated from field: repeated qdrant.PointsUpdateOperation operations = 3; @@ -4513,14 +4544,14 @@ export type UpdateBatchPoints = Message<"qdrant.UpdateBatchPoints"> & { * * @generated from field: optional qdrant.WriteOrdering ordering = 4; */ - ordering?: WriteOrdering; + ordering?: WriteOrdering | undefined; /** * Timeout for the operation in seconds * * @generated from field: optional uint64 timeout = 5; */ - timeout?: bigint; + timeout?: bigint | undefined; }; /** @@ -4528,7 +4559,7 @@ export type UpdateBatchPoints = Message<"qdrant.UpdateBatchPoints"> & { * Use `create(UpdateBatchPointsSchema)` to create a new message. */ export const UpdateBatchPointsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 89); + messageDesc(file_points, 90); /** * @generated from message qdrant.PointsOperationResponse @@ -4537,7 +4568,7 @@ export type PointsOperationResponse = Message<"qdrant.PointsOperationResponse"> /** * @generated from field: qdrant.UpdateResult result = 1; */ - result?: UpdateResult; + result?: UpdateResult | undefined; /** * Time spent to process @@ -4549,7 +4580,7 @@ export type PointsOperationResponse = Message<"qdrant.PointsOperationResponse"> /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4557,7 +4588,7 @@ export type PointsOperationResponse = Message<"qdrant.PointsOperationResponse"> * Use `create(PointsOperationResponseSchema)` to create a new message. */ export const PointsOperationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 90); + messageDesc(file_points, 91); /** * @generated from message qdrant.UpdateResult @@ -4568,7 +4599,7 @@ export type UpdateResult = Message<"qdrant.UpdateResult"> & { * * @generated from field: optional uint64 operation_id = 1; */ - operationId?: bigint; + operationId?: bigint | undefined; /** * Operation status @@ -4583,7 +4614,7 @@ export type UpdateResult = Message<"qdrant.UpdateResult"> & { * Use `create(UpdateResultSchema)` to create a new message. */ export const UpdateResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 91); + messageDesc(file_points, 92); /** * @generated from message qdrant.OrderValue @@ -4612,7 +4643,7 @@ export type OrderValue = Message<"qdrant.OrderValue"> & { * Use `create(OrderValueSchema)` to create a new message. */ export const OrderValueSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 92); + messageDesc(file_points, 93); /** * @generated from message qdrant.ScoredPoint @@ -4623,7 +4654,7 @@ export type ScoredPoint = Message<"qdrant.ScoredPoint"> & { * * @generated from field: qdrant.PointId id = 1; */ - id?: PointId; + id?: PointId | undefined; /** * Payload @@ -4651,21 +4682,21 @@ export type ScoredPoint = Message<"qdrant.ScoredPoint"> & { * * @generated from field: optional qdrant.VectorsOutput vectors = 6; */ - vectors?: VectorsOutput; + vectors?: VectorsOutput | undefined; /** * Shard key * * @generated from field: optional qdrant.ShardKey shard_key = 7; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; /** * Order by value * * @generated from field: optional qdrant.OrderValue order_value = 8; */ - orderValue?: OrderValue; + orderValue?: OrderValue | undefined; }; /** @@ -4673,7 +4704,7 @@ export type ScoredPoint = Message<"qdrant.ScoredPoint"> & { * Use `create(ScoredPointSchema)` to create a new message. */ export const ScoredPointSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 93); + messageDesc(file_points, 94); /** * @generated from message qdrant.GroupId @@ -4714,7 +4745,7 @@ export type GroupId = Message<"qdrant.GroupId"> & { * Use `create(GroupIdSchema)` to create a new message. */ export const GroupIdSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 94); + messageDesc(file_points, 95); /** * @generated from message qdrant.PointGroup @@ -4725,7 +4756,7 @@ export type PointGroup = Message<"qdrant.PointGroup"> & { * * @generated from field: qdrant.GroupId id = 1; */ - id?: GroupId; + id?: GroupId | undefined; /** * Points in the group @@ -4739,7 +4770,7 @@ export type PointGroup = Message<"qdrant.PointGroup"> & { * * @generated from field: qdrant.RetrievedPoint lookup = 3; */ - lookup?: RetrievedPoint; + lookup?: RetrievedPoint | undefined; }; /** @@ -4747,7 +4778,7 @@ export type PointGroup = Message<"qdrant.PointGroup"> & { * Use `create(PointGroupSchema)` to create a new message. */ export const PointGroupSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 95); + messageDesc(file_points, 96); /** * @generated from message qdrant.GroupsResult @@ -4766,7 +4797,7 @@ export type GroupsResult = Message<"qdrant.GroupsResult"> & { * Use `create(GroupsResultSchema)` to create a new message. */ export const GroupsResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 96); + messageDesc(file_points, 97); /** * @generated from message qdrant.SearchResponse @@ -4787,7 +4818,7 @@ export type SearchResponse = Message<"qdrant.SearchResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4795,7 +4826,7 @@ export type SearchResponse = Message<"qdrant.SearchResponse"> & { * Use `create(SearchResponseSchema)` to create a new message. */ export const SearchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 97); + messageDesc(file_points, 98); /** * @generated from message qdrant.QueryResponse @@ -4816,7 +4847,7 @@ export type QueryResponse = Message<"qdrant.QueryResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4824,7 +4855,7 @@ export type QueryResponse = Message<"qdrant.QueryResponse"> & { * Use `create(QueryResponseSchema)` to create a new message. */ export const QueryResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 98); + messageDesc(file_points, 99); /** * @generated from message qdrant.QueryBatchResponse @@ -4845,7 +4876,7 @@ export type QueryBatchResponse = Message<"qdrant.QueryBatchResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4853,7 +4884,7 @@ export type QueryBatchResponse = Message<"qdrant.QueryBatchResponse"> & { * Use `create(QueryBatchResponseSchema)` to create a new message. */ export const QueryBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 99); + messageDesc(file_points, 100); /** * @generated from message qdrant.QueryGroupsResponse @@ -4862,7 +4893,7 @@ export type QueryGroupsResponse = Message<"qdrant.QueryGroupsResponse"> & { /** * @generated from field: qdrant.GroupsResult result = 1; */ - result?: GroupsResult; + result?: GroupsResult | undefined; /** * Time spent to process @@ -4874,7 +4905,7 @@ export type QueryGroupsResponse = Message<"qdrant.QueryGroupsResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4882,7 +4913,7 @@ export type QueryGroupsResponse = Message<"qdrant.QueryGroupsResponse"> & { * Use `create(QueryGroupsResponseSchema)` to create a new message. */ export const QueryGroupsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 100); + messageDesc(file_points, 101); /** * @generated from message qdrant.BatchResult @@ -4899,7 +4930,7 @@ export type BatchResult = Message<"qdrant.BatchResult"> & { * Use `create(BatchResultSchema)` to create a new message. */ export const BatchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 101); + messageDesc(file_points, 102); /** * @generated from message qdrant.SearchBatchResponse @@ -4920,7 +4951,7 @@ export type SearchBatchResponse = Message<"qdrant.SearchBatchResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4928,7 +4959,7 @@ export type SearchBatchResponse = Message<"qdrant.SearchBatchResponse"> & { * Use `create(SearchBatchResponseSchema)` to create a new message. */ export const SearchBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 102); + messageDesc(file_points, 103); /** * @generated from message qdrant.SearchGroupsResponse @@ -4937,7 +4968,7 @@ export type SearchGroupsResponse = Message<"qdrant.SearchGroupsResponse"> & { /** * @generated from field: qdrant.GroupsResult result = 1; */ - result?: GroupsResult; + result?: GroupsResult | undefined; /** * Time spent to process @@ -4949,7 +4980,7 @@ export type SearchGroupsResponse = Message<"qdrant.SearchGroupsResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4957,7 +4988,7 @@ export type SearchGroupsResponse = Message<"qdrant.SearchGroupsResponse"> & { * Use `create(SearchGroupsResponseSchema)` to create a new message. */ export const SearchGroupsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 103); + messageDesc(file_points, 104); /** * @generated from message qdrant.CountResponse @@ -4966,7 +4997,7 @@ export type CountResponse = Message<"qdrant.CountResponse"> & { /** * @generated from field: qdrant.CountResult result = 1; */ - result?: CountResult; + result?: CountResult | undefined; /** * Time spent to process @@ -4978,7 +5009,7 @@ export type CountResponse = Message<"qdrant.CountResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -4986,7 +5017,7 @@ export type CountResponse = Message<"qdrant.CountResponse"> & { * Use `create(CountResponseSchema)` to create a new message. */ export const CountResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 104); + messageDesc(file_points, 105); /** * @generated from message qdrant.ScrollResponse @@ -4997,7 +5028,7 @@ export type ScrollResponse = Message<"qdrant.ScrollResponse"> & { * * @generated from field: optional qdrant.PointId next_page_offset = 1; */ - nextPageOffset?: PointId; + nextPageOffset?: PointId | undefined; /** * @generated from field: repeated qdrant.RetrievedPoint result = 2; @@ -5014,7 +5045,7 @@ export type ScrollResponse = Message<"qdrant.ScrollResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 4; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5022,7 +5053,7 @@ export type ScrollResponse = Message<"qdrant.ScrollResponse"> & { * Use `create(ScrollResponseSchema)` to create a new message. */ export const ScrollResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 105); + messageDesc(file_points, 106); /** * @generated from message qdrant.CountResult @@ -5039,7 +5070,7 @@ export type CountResult = Message<"qdrant.CountResult"> & { * Use `create(CountResultSchema)` to create a new message. */ export const CountResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 106); + messageDesc(file_points, 107); /** * @generated from message qdrant.RetrievedPoint @@ -5048,7 +5079,7 @@ export type RetrievedPoint = Message<"qdrant.RetrievedPoint"> & { /** * @generated from field: qdrant.PointId id = 1; */ - id?: PointId; + id?: PointId | undefined; /** * @generated from field: map payload = 2; @@ -5058,21 +5089,21 @@ export type RetrievedPoint = Message<"qdrant.RetrievedPoint"> & { /** * @generated from field: optional qdrant.VectorsOutput vectors = 4; */ - vectors?: VectorsOutput; + vectors?: VectorsOutput | undefined; /** * Shard key * * @generated from field: optional qdrant.ShardKey shard_key = 5; */ - shardKey?: ShardKey; + shardKey?: ShardKey | undefined; /** * Order-by value * * @generated from field: optional qdrant.OrderValue order_value = 6; */ - orderValue?: OrderValue; + orderValue?: OrderValue | undefined; }; /** @@ -5080,7 +5111,7 @@ export type RetrievedPoint = Message<"qdrant.RetrievedPoint"> & { * Use `create(RetrievedPointSchema)` to create a new message. */ export const RetrievedPointSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 107); + messageDesc(file_points, 108); /** * @generated from message qdrant.GetResponse @@ -5101,7 +5132,7 @@ export type GetResponse = Message<"qdrant.GetResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5109,7 +5140,7 @@ export type GetResponse = Message<"qdrant.GetResponse"> & { * Use `create(GetResponseSchema)` to create a new message. */ export const GetResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 108); + messageDesc(file_points, 109); /** * @generated from message qdrant.RecommendResponse @@ -5130,7 +5161,7 @@ export type RecommendResponse = Message<"qdrant.RecommendResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5138,7 +5169,7 @@ export type RecommendResponse = Message<"qdrant.RecommendResponse"> & { * Use `create(RecommendResponseSchema)` to create a new message. */ export const RecommendResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 109); + messageDesc(file_points, 110); /** * @generated from message qdrant.RecommendBatchResponse @@ -5159,7 +5190,7 @@ export type RecommendBatchResponse = Message<"qdrant.RecommendBatchResponse"> & /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5167,7 +5198,7 @@ export type RecommendBatchResponse = Message<"qdrant.RecommendBatchResponse"> & * Use `create(RecommendBatchResponseSchema)` to create a new message. */ export const RecommendBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 110); + messageDesc(file_points, 111); /** * @generated from message qdrant.DiscoverResponse @@ -5188,7 +5219,7 @@ export type DiscoverResponse = Message<"qdrant.DiscoverResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5196,7 +5227,7 @@ export type DiscoverResponse = Message<"qdrant.DiscoverResponse"> & { * Use `create(DiscoverResponseSchema)` to create a new message. */ export const DiscoverResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 111); + messageDesc(file_points, 112); /** * @generated from message qdrant.DiscoverBatchResponse @@ -5217,7 +5248,7 @@ export type DiscoverBatchResponse = Message<"qdrant.DiscoverBatchResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5225,7 +5256,7 @@ export type DiscoverBatchResponse = Message<"qdrant.DiscoverBatchResponse"> & { * Use `create(DiscoverBatchResponseSchema)` to create a new message. */ export const DiscoverBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 112); + messageDesc(file_points, 113); /** * @generated from message qdrant.RecommendGroupsResponse @@ -5234,7 +5265,7 @@ export type RecommendGroupsResponse = Message<"qdrant.RecommendGroupsResponse"> /** * @generated from field: qdrant.GroupsResult result = 1; */ - result?: GroupsResult; + result?: GroupsResult | undefined; /** * Time spent to process @@ -5246,7 +5277,7 @@ export type RecommendGroupsResponse = Message<"qdrant.RecommendGroupsResponse"> /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5254,7 +5285,7 @@ export type RecommendGroupsResponse = Message<"qdrant.RecommendGroupsResponse"> * Use `create(RecommendGroupsResponseSchema)` to create a new message. */ export const RecommendGroupsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 113); + messageDesc(file_points, 114); /** * @generated from message qdrant.UpdateBatchResponse @@ -5275,7 +5306,7 @@ export type UpdateBatchResponse = Message<"qdrant.UpdateBatchResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5283,7 +5314,7 @@ export type UpdateBatchResponse = Message<"qdrant.UpdateBatchResponse"> & { * Use `create(UpdateBatchResponseSchema)` to create a new message. */ export const UpdateBatchResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 114); + messageDesc(file_points, 115); /** * @generated from message qdrant.FacetResponse @@ -5304,7 +5335,7 @@ export type FacetResponse = Message<"qdrant.FacetResponse"> & { /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5312,7 +5343,7 @@ export type FacetResponse = Message<"qdrant.FacetResponse"> & { * Use `create(FacetResponseSchema)` to create a new message. */ export const FacetResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 115); + messageDesc(file_points, 116); /** * @generated from message qdrant.SearchMatrixPairsResponse @@ -5321,7 +5352,7 @@ export type SearchMatrixPairsResponse = Message<"qdrant.SearchMatrixPairsRespons /** * @generated from field: qdrant.SearchMatrixPairs result = 1; */ - result?: SearchMatrixPairs; + result?: SearchMatrixPairs | undefined; /** * Time spent to process @@ -5333,7 +5364,7 @@ export type SearchMatrixPairsResponse = Message<"qdrant.SearchMatrixPairsRespons /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5341,7 +5372,7 @@ export type SearchMatrixPairsResponse = Message<"qdrant.SearchMatrixPairsRespons * Use `create(SearchMatrixPairsResponseSchema)` to create a new message. */ export const SearchMatrixPairsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 116); + messageDesc(file_points, 117); /** * @generated from message qdrant.SearchMatrixOffsetsResponse @@ -5350,7 +5381,7 @@ export type SearchMatrixOffsetsResponse = Message<"qdrant.SearchMatrixOffsetsRes /** * @generated from field: qdrant.SearchMatrixOffsets result = 1; */ - result?: SearchMatrixOffsets; + result?: SearchMatrixOffsets | undefined; /** * Time spent to process @@ -5362,7 +5393,7 @@ export type SearchMatrixOffsetsResponse = Message<"qdrant.SearchMatrixOffsetsRes /** * @generated from field: optional qdrant.Usage usage = 3; */ - usage?: Usage; + usage?: Usage | undefined; }; /** @@ -5370,7 +5401,7 @@ export type SearchMatrixOffsetsResponse = Message<"qdrant.SearchMatrixOffsetsRes * Use `create(SearchMatrixOffsetsResponseSchema)` to create a new message. */ export const SearchMatrixOffsetsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 117); + messageDesc(file_points, 118); /** * @generated from message qdrant.PointsSelector @@ -5399,7 +5430,7 @@ export type PointsSelector = Message<"qdrant.PointsSelector"> & { * Use `create(PointsSelectorSchema)` to create a new message. */ export const PointsSelectorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 118); + messageDesc(file_points, 119); /** * @generated from message qdrant.PointsIdsList @@ -5416,7 +5447,7 @@ export type PointsIdsList = Message<"qdrant.PointsIdsList"> & { * Use `create(PointsIdsListSchema)` to create a new message. */ export const PointsIdsListSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 119); + messageDesc(file_points, 120); /** * @generated from message qdrant.PointStruct @@ -5425,7 +5456,7 @@ export type PointStruct = Message<"qdrant.PointStruct"> & { /** * @generated from field: qdrant.PointId id = 1; */ - id?: PointId; + id?: PointId | undefined; /** * @generated from field: map payload = 3; @@ -5435,7 +5466,7 @@ export type PointStruct = Message<"qdrant.PointStruct"> & { /** * @generated from field: optional qdrant.Vectors vectors = 4; */ - vectors?: Vectors; + vectors?: Vectors | undefined; }; /** @@ -5443,7 +5474,7 @@ export type PointStruct = Message<"qdrant.PointStruct"> & { * Use `create(PointStructSchema)` to create a new message. */ export const PointStructSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 120); + messageDesc(file_points, 121); /** * --------------------------------------------- @@ -5456,12 +5487,12 @@ export type Usage = Message<"qdrant.Usage"> & { /** * @generated from field: optional qdrant.HardwareUsage hardware = 1; */ - hardware?: HardwareUsage; + hardware?: HardwareUsage | undefined; /** * @generated from field: optional qdrant.InferenceUsage inference = 2; */ - inference?: InferenceUsage; + inference?: InferenceUsage | undefined; }; /** @@ -5469,7 +5500,7 @@ export type Usage = Message<"qdrant.Usage"> & { * Use `create(UsageSchema)` to create a new message. */ export const UsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 121); + messageDesc(file_points, 122); /** * @generated from message qdrant.InferenceUsage @@ -5486,7 +5517,7 @@ export type InferenceUsage = Message<"qdrant.InferenceUsage"> & { * Use `create(InferenceUsageSchema)` to create a new message. */ export const InferenceUsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 122); + messageDesc(file_points, 123); /** * @generated from message qdrant.ModelUsage @@ -5503,7 +5534,7 @@ export type ModelUsage = Message<"qdrant.ModelUsage"> & { * Use `create(ModelUsageSchema)` to create a new message. */ export const ModelUsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 123); + messageDesc(file_points, 124); /** * @generated from message qdrant.HardwareUsage @@ -5550,7 +5581,7 @@ export type HardwareUsage = Message<"qdrant.HardwareUsage"> & { * Use `create(HardwareUsageSchema)` to create a new message. */ export const HardwareUsageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_points, 124); + messageDesc(file_points, 125); /** * @generated from enum qdrant.WriteOrderingType diff --git a/packages/js-client-grpc/src/proto/points_service_pb.ts b/packages/js-client-grpc/src/proto/points_service_pb.ts index 0e84ab0..1aa0978 100644 --- a/packages/js-client-grpc/src/proto/points_service_pb.ts +++ b/packages/js-client-grpc/src/proto/points_service_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file points_service.proto (package qdrant, syntax proto3) /* eslint-disable */ @@ -11,7 +11,7 @@ import { file_points } from "./points_pb.js"; * Describes the file points_service.proto. */ export const file_points_service: GenFile = /*@__PURE__*/ - fileDesc("ChRwb2ludHNfc2VydmljZS5wcm90bxIGcWRyYW50Mq0RCgZQb2ludHMSQQoGVXBzZXJ0EhQucWRyYW50LlVwc2VydFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEkEKBkRlbGV0ZRIULnFkcmFudC5EZWxldGVQb2ludHMaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABIvCgNHZXQSES5xZHJhbnQuR2V0UG9pbnRzGhMucWRyYW50LkdldFJlc3BvbnNlIgASTgoNVXBkYXRlVmVjdG9ycxIaLnFkcmFudC5VcGRhdGVQb2ludFZlY3RvcnMaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABJOCg1EZWxldGVWZWN0b3JzEhoucWRyYW50LkRlbGV0ZVBvaW50VmVjdG9ycxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEkkKClNldFBheWxvYWQSGC5xZHJhbnQuU2V0UGF5bG9hZFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEk8KEE92ZXJ3cml0ZVBheWxvYWQSGC5xZHJhbnQuU2V0UGF5bG9hZFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEk8KDURlbGV0ZVBheWxvYWQSGy5xZHJhbnQuRGVsZXRlUGF5bG9hZFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEk0KDENsZWFyUGF5bG9hZBIaLnFkcmFudC5DbGVhclBheWxvYWRQb2ludHMaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABJZChBDcmVhdGVGaWVsZEluZGV4EiIucWRyYW50LkNyZWF0ZUZpZWxkSW5kZXhDb2xsZWN0aW9uGh8ucWRyYW50LlBvaW50c09wZXJhdGlvblJlc3BvbnNlIgASWQoQRGVsZXRlRmllbGRJbmRleBIiLnFkcmFudC5EZWxldGVGaWVsZEluZGV4Q29sbGVjdGlvbhofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAElYKEENyZWF0ZVZlY3Rvck5hbWUSHy5xZHJhbnQuQ3JlYXRlVmVjdG9yTmFtZVJlcXVlc3QaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABJWChBEZWxldGVWZWN0b3JOYW1lEh8ucWRyYW50LkRlbGV0ZVZlY3Rvck5hbWVSZXF1ZXN0Gh8ucWRyYW50LlBvaW50c09wZXJhdGlvblJlc3BvbnNlIgASOAoGU2VhcmNoEhQucWRyYW50LlNlYXJjaFBvaW50cxoWLnFkcmFudC5TZWFyY2hSZXNwb25zZSIAEkcKC1NlYXJjaEJhdGNoEhkucWRyYW50LlNlYXJjaEJhdGNoUG9pbnRzGhsucWRyYW50LlNlYXJjaEJhdGNoUmVzcG9uc2UiABJJCgxTZWFyY2hHcm91cHMSGS5xZHJhbnQuU2VhcmNoUG9pbnRHcm91cHMaHC5xZHJhbnQuU2VhcmNoR3JvdXBzUmVzcG9uc2UiABI4CgZTY3JvbGwSFC5xZHJhbnQuU2Nyb2xsUG9pbnRzGhYucWRyYW50LlNjcm9sbFJlc3BvbnNlIgASQQoJUmVjb21tZW5kEhcucWRyYW50LlJlY29tbWVuZFBvaW50cxoZLnFkcmFudC5SZWNvbW1lbmRSZXNwb25zZSIAElAKDlJlY29tbWVuZEJhdGNoEhwucWRyYW50LlJlY29tbWVuZEJhdGNoUG9pbnRzGh4ucWRyYW50LlJlY29tbWVuZEJhdGNoUmVzcG9uc2UiABJSCg9SZWNvbW1lbmRHcm91cHMSHC5xZHJhbnQuUmVjb21tZW5kUG9pbnRHcm91cHMaHy5xZHJhbnQuUmVjb21tZW5kR3JvdXBzUmVzcG9uc2UiABI+CghEaXNjb3ZlchIWLnFkcmFudC5EaXNjb3ZlclBvaW50cxoYLnFkcmFudC5EaXNjb3ZlclJlc3BvbnNlIgASTQoNRGlzY292ZXJCYXRjaBIbLnFkcmFudC5EaXNjb3ZlckJhdGNoUG9pbnRzGh0ucWRyYW50LkRpc2NvdmVyQmF0Y2hSZXNwb25zZSIAEjUKBUNvdW50EhMucWRyYW50LkNvdW50UG9pbnRzGhUucWRyYW50LkNvdW50UmVzcG9uc2UiABJHCgtVcGRhdGVCYXRjaBIZLnFkcmFudC5VcGRhdGVCYXRjaFBvaW50cxobLnFkcmFudC5VcGRhdGVCYXRjaFJlc3BvbnNlIgASNQoFUXVlcnkSEy5xZHJhbnQuUXVlcnlQb2ludHMaFS5xZHJhbnQuUXVlcnlSZXNwb25zZSIAEkQKClF1ZXJ5QmF0Y2gSGC5xZHJhbnQuUXVlcnlCYXRjaFBvaW50cxoaLnFkcmFudC5RdWVyeUJhdGNoUmVzcG9uc2UiABJGCgtRdWVyeUdyb3VwcxIYLnFkcmFudC5RdWVyeVBvaW50R3JvdXBzGhsucWRyYW50LlF1ZXJ5R3JvdXBzUmVzcG9uc2UiABI1CgVGYWNldBITLnFkcmFudC5GYWNldENvdW50cxoVLnFkcmFudC5GYWNldFJlc3BvbnNlIgASVAoRU2VhcmNoTWF0cml4UGFpcnMSGi5xZHJhbnQuU2VhcmNoTWF0cml4UG9pbnRzGiEucWRyYW50LlNlYXJjaE1hdHJpeFBhaXJzUmVzcG9uc2UiABJYChNTZWFyY2hNYXRyaXhPZmZzZXRzEhoucWRyYW50LlNlYXJjaE1hdHJpeFBvaW50cxojLnFkcmFudC5TZWFyY2hNYXRyaXhPZmZzZXRzUmVzcG9uc2UiAEIVqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_points]); + fileDesc("ChRwb2ludHNfc2VydmljZS5wcm90bxIGcWRyYW50MsURCgZQb2ludHMSQQoGVXBzZXJ0EhQucWRyYW50LlVwc2VydFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEkEKBkRlbGV0ZRIULnFkcmFudC5EZWxldGVQb2ludHMaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABIvCgNHZXQSES5xZHJhbnQuR2V0UG9pbnRzGhMucWRyYW50LkdldFJlc3BvbnNlIgASTgoNVXBkYXRlVmVjdG9ycxIaLnFkcmFudC5VcGRhdGVQb2ludFZlY3RvcnMaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABJOCg1EZWxldGVWZWN0b3JzEhoucWRyYW50LkRlbGV0ZVBvaW50VmVjdG9ycxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEkkKClNldFBheWxvYWQSGC5xZHJhbnQuU2V0UGF5bG9hZFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEk8KEE92ZXJ3cml0ZVBheWxvYWQSGC5xZHJhbnQuU2V0UGF5bG9hZFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEk8KDURlbGV0ZVBheWxvYWQSGy5xZHJhbnQuRGVsZXRlUGF5bG9hZFBvaW50cxofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAEk0KDENsZWFyUGF5bG9hZBIaLnFkcmFudC5DbGVhclBheWxvYWRQb2ludHMaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABJZChBDcmVhdGVGaWVsZEluZGV4EiIucWRyYW50LkNyZWF0ZUZpZWxkSW5kZXhDb2xsZWN0aW9uGh8ucWRyYW50LlBvaW50c09wZXJhdGlvblJlc3BvbnNlIgASWQoQRGVsZXRlRmllbGRJbmRleBIiLnFkcmFudC5EZWxldGVGaWVsZEluZGV4Q29sbGVjdGlvbhofLnFkcmFudC5Qb2ludHNPcGVyYXRpb25SZXNwb25zZSIAElYKEENyZWF0ZVZlY3Rvck5hbWUSHy5xZHJhbnQuQ3JlYXRlVmVjdG9yTmFtZVJlcXVlc3QaHy5xZHJhbnQuUG9pbnRzT3BlcmF0aW9uUmVzcG9uc2UiABJWChBEZWxldGVWZWN0b3JOYW1lEh8ucWRyYW50LkRlbGV0ZVZlY3Rvck5hbWVSZXF1ZXN0Gh8ucWRyYW50LlBvaW50c09wZXJhdGlvblJlc3BvbnNlIgASOwoGU2VhcmNoEhQucWRyYW50LlNlYXJjaFBvaW50cxoWLnFkcmFudC5TZWFyY2hSZXNwb25zZSIDiAIBEkoKC1NlYXJjaEJhdGNoEhkucWRyYW50LlNlYXJjaEJhdGNoUG9pbnRzGhsucWRyYW50LlNlYXJjaEJhdGNoUmVzcG9uc2UiA4gCARJMCgxTZWFyY2hHcm91cHMSGS5xZHJhbnQuU2VhcmNoUG9pbnRHcm91cHMaHC5xZHJhbnQuU2VhcmNoR3JvdXBzUmVzcG9uc2UiA4gCARI4CgZTY3JvbGwSFC5xZHJhbnQuU2Nyb2xsUG9pbnRzGhYucWRyYW50LlNjcm9sbFJlc3BvbnNlIgASRAoJUmVjb21tZW5kEhcucWRyYW50LlJlY29tbWVuZFBvaW50cxoZLnFkcmFudC5SZWNvbW1lbmRSZXNwb25zZSIDiAIBElMKDlJlY29tbWVuZEJhdGNoEhwucWRyYW50LlJlY29tbWVuZEJhdGNoUG9pbnRzGh4ucWRyYW50LlJlY29tbWVuZEJhdGNoUmVzcG9uc2UiA4gCARJVCg9SZWNvbW1lbmRHcm91cHMSHC5xZHJhbnQuUmVjb21tZW5kUG9pbnRHcm91cHMaHy5xZHJhbnQuUmVjb21tZW5kR3JvdXBzUmVzcG9uc2UiA4gCARJBCghEaXNjb3ZlchIWLnFkcmFudC5EaXNjb3ZlclBvaW50cxoYLnFkcmFudC5EaXNjb3ZlclJlc3BvbnNlIgOIAgESUAoNRGlzY292ZXJCYXRjaBIbLnFkcmFudC5EaXNjb3ZlckJhdGNoUG9pbnRzGh0ucWRyYW50LkRpc2NvdmVyQmF0Y2hSZXNwb25zZSIDiAIBEjUKBUNvdW50EhMucWRyYW50LkNvdW50UG9pbnRzGhUucWRyYW50LkNvdW50UmVzcG9uc2UiABJHCgtVcGRhdGVCYXRjaBIZLnFkcmFudC5VcGRhdGVCYXRjaFBvaW50cxobLnFkcmFudC5VcGRhdGVCYXRjaFJlc3BvbnNlIgASNQoFUXVlcnkSEy5xZHJhbnQuUXVlcnlQb2ludHMaFS5xZHJhbnQuUXVlcnlSZXNwb25zZSIAEkQKClF1ZXJ5QmF0Y2gSGC5xZHJhbnQuUXVlcnlCYXRjaFBvaW50cxoaLnFkcmFudC5RdWVyeUJhdGNoUmVzcG9uc2UiABJGCgtRdWVyeUdyb3VwcxIYLnFkcmFudC5RdWVyeVBvaW50R3JvdXBzGhsucWRyYW50LlF1ZXJ5R3JvdXBzUmVzcG9uc2UiABI1CgVGYWNldBITLnFkcmFudC5GYWNldENvdW50cxoVLnFkcmFudC5GYWNldFJlc3BvbnNlIgASVAoRU2VhcmNoTWF0cml4UGFpcnMSGi5xZHJhbnQuU2VhcmNoTWF0cml4UG9pbnRzGiEucWRyYW50LlNlYXJjaE1hdHJpeFBhaXJzUmVzcG9uc2UiABJYChNTZWFyY2hNYXRyaXhPZmZzZXRzEhoucWRyYW50LlNlYXJjaE1hdHJpeFBvaW50cxojLnFkcmFudC5TZWFyY2hNYXRyaXhPZmZzZXRzUmVzcG9uc2UiAEIVqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_points]); /** * @generated from service qdrant.Points @@ -152,7 +152,10 @@ export const Points: GenService<{ * Retrieve closest points based on vector similarity and given filtering * conditions * + * Deprecated: use `Query` instead. + * * @generated from rpc qdrant.Points.Search + * @deprecated */ search: { methodKind: "unary"; @@ -163,7 +166,10 @@ export const Points: GenService<{ * Retrieve closest points based on vector similarity and given filtering * conditions * + * Deprecated: use `QueryBatch` instead. + * * @generated from rpc qdrant.Points.SearchBatch + * @deprecated */ searchBatch: { methodKind: "unary"; @@ -174,7 +180,10 @@ export const Points: GenService<{ * Retrieve closest points based on vector similarity and given filtering * conditions, grouped by a given field * + * Deprecated: use `QueryGroups` instead. + * * @generated from rpc qdrant.Points.SearchGroups + * @deprecated */ searchGroups: { methodKind: "unary"; @@ -195,7 +204,10 @@ export const Points: GenService<{ * Look for the points which are closer to stored positive examples and at * the same time further to negative examples. * + * Deprecated: use `Query` with a `recommend` query instead. + * * @generated from rpc qdrant.Points.Recommend + * @deprecated */ recommend: { methodKind: "unary"; @@ -206,7 +218,10 @@ export const Points: GenService<{ * Look for the points which are closer to stored positive examples and at * the same time further to negative examples. * + * Deprecated: use `QueryBatch` with `recommend` queries instead. + * * @generated from rpc qdrant.Points.RecommendBatch + * @deprecated */ recommendBatch: { methodKind: "unary"; @@ -217,7 +232,10 @@ export const Points: GenService<{ * Look for the points which are closer to stored positive examples and at * the same time further to negative examples, grouped by a given field * + * Deprecated: use `QueryGroups` with a `recommend` query instead. + * * @generated from rpc qdrant.Points.RecommendGroups + * @deprecated */ recommendGroups: { methodKind: "unary"; @@ -245,7 +263,10 @@ export const Points: GenService<{ * calculated +1 if the point is closer to a positive than to a negative part * of a pair, and -1 otherwise. * + * Deprecated: use `Query` with a `discover` or `context` query instead. + * * @generated from rpc qdrant.Points.Discover + * @deprecated */ discover: { methodKind: "unary"; @@ -255,7 +276,10 @@ export const Points: GenService<{ /** * Batch request points based on { positive, negative } pairs of examples, and/or a target * + * Deprecated: use `QueryBatch` with `discover` or `context` queries instead. + * * @generated from rpc qdrant.Points.DiscoverBatch + * @deprecated */ discoverBatch: { methodKind: "unary"; diff --git a/packages/js-client-grpc/src/proto/qdrant_common_pb.ts b/packages/js-client-grpc/src/proto/qdrant_common_pb.ts index eb7d7c5..770b8a1 100644 --- a/packages/js-client-grpc/src/proto/qdrant_common_pb.ts +++ b/packages/js-client-grpc/src/proto/qdrant_common_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file qdrant_common.proto (package qdrant, syntax proto3) /* eslint-disable */ @@ -12,7 +12,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file qdrant_common.proto. */ export const file_qdrant_common: GenFile = /*@__PURE__*/ - fileDesc("ChNxZHJhbnRfY29tbW9uLnByb3RvEgZxZHJhbnQiPAoHUG9pbnRJZBINCgNudW0YASABKARIABIOCgR1dWlkGAIgASgJSABCEgoQcG9pbnRfaWRfb3B0aW9ucyIkCghHZW9Qb2ludBILCgNsb24YASABKAESCwoDbGF0GAIgASgBIqwBCgZGaWx0ZXISIQoGc2hvdWxkGAEgAygLMhEucWRyYW50LkNvbmRpdGlvbhIfCgRtdXN0GAIgAygLMhEucWRyYW50LkNvbmRpdGlvbhIjCghtdXN0X25vdBgDIAMoCzIRLnFkcmFudC5Db25kaXRpb24SKgoKbWluX3Nob3VsZBgEIAEoCzIRLnFkcmFudC5NaW5TaG91bGRIAIgBAUINCgtfbWluX3Nob3VsZCJFCglNaW5TaG91bGQSJQoKY29uZGl0aW9ucxgBIAMoCzIRLnFkcmFudC5Db25kaXRpb24SEQoJbWluX2NvdW50GAIgASgEIssCCglDb25kaXRpb24SJwoFZmllbGQYASABKAsyFi5xZHJhbnQuRmllbGRDb25kaXRpb25IABIsCghpc19lbXB0eRgCIAEoCzIYLnFkcmFudC5Jc0VtcHR5Q29uZGl0aW9uSAASKAoGaGFzX2lkGAMgASgLMhYucWRyYW50Lkhhc0lkQ29uZGl0aW9uSAASIAoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlckgAEioKB2lzX251bGwYBSABKAsyFy5xZHJhbnQuSXNOdWxsQ29uZGl0aW9uSAASKQoGbmVzdGVkGAYgASgLMhcucWRyYW50Lk5lc3RlZENvbmRpdGlvbkgAEjAKCmhhc192ZWN0b3IYByABKAsyGi5xZHJhbnQuSGFzVmVjdG9yQ29uZGl0aW9uSABCEgoQY29uZGl0aW9uX29uZV9vZiIfChBJc0VtcHR5Q29uZGl0aW9uEgsKA2tleRgBIAEoCSIeCg9Jc051bGxDb25kaXRpb24SCwoDa2V5GAEgASgJIjEKDkhhc0lkQ29uZGl0aW9uEh8KBmhhc19pZBgBIAMoCzIPLnFkcmFudC5Qb2ludElkIigKEkhhc1ZlY3RvckNvbmRpdGlvbhISCgpoYXNfdmVjdG9yGAEgASgJIj4KD05lc3RlZENvbmRpdGlvbhILCgNrZXkYASABKAkSHgoGZmlsdGVyGAIgASgLMg4ucWRyYW50LkZpbHRlciL7AgoORmllbGRDb25kaXRpb24SCwoDa2V5GAEgASgJEhwKBW1hdGNoGAIgASgLMg0ucWRyYW50Lk1hdGNoEhwKBXJhbmdlGAMgASgLMg0ucWRyYW50LlJhbmdlEjAKEGdlb19ib3VuZGluZ19ib3gYBCABKAsyFi5xZHJhbnQuR2VvQm91bmRpbmdCb3gSJQoKZ2VvX3JhZGl1cxgFIAEoCzIRLnFkcmFudC5HZW9SYWRpdXMSKQoMdmFsdWVzX2NvdW50GAYgASgLMhMucWRyYW50LlZhbHVlc0NvdW50EicKC2dlb19wb2x5Z29uGAcgASgLMhIucWRyYW50Lkdlb1BvbHlnb24SLQoOZGF0ZXRpbWVfcmFuZ2UYCCABKAsyFS5xZHJhbnQuRGF0ZXRpbWVSYW5nZRIVCghpc19lbXB0eRgJIAEoCEgAiAEBEhQKB2lzX251bGwYCiABKAhIAYgBAUILCglfaXNfZW1wdHlCCgoIX2lzX251bGwiyQIKBU1hdGNoEhEKB2tleXdvcmQYASABKAlIABIRCgdpbnRlZ2VyGAIgASgDSAASEQoHYm9vbGVhbhgDIAEoCEgAEg4KBHRleHQYBCABKAlIABIrCghrZXl3b3JkcxgFIAEoCzIXLnFkcmFudC5SZXBlYXRlZFN0cmluZ3NIABIsCghpbnRlZ2VycxgGIAEoCzIYLnFkcmFudC5SZXBlYXRlZEludGVnZXJzSAASMwoPZXhjZXB0X2ludGVnZXJzGAcgASgLMhgucWRyYW50LlJlcGVhdGVkSW50ZWdlcnNIABIyCg9leGNlcHRfa2V5d29yZHMYCCABKAsyFy5xZHJhbnQuUmVwZWF0ZWRTdHJpbmdzSAASEAoGcGhyYXNlGAkgASgJSAASEgoIdGV4dF9hbnkYCiABKAlIAEINCgttYXRjaF92YWx1ZSIiCg9SZXBlYXRlZFN0cmluZ3MSDwoHc3RyaW5ncxgBIAMoCSIkChBSZXBlYXRlZEludGVnZXJzEhAKCGludGVnZXJzGAEgAygDImsKBVJhbmdlEg8KAmx0GAEgASgBSACIAQESDwoCZ3QYAiABKAFIAYgBARIQCgNndGUYAyABKAFIAogBARIQCgNsdGUYBCABKAFIA4gBAUIFCgNfbHRCBQoDX2d0QgYKBF9ndGVCBgoEX2x0ZSLjAQoNRGF0ZXRpbWVSYW5nZRIrCgJsdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIrCgJndBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBARIsCgNndGUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESLAoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBQgUKA19sdEIFCgNfZ3RCBgoEX2d0ZUIGCgRfbHRlIlwKDkdlb0JvdW5kaW5nQm94EiIKCHRvcF9sZWZ0GAEgASgLMhAucWRyYW50Lkdlb1BvaW50EiYKDGJvdHRvbV9yaWdodBgCIAEoCzIQLnFkcmFudC5HZW9Qb2ludCI9CglHZW9SYWRpdXMSIAoGY2VudGVyGAEgASgLMhAucWRyYW50Lkdlb1BvaW50Eg4KBnJhZGl1cxgCIAEoAiIxCg1HZW9MaW5lU3RyaW5nEiAKBnBvaW50cxgBIAMoCzIQLnFkcmFudC5HZW9Qb2ludCJfCgpHZW9Qb2x5Z29uEicKCGV4dGVyaW9yGAEgASgLMhUucWRyYW50Lkdlb0xpbmVTdHJpbmcSKAoJaW50ZXJpb3JzGAIgAygLMhUucWRyYW50Lkdlb0xpbmVTdHJpbmcicQoLVmFsdWVzQ291bnQSDwoCbHQYASABKARIAIgBARIPCgJndBgCIAEoBEgBiAEBEhAKA2d0ZRgDIAEoBEgCiAEBEhAKA2x0ZRgEIAEoBEgDiAEBQgUKA19sdEIFCgNfZ3RCBgoEX2d0ZUIGCgRfbHRlQh1CBkNvbW1vbqoCElFkcmFudC5DbGllbnQuR3JwY2IGcHJvdG8z", [file_google_protobuf_timestamp]); + fileDesc("ChNxZHJhbnRfY29tbW9uLnByb3RvEgZxZHJhbnQiPAoHUG9pbnRJZBINCgNudW0YASABKARIABIOCgR1dWlkGAIgASgJSABCEgoQcG9pbnRfaWRfb3B0aW9ucyIkCghHZW9Qb2ludBILCgNsb24YASABKAESCwoDbGF0GAIgASgBIqwBCgZGaWx0ZXISIQoGc2hvdWxkGAEgAygLMhEucWRyYW50LkNvbmRpdGlvbhIfCgRtdXN0GAIgAygLMhEucWRyYW50LkNvbmRpdGlvbhIjCghtdXN0X25vdBgDIAMoCzIRLnFkcmFudC5Db25kaXRpb24SKgoKbWluX3Nob3VsZBgEIAEoCzIRLnFkcmFudC5NaW5TaG91bGRIAIgBAUINCgtfbWluX3Nob3VsZCJFCglNaW5TaG91bGQSJQoKY29uZGl0aW9ucxgBIAMoCzIRLnFkcmFudC5Db25kaXRpb24SEQoJbWluX2NvdW50GAIgASgEIvQCCglDb25kaXRpb24SJwoFZmllbGQYASABKAsyFi5xZHJhbnQuRmllbGRDb25kaXRpb25IABIsCghpc19lbXB0eRgCIAEoCzIYLnFkcmFudC5Jc0VtcHR5Q29uZGl0aW9uSAASKAoGaGFzX2lkGAMgASgLMhYucWRyYW50Lkhhc0lkQ29uZGl0aW9uSAASIAoGZmlsdGVyGAQgASgLMg4ucWRyYW50LkZpbHRlckgAEioKB2lzX251bGwYBSABKAsyFy5xZHJhbnQuSXNOdWxsQ29uZGl0aW9uSAASKQoGbmVzdGVkGAYgASgLMhcucWRyYW50Lk5lc3RlZENvbmRpdGlvbkgAEjAKCmhhc192ZWN0b3IYByABKAsyGi5xZHJhbnQuSGFzVmVjdG9yQ29uZGl0aW9uSAASJwoFc2xpY2UYCCABKAsyFi5xZHJhbnQuU2xpY2VDb25kaXRpb25IAEISChBjb25kaXRpb25fb25lX29mIh8KEElzRW1wdHlDb25kaXRpb24SCwoDa2V5GAEgASgJIh4KD0lzTnVsbENvbmRpdGlvbhILCgNrZXkYASABKAkiMQoOSGFzSWRDb25kaXRpb24SHwoGaGFzX2lkGAEgAygLMg8ucWRyYW50LlBvaW50SWQiKAoSSGFzVmVjdG9yQ29uZGl0aW9uEhIKCmhhc192ZWN0b3IYASABKAkiLgoOU2xpY2VDb25kaXRpb24SDQoFdG90YWwYASABKA0SDQoFaW5kZXgYAiABKA0iPgoPTmVzdGVkQ29uZGl0aW9uEgsKA2tleRgBIAEoCRIeCgZmaWx0ZXIYAiABKAsyDi5xZHJhbnQuRmlsdGVyIvsCCg5GaWVsZENvbmRpdGlvbhILCgNrZXkYASABKAkSHAoFbWF0Y2gYAiABKAsyDS5xZHJhbnQuTWF0Y2gSHAoFcmFuZ2UYAyABKAsyDS5xZHJhbnQuUmFuZ2USMAoQZ2VvX2JvdW5kaW5nX2JveBgEIAEoCzIWLnFkcmFudC5HZW9Cb3VuZGluZ0JveBIlCgpnZW9fcmFkaXVzGAUgASgLMhEucWRyYW50Lkdlb1JhZGl1cxIpCgx2YWx1ZXNfY291bnQYBiABKAsyEy5xZHJhbnQuVmFsdWVzQ291bnQSJwoLZ2VvX3BvbHlnb24YByABKAsyEi5xZHJhbnQuR2VvUG9seWdvbhItCg5kYXRldGltZV9yYW5nZRgIIAEoCzIVLnFkcmFudC5EYXRldGltZVJhbmdlEhUKCGlzX2VtcHR5GAkgASgISACIAQESFAoHaXNfbnVsbBgKIAEoCEgBiAEBQgsKCV9pc19lbXB0eUIKCghfaXNfbnVsbCLbAgoFTWF0Y2gSEQoHa2V5d29yZBgBIAEoCUgAEhEKB2ludGVnZXIYAiABKANIABIRCgdib29sZWFuGAMgASgISAASDgoEdGV4dBgEIAEoCUgAEisKCGtleXdvcmRzGAUgASgLMhcucWRyYW50LlJlcGVhdGVkU3RyaW5nc0gAEiwKCGludGVnZXJzGAYgASgLMhgucWRyYW50LlJlcGVhdGVkSW50ZWdlcnNIABIzCg9leGNlcHRfaW50ZWdlcnMYByABKAsyGC5xZHJhbnQuUmVwZWF0ZWRJbnRlZ2Vyc0gAEjIKD2V4Y2VwdF9rZXl3b3JkcxgIIAEoCzIXLnFkcmFudC5SZXBlYXRlZFN0cmluZ3NIABIQCgZwaHJhc2UYCSABKAlIABISCgh0ZXh0X2FueRgKIAEoCUgAEhAKBnByZWZpeBgLIAEoCUgAQg0KC21hdGNoX3ZhbHVlIiIKD1JlcGVhdGVkU3RyaW5ncxIPCgdzdHJpbmdzGAEgAygJIiQKEFJlcGVhdGVkSW50ZWdlcnMSEAoIaW50ZWdlcnMYASADKAMiawoFUmFuZ2USDwoCbHQYASABKAFIAIgBARIPCgJndBgCIAEoAUgBiAEBEhAKA2d0ZRgDIAEoAUgCiAEBEhAKA2x0ZRgEIAEoAUgDiAEBQgUKA19sdEIFCgNfZ3RCBgoEX2d0ZUIGCgRfbHRlIuMBCg1EYXRldGltZVJhbmdlEisKAmx0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAmd0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEiwKA2d0ZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIsCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAOIAQFCBQoDX2x0QgUKA19ndEIGCgRfZ3RlQgYKBF9sdGUiXAoOR2VvQm91bmRpbmdCb3gSIgoIdG9wX2xlZnQYASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSJgoMYm90dG9tX3JpZ2h0GAIgASgLMhAucWRyYW50Lkdlb1BvaW50Ij0KCUdlb1JhZGl1cxIgCgZjZW50ZXIYASABKAsyEC5xZHJhbnQuR2VvUG9pbnQSDgoGcmFkaXVzGAIgASgCIjEKDUdlb0xpbmVTdHJpbmcSIAoGcG9pbnRzGAEgAygLMhAucWRyYW50Lkdlb1BvaW50Il8KCkdlb1BvbHlnb24SJwoIZXh0ZXJpb3IYASABKAsyFS5xZHJhbnQuR2VvTGluZVN0cmluZxIoCglpbnRlcmlvcnMYAiADKAsyFS5xZHJhbnQuR2VvTGluZVN0cmluZyJxCgtWYWx1ZXNDb3VudBIPCgJsdBgBIAEoBEgAiAEBEg8KAmd0GAIgASgESAGIAQESEAoDZ3RlGAMgASgESAKIAQESEAoDbHRlGAQgASgESAOIAQFCBQoDX2x0QgUKA19ndEIGCgRfZ3RlQgYKBF9sdGVCHUIGQ29tbW9uqgISUWRyYW50LkNsaWVudC5HcnBjYgZwcm90bzM", [file_google_protobuf_timestamp]); /** * @generated from message qdrant.PointId @@ -99,7 +99,7 @@ export type Filter = Message<"qdrant.Filter"> & { * * @generated from field: optional qdrant.MinShould min_should = 4; */ - minShould?: MinShould; + minShould?: MinShould | undefined; }; /** @@ -180,6 +180,12 @@ export type Condition = Message<"qdrant.Condition"> & { */ value: HasVectorCondition; case: "hasVector"; + } | { + /** + * @generated from field: qdrant.SliceCondition slice = 8; + */ + value: SliceCondition; + case: "slice"; } | { case: undefined; value?: undefined }; }; @@ -258,6 +264,32 @@ export type HasVectorCondition = Message<"qdrant.HasVectorCondition"> & { export const HasVectorConditionSchema: GenMessage = /*@__PURE__*/ messageDesc(file_qdrant_common, 8); +/** + * @generated from message qdrant.SliceCondition + */ +export type SliceCondition = Message<"qdrant.SliceCondition"> & { + /** + * Total number of disjoint deterministic slices the id space is split into, must be >= 1 + * + * @generated from field: uint32 total = 1; + */ + total: number; + + /** + * Which slice to select, must be less than `total` + * + * @generated from field: uint32 index = 2; + */ + index: number; +}; + +/** + * Describes the message qdrant.SliceCondition. + * Use `create(SliceConditionSchema)` to create a new message. + */ +export const SliceConditionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_qdrant_common, 9); + /** * @generated from message qdrant.NestedCondition */ @@ -274,7 +306,7 @@ export type NestedCondition = Message<"qdrant.NestedCondition"> & { * * @generated from field: qdrant.Filter filter = 2; */ - filter?: Filter; + filter?: Filter | undefined; }; /** @@ -282,7 +314,7 @@ export type NestedCondition = Message<"qdrant.NestedCondition"> & { * Use `create(NestedConditionSchema)` to create a new message. */ export const NestedConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 9); + messageDesc(file_qdrant_common, 10); /** * @generated from message qdrant.FieldCondition @@ -298,63 +330,63 @@ export type FieldCondition = Message<"qdrant.FieldCondition"> & { * * @generated from field: qdrant.Match match = 2; */ - match?: Match; + match?: Match | undefined; /** * Check if points value lies in a given range * * @generated from field: qdrant.Range range = 3; */ - range?: Range; + range?: Range | undefined; /** * Check if points geolocation lies in a given area * * @generated from field: qdrant.GeoBoundingBox geo_bounding_box = 4; */ - geoBoundingBox?: GeoBoundingBox; + geoBoundingBox?: GeoBoundingBox | undefined; /** * Check if geo point is within a given radius * * @generated from field: qdrant.GeoRadius geo_radius = 5; */ - geoRadius?: GeoRadius; + geoRadius?: GeoRadius | undefined; /** * Check number of values for a specific field * * @generated from field: qdrant.ValuesCount values_count = 6; */ - valuesCount?: ValuesCount; + valuesCount?: ValuesCount | undefined; /** * Check if geo point is within a given polygon * * @generated from field: qdrant.GeoPolygon geo_polygon = 7; */ - geoPolygon?: GeoPolygon; + geoPolygon?: GeoPolygon | undefined; /** * Check if datetime is within a given range * * @generated from field: qdrant.DatetimeRange datetime_range = 8; */ - datetimeRange?: DatetimeRange; + datetimeRange?: DatetimeRange | undefined; /** * Check if field is empty * * @generated from field: optional bool is_empty = 9; */ - isEmpty?: boolean; + isEmpty?: boolean | undefined; /** * Check if field is null * * @generated from field: optional bool is_null = 10; */ - isNull?: boolean; + isNull?: boolean | undefined; }; /** @@ -362,7 +394,7 @@ export type FieldCondition = Message<"qdrant.FieldCondition"> & { * Use `create(FieldConditionSchema)` to create a new message. */ export const FieldConditionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 10); + messageDesc(file_qdrant_common, 11); /** * @generated from message qdrant.Match @@ -451,6 +483,14 @@ export type Match = Message<"qdrant.Match"> & { */ value: string; case: "textAny"; + } | { + /** + * Match keywords starting with the given prefix + * + * @generated from field: string prefix = 11; + */ + value: string; + case: "prefix"; } | { case: undefined; value?: undefined }; }; @@ -459,7 +499,7 @@ export type Match = Message<"qdrant.Match"> & { * Use `create(MatchSchema)` to create a new message. */ export const MatchSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 11); + messageDesc(file_qdrant_common, 12); /** * @generated from message qdrant.RepeatedStrings @@ -476,7 +516,7 @@ export type RepeatedStrings = Message<"qdrant.RepeatedStrings"> & { * Use `create(RepeatedStringsSchema)` to create a new message. */ export const RepeatedStringsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 12); + messageDesc(file_qdrant_common, 13); /** * @generated from message qdrant.RepeatedIntegers @@ -493,7 +533,7 @@ export type RepeatedIntegers = Message<"qdrant.RepeatedIntegers"> & { * Use `create(RepeatedIntegersSchema)` to create a new message. */ export const RepeatedIntegersSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 13); + messageDesc(file_qdrant_common, 14); /** * @generated from message qdrant.Range @@ -502,22 +542,22 @@ export type Range = Message<"qdrant.Range"> & { /** * @generated from field: optional double lt = 1; */ - lt?: number; + lt?: number | undefined; /** * @generated from field: optional double gt = 2; */ - gt?: number; + gt?: number | undefined; /** * @generated from field: optional double gte = 3; */ - gte?: number; + gte?: number | undefined; /** * @generated from field: optional double lte = 4; */ - lte?: number; + lte?: number | undefined; }; /** @@ -525,7 +565,7 @@ export type Range = Message<"qdrant.Range"> & { * Use `create(RangeSchema)` to create a new message. */ export const RangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 14); + messageDesc(file_qdrant_common, 15); /** * @generated from message qdrant.DatetimeRange @@ -534,22 +574,22 @@ export type DatetimeRange = Message<"qdrant.DatetimeRange"> & { /** * @generated from field: optional google.protobuf.Timestamp lt = 1; */ - lt?: Timestamp; + lt?: Timestamp | undefined; /** * @generated from field: optional google.protobuf.Timestamp gt = 2; */ - gt?: Timestamp; + gt?: Timestamp | undefined; /** * @generated from field: optional google.protobuf.Timestamp gte = 3; */ - gte?: Timestamp; + gte?: Timestamp | undefined; /** * @generated from field: optional google.protobuf.Timestamp lte = 4; */ - lte?: Timestamp; + lte?: Timestamp | undefined; }; /** @@ -557,7 +597,7 @@ export type DatetimeRange = Message<"qdrant.DatetimeRange"> & { * Use `create(DatetimeRangeSchema)` to create a new message. */ export const DatetimeRangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 15); + messageDesc(file_qdrant_common, 16); /** * @generated from message qdrant.GeoBoundingBox @@ -568,14 +608,14 @@ export type GeoBoundingBox = Message<"qdrant.GeoBoundingBox"> & { * * @generated from field: qdrant.GeoPoint top_left = 1; */ - topLeft?: GeoPoint; + topLeft?: GeoPoint | undefined; /** * south-east corner * * @generated from field: qdrant.GeoPoint bottom_right = 2; */ - bottomRight?: GeoPoint; + bottomRight?: GeoPoint | undefined; }; /** @@ -583,7 +623,7 @@ export type GeoBoundingBox = Message<"qdrant.GeoBoundingBox"> & { * Use `create(GeoBoundingBoxSchema)` to create a new message. */ export const GeoBoundingBoxSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 16); + messageDesc(file_qdrant_common, 17); /** * @generated from message qdrant.GeoRadius @@ -594,7 +634,7 @@ export type GeoRadius = Message<"qdrant.GeoRadius"> & { * * @generated from field: qdrant.GeoPoint center = 1; */ - center?: GeoPoint; + center?: GeoPoint | undefined; /** * In meters @@ -609,7 +649,7 @@ export type GeoRadius = Message<"qdrant.GeoRadius"> & { * Use `create(GeoRadiusSchema)` to create a new message. */ export const GeoRadiusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 17); + messageDesc(file_qdrant_common, 18); /** * @generated from message qdrant.GeoLineString @@ -628,7 +668,7 @@ export type GeoLineString = Message<"qdrant.GeoLineString"> & { * Use `create(GeoLineStringSchema)` to create a new message. */ export const GeoLineStringSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 18); + messageDesc(file_qdrant_common, 19); /** * For a valid GeoPolygon, both the exterior and interior GeoLineStrings must @@ -643,7 +683,7 @@ export type GeoPolygon = Message<"qdrant.GeoPolygon"> & { * * @generated from field: qdrant.GeoLineString exterior = 1; */ - exterior?: GeoLineString; + exterior?: GeoLineString | undefined; /** * Interior lines (if present) bound holes within the surface @@ -658,7 +698,7 @@ export type GeoPolygon = Message<"qdrant.GeoPolygon"> & { * Use `create(GeoPolygonSchema)` to create a new message. */ export const GeoPolygonSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 19); + messageDesc(file_qdrant_common, 20); /** * @generated from message qdrant.ValuesCount @@ -667,22 +707,22 @@ export type ValuesCount = Message<"qdrant.ValuesCount"> & { /** * @generated from field: optional uint64 lt = 1; */ - lt?: bigint; + lt?: bigint | undefined; /** * @generated from field: optional uint64 gt = 2; */ - gt?: bigint; + gt?: bigint | undefined; /** * @generated from field: optional uint64 gte = 3; */ - gte?: bigint; + gte?: bigint | undefined; /** * @generated from field: optional uint64 lte = 4; */ - lte?: bigint; + lte?: bigint | undefined; }; /** @@ -690,5 +730,5 @@ export type ValuesCount = Message<"qdrant.ValuesCount"> & { * Use `create(ValuesCountSchema)` to create a new message. */ export const ValuesCountSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_qdrant_common, 20); + messageDesc(file_qdrant_common, 21); diff --git a/packages/js-client-grpc/src/proto/qdrant_pb.ts b/packages/js-client-grpc/src/proto/qdrant_pb.ts index ef7ff66..95ee82b 100644 --- a/packages/js-client-grpc/src/proto/qdrant_pb.ts +++ b/packages/js-client-grpc/src/proto/qdrant_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file qdrant.proto (package qdrant, syntax proto3) /* eslint-disable */ @@ -45,7 +45,7 @@ export type HealthCheckReply = Message<"qdrant.HealthCheckReply"> & { /** * @generated from field: optional string commit = 3; */ - commit?: string; + commit?: string | undefined; }; /** diff --git a/packages/js-client-grpc/src/proto/snapshots_service_pb.ts b/packages/js-client-grpc/src/proto/snapshots_service_pb.ts index 4faea60..b7a2f6f 100644 --- a/packages/js-client-grpc/src/proto/snapshots_service_pb.ts +++ b/packages/js-client-grpc/src/proto/snapshots_service_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v2.10.1 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js" // @generated from file snapshots_service.proto (package qdrant, syntax proto3) /* eslint-disable */ @@ -139,7 +139,7 @@ export type SnapshotDescription = Message<"qdrant.SnapshotDescription"> & { * * @generated from field: google.protobuf.Timestamp creation_time = 2; */ - creationTime?: Timestamp; + creationTime?: Timestamp | undefined; /** * Size of the snapshot in bytes @@ -153,7 +153,7 @@ export type SnapshotDescription = Message<"qdrant.SnapshotDescription"> & { * * @generated from field: optional string checksum = 4; */ - checksum?: string; + checksum?: string | undefined; }; /** @@ -170,7 +170,7 @@ export type CreateSnapshotResponse = Message<"qdrant.CreateSnapshotResponse"> & /** * @generated from field: qdrant.SnapshotDescription snapshot_description = 1; */ - snapshotDescription?: SnapshotDescription; + snapshotDescription?: SnapshotDescription | undefined; /** * Time spent to process diff --git a/packages/js-client-rest/CHANGELOG.md b/packages/js-client-rest/CHANGELOG.md index 3a15851..422f545 100644 --- a/packages/js-client-rest/CHANGELOG.md +++ b/packages/js-client-rest/CHANGELOG.md @@ -1,5 +1,36 @@ # @qdrant/js-client-rest +## v1.19.0 + +### Breaking Changes + +- Removed `search`, `searchBatch`, `searchPointGroups`, `recommend`, `recommendBatch`, `recommend_batch`, `recommendPointGroups`, `discoverPoints` and `discoverBatchPoints`, + following Qdrant dropping the corresponding endpoints from its OpenAPI spec. Use `query`, `queryBatch` and `queryGroups` instead: + + | Removed | Replacement | + | ---------------------- | ------------------------------------------------- | + | `search` | `query` | + | `searchBatch` | `queryBatch` | + | `searchPointGroups` | `queryGroups` | + | `recommend` | `query` with a `recommend` query | + | `recommendBatch` | `queryBatch` with `recommend` queries | + | `recommendPointGroups` | `queryGroups` with a `recommend` query | + | `discoverPoints` | `query` with a `discover` or `context` query | + | `discoverBatchPoints` | `queryBatch` with `discover` or `context` queries | + + The request types that came with them are gone from `Schemas` as well: `SearchRequest`, `SearchRequestBatch`, `SearchGroupsRequest`, `RecommendRequest`, + `RecommendRequestBatch`, `RecommendGroupsRequest`, `DiscoverRequest`, `DiscoverRequestBatch`, `RecommendExample`, `ContextExamplePair`, `NamedVector`, + `NamedSparseVector`, `NamedVectorStruct` and `UsingVector`. + + Note that `query` and friends return `{points: [...]}` rather than a bare array. + +### Minor Changes + +- Qdrant v1.19.0 API +- Added `getQuotas` and `updateQuotas` for the cluster-wide quota API +- Added `payload` (payload storage params) and `metadata` parameters to `createCollection` and `recreateCollection` +- `max_disk_usage_percent` moved off `strict_mode_config` — it is now a cluster-wide setting on `updateQuotas`, alongside `max_resident_memory_percent` and `release_margin_percent` + ## v1.18.0 ### Minor Changes diff --git a/packages/js-client-rest/package.json b/packages/js-client-rest/package.json index 04f09f4..ba5a9ed 100644 --- a/packages/js-client-rest/package.json +++ b/packages/js-client-rest/package.json @@ -1,6 +1,6 @@ { "name": "@qdrant/js-client-rest", - "version": "1.18.0", + "version": "1.19.0", "engines": { "node": ">=22.0.0" }, @@ -61,7 +61,7 @@ "@rollup/plugin-replace": "^6.0.3", "@total-typescript/ts-reset": "^0.6.1", "@types/semver": "7.7.1", - "openapi-typescript": "^7.13.0", + "openapi-typescript": "^6.2.6", "semver": "7.8.5", "tsx": "^4.22.4", "typescript": "^5.9.3", diff --git a/packages/js-client-rest/scripts/generate_client_construction.ts b/packages/js-client-rest/scripts/generate_client_construction.ts index 4e301d4..693da73 100644 --- a/packages/js-client-rest/scripts/generate_client_construction.ts +++ b/packages/js-client-rest/scripts/generate_client_construction.ts @@ -88,8 +88,40 @@ function getInterfaceMembers(interfaceContent: string): string[] { let currentMember = ''; let braceCount = 0; + // Doc comments carry API descriptions verbatim, and those contain semicolons. Splitting inside + // one would cut a member in half, so comments are copied over without being inspected. + let inBlockComment = false; + let inLineComment = false; + + for (let i = 0; i < contentInsideBraces.length; i++) { + const char = contentInsideBraces[i]; + const nextChar = contentInsideBraces[i + 1]; + + if (inBlockComment) { + currentMember += char; + if (char === '*' && nextChar === '/') { + currentMember += nextChar; + i++; + inBlockComment = false; + } + continue; + } + + if (inLineComment) { + currentMember += char; + if (char === '\n') { + inLineComment = false; + } + continue; + } + + if (char === '/' && (nextChar === '*' || nextChar === '/')) { + inBlockComment = nextChar === '*'; + inLineComment = nextChar === '/'; + currentMember += char; + continue; + } - for (const char of contentInsideBraces) { if (char === '{') { braceCount++; } else if (char === '}') { diff --git a/packages/js-client-rest/src/client-version.ts b/packages/js-client-rest/src/client-version.ts index 457023e..62927b9 100644 --- a/packages/js-client-rest/src/client-version.ts +++ b/packages/js-client-rest/src/client-version.ts @@ -1,4 +1,4 @@ -export const PACKAGE_VERSION = '1.18.0'; +export const PACKAGE_VERSION = '1.19.0'; interface Version { major: number; diff --git a/packages/js-client-rest/src/openapi/generated_api_client.ts b/packages/js-client-rest/src/openapi/generated_api_client.ts index 0783a0b..21e8e73 100644 --- a/packages/js-client-rest/src/openapi/generated_api_client.ts +++ b/packages/js-client-rest/src/openapi/generated_api_client.ts @@ -62,7 +62,7 @@ export function createClientApi(client: Client) : ClientApi { /** * Kubernetes healthz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Liveness-style health check. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/livez`. Use it only to detect whether the process is up and responsive. */ healthz: client @@ -72,7 +72,7 @@ export function createClientApi(client: Client) : ClientApi { /** * Kubernetes livez endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes liveness probe. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/healthz`. A failure indicates the process is unresponsive and should be restarted. */ livez: client @@ -82,7 +82,7 @@ export function createClientApi(client: Client) : ClientApi { /** * Kubernetes readyz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes readiness probe. Checks the instance and waits out pending data operations to see when it can start accepting traffic. In a distributed deployment it returns 200 only once the node has caught up with the cluster consensus commit and its local shards are healthy; otherwise it returns 503. In a single-node deployment it always returns 200 once the API is up. Use it to decide when to route traffic to the instance. */ readyz: client @@ -150,6 +150,30 @@ export function createClientApi(client: Client) : ClientApi { force: true, }), + /** + * Get global quotas + * @description Get the cluster-wide resource quota configuration, together with the current utilization it is measured against. + * The configuration is the same on every peer, but the reported utilization is for the node serving this request only - + * memory and disk are node-local, so query each peer to see where the whole cluster stands. + */ + getQuotas: + client + .path('/quotas') + .method('get') + .create(), + + /** + * Set global quotas + * @description Replace the cluster-wide resource quota configuration. The new configuration is propagated to every peer through consensus and persisted, so it survives restarts + */ + updateQuotas: + client + .path('/quotas') + .method('put') + .create({ + wait: true, + }), + /** * List collections * @description Get list name of all existing collections @@ -686,121 +710,6 @@ export function createClientApi(client: Client) : ClientApi { timeout: true, }), - /** - * Search points - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions - */ - searchPoints: - client - .path('/collections/{collection_name}/points/search') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Search batch points - * @deprecated - * @description Retrieve by batch the closest points based on vector similarity and given filtering conditions - */ - searchBatchPoints: - client - .path('/collections/{collection_name}/points/search/batch') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Search point groups - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field - */ - searchPointGroups: - client - .path('/collections/{collection_name}/points/search/groups') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Recommend points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - recommendPoints: - client - .path('/collections/{collection_name}/points/recommend') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Recommend batch points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - recommendBatchPoints: - client - .path('/collections/{collection_name}/points/recommend/batch') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Recommend point groups - * @deprecated - * @description 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. - */ - recommendPointGroups: - client - .path('/collections/{collection_name}/points/recommend/groups') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Discover points - * @deprecated - * @description Use context and a target to find the most similar points to the target, constrained by the context. - * When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. - * Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. - * When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - */ - discoverPoints: - client - .path('/collections/{collection_name}/points/discover') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - - /** - * Discover batch points - * @deprecated - * @description Look for points based on target and/or positive and negative example pairs, in batch. - */ - discoverBatchPoints: - client - .path('/collections/{collection_name}/points/discover/batch') - .method('post') - .create({ - consistency: true, - timeout: true, - }), - /** * Count points * @description Count points which matches given filtering condition diff --git a/packages/js-client-rest/src/openapi/generated_client_type.ts b/packages/js-client-rest/src/openapi/generated_client_type.ts index 441cd4c..3ca2c3e 100644 --- a/packages/js-client-rest/src/openapi/generated_client_type.ts +++ b/packages/js-client-rest/src/openapi/generated_client_type.ts @@ -189,7 +189,7 @@ export type ClientApi = { /** * Kubernetes healthz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Liveness-style health check. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/livez`. Use it only to detect whether the process is up and responsive. */ healthz: TypedFetch<{ responses: { @@ -204,7 +204,7 @@ export type ClientApi = { /** * Kubernetes livez endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes liveness probe. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/healthz`. A failure indicates the process is unresponsive and should be restarted. */ livez: TypedFetch<{ responses: { @@ -219,7 +219,7 @@ export type ClientApi = { /** * Kubernetes readyz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes readiness probe. Checks the instance and waits out pending data operations to see when it can start accepting traffic. In a distributed deployment it returns 200 only once the node has caught up with the cluster consensus commit and its local shards are healthy; otherwise it returns 503. In a single-node deployment it always returns 200 once the API is up. Use it to decide when to route traffic to the instance. */ readyz: TypedFetch<{ responses: { @@ -228,6 +228,11 @@ export type ClientApi = { "text/plain": string; }; }; + 503: { + content: { + "text/plain": string; + }; + }; "4XX": never; }; }>; @@ -404,6 +409,76 @@ export type ClientApi = { }; }>; + /** + * Get global quotas + * @description Get the cluster-wide resource quota configuration, together with the current utilization it is measured against. + * The configuration is the same on every peer, but the reported utilization is for the node serving this request only - + * memory and disk are node-local, so query each peer to see where the whole cluster stands. + */ + getQuotas: TypedFetch<{ + responses: { + 200: { + content: { + "application/json": { + usage?: components["schemas"]["Usage"] | (Record | null); + time?: number; + status?: string; + result?: components["schemas"]["QuotaStatus"]; + }; + }; + }; + default: { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + "4XX": { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + }; + }>; + + /** + * Set global quotas + * @description Replace the cluster-wide resource quota configuration. The new configuration is propagated to every peer through consensus and persisted, so it survives restarts + */ + updateQuotas: TypedFetch<{ + parameters: { + query?: { + wait?: boolean; + }; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["QuotaConfig"]; + }; + }; + responses: { + 200: { + content: { + "application/json": { + usage?: components["schemas"]["Usage"] | (Record | null); + time?: number; + status?: string; + result?: boolean; + }; + }; + }; + default: { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + "4XX": { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + }; + }>; + /** * List collections * @description Get list name of all existing collections @@ -2210,361 +2285,6 @@ export type ClientApi = { }; }>; - /** - * Search points - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions - */ - searchPoints: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["SearchRequest"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: (components["schemas"]["ScoredPoint"])[]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Search batch points - * @deprecated - * @description Retrieve by batch the closest points based on vector similarity and given filtering conditions - */ - searchBatchPoints: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["SearchRequestBatch"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: ((components["schemas"]["ScoredPoint"])[])[]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Search point groups - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field - */ - searchPointGroups: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["SearchGroupsRequest"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: components["schemas"]["GroupsResult"]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Recommend points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - recommendPoints: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["RecommendRequest"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: (components["schemas"]["ScoredPoint"])[]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Recommend batch points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - recommendBatchPoints: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["RecommendRequestBatch"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: ((components["schemas"]["ScoredPoint"])[])[]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Recommend point groups - * @deprecated - * @description 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. - */ - recommendPointGroups: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["RecommendGroupsRequest"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: components["schemas"]["GroupsResult"]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Discover points - * @deprecated - * @description Use context and a target to find the most similar points to the target, constrained by the context. - * When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. - * Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. - * When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - */ - discoverPoints: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["DiscoverRequest"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: (components["schemas"]["ScoredPoint"])[]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - - /** - * Discover batch points - * @deprecated - * @description Look for points based on target and/or positive and negative example pairs, in batch. - */ - discoverBatchPoints: TypedFetch<{ - parameters: { - query?: { - consistency?: components["schemas"]["ReadConsistency"]; - timeout?: number; - }; - path: { - collection_name: string; - }; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["DiscoverRequestBatch"]; - }; - }; - responses: { - 200: { - content: { - "application/json": { - usage?: components["schemas"]["Usage"] | (Record | null); - time?: number; - status?: string; - result?: ((components["schemas"]["ScoredPoint"])[])[]; - }; - }; - }; - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }>; - /** * Count points * @description Count points which matches given filtering condition diff --git a/packages/js-client-rest/src/openapi/generated_schema.ts b/packages/js-client-rest/src/openapi/generated_schema.ts index e04b21e..aa1ec84 100644 --- a/packages/js-client-rest/src/openapi/generated_schema.ts +++ b/packages/js-client-rest/src/openapi/generated_schema.ts @@ -44,21 +44,21 @@ export interface paths { "/healthz": { /** * Kubernetes healthz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Liveness-style health check. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/livez`. Use it only to detect whether the process is up and responsive. */ get: operations["healthz"]; }; "/livez": { /** * Kubernetes livez endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes liveness probe. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/healthz`. A failure indicates the process is unresponsive and should be restarted. */ get: operations["livez"]; }; "/readyz": { /** * Kubernetes readyz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes readiness probe. Checks the instance and waits out pending data operations to see when it can start accepting traffic. In a distributed deployment it returns 200 only once the node has caught up with the cluster consensus commit and its local shards are healthy; otherwise it returns 503. In a single-node deployment it always returns 200 once the API is up. Use it to decide when to route traffic to the instance. */ get: operations["readyz"]; }; @@ -99,6 +99,20 @@ export interface paths { */ delete: operations["remove_peer"]; }; + "/quotas": { + /** + * Get global quotas + * @description Get the cluster-wide resource quota configuration, together with the current utilization it is measured against. + * The configuration is the same on every peer, but the reported utilization is for the node serving this request only - + * memory and disk are node-local, so query each peer to see where the whole cluster stands. + */ + get: operations["get_quotas"]; + /** + * Set global quotas + * @description Replace the cluster-wide resource quota configuration. The new configuration is propagated to every peer through consensus and persisted, so it survives restarts + */ + put: operations["update_quotas"]; + }; "/collections": { /** * List collections @@ -382,73 +396,6 @@ export interface paths { */ post: operations["scroll_points"]; }; - "/collections/{collection_name}/points/search": { - /** - * Search points - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions - */ - post: operations["search_points"]; - }; - "/collections/{collection_name}/points/search/batch": { - /** - * Search batch points - * @deprecated - * @description Retrieve by batch the closest points based on vector similarity and given filtering conditions - */ - post: operations["search_batch_points"]; - }; - "/collections/{collection_name}/points/search/groups": { - /** - * Search point groups - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field - */ - post: operations["search_point_groups"]; - }; - "/collections/{collection_name}/points/recommend": { - /** - * Recommend points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - post: operations["recommend_points"]; - }; - "/collections/{collection_name}/points/recommend/batch": { - /** - * Recommend batch points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - post: operations["recommend_batch_points"]; - }; - "/collections/{collection_name}/points/recommend/groups": { - /** - * Recommend point groups - * @deprecated - * @description 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. - */ - post: operations["recommend_point_groups"]; - }; - "/collections/{collection_name}/points/discover": { - /** - * Discover points - * @deprecated - * @description Use context and a target to find the most similar points to the target, constrained by the context. - * When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. - * Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. - * When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - */ - post: operations["discover_points"]; - }; - "/collections/{collection_name}/points/discover/batch": { - /** - * Discover batch points - * @deprecated - * @description Look for points based on target and/or positive and negative example pairs, in batch. - */ - post: operations["discover_batch_points"]; - }; "/collections/{collection_name}/points/count": { /** * Count points @@ -627,12 +574,15 @@ export interface components { */ read_fan_out_delay_ms?: number | null; /** - * @description If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. + * @deprecated + * @description Deprecated: use `payload.memory` instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. * * Default: true * @default true */ - on_disk_payload?: boolean; + on_disk_payload?: boolean | null; + /** @description Configuration of the payload storage */ + payload?: components["schemas"]["PayloadStorageParams"] | (Record | null); /** @description Configuration of the sparse vector storage */ sparse_vectors?: ({ [key: string]: components["schemas"]["SparseVectorParams"] | undefined; @@ -662,12 +612,17 @@ export interface components { hnsw_config?: components["schemas"]["HnswConfigDiff"] | (Record | null); /** @description Custom params for quantization. If none - values from collection configuration are used. */ quantization_config?: components["schemas"]["QuantizationConfig"] | (Record | null); - /** @description If true, vectors are served from disk, improving RAM usage at the cost of latency Default: false */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, vectors are served from disk, improving RAM usage at the cost of latency Default: false + */ on_disk?: boolean | null; + /** @description Memory placement of the original vector storage. Overrides the deprecated `on_disk` flag if both are set. `pinned` is not supported for dense vector storage. Default: `cached` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** * @description Defines which datatype should be used to represent vectors in the storage. Choosing different datatypes allows to optimize memory usage and performance vs accuracy. * - * - For `float32` datatype - vectors are stored as single-precision floating point numbers, 4 bytes. - For `float16` datatype - vectors are stored as half-precision floating point numbers, 2 bytes. - For `uint8` datatype - vectors are stored as unsigned 8-bit integers, 1 byte. It expects vector elements to be in range `[0, 255]`. + * - For `float32` datatype - vectors are stored as single-precision floating point numbers, 4 bytes. - For `float16` datatype - vectors are stored as half-precision floating point numbers, 2 bytes. - For `uint8` datatype - vectors are stored as unsigned 8-bit integers, 1 byte. It expects vector elements to be in range `[0, 255]`. - For `turbo4` datatype - vectors are quantized to 4 bits per element using the TurboQuant algorithm. */ datatype?: components["schemas"]["Datatype"] | (Record | null); multivector_config?: components["schemas"]["MultiVectorConfig"] | (Record | null); @@ -698,8 +653,13 @@ export interface components { * @description Number of parallel threads used for background index building. If 0 - automatically select from 8 to 16. Best to keep between 8 and 16 to prevent likelihood of building broken/inefficient HNSW graphs. On small CPUs, less threads are used. */ max_indexing_threads?: number | null; - /** @description Store HNSW index on disk. If set to false, the index will be stored in RAM. Default: false */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. Store HNSW index on disk. If set to false, the index will be stored in RAM. Default: false + */ on_disk?: boolean | null; + /** @description Memory placement of the HNSW graph. Overrides the deprecated `on_disk` flag if both are set. Default: `cached` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** * Format: uint * @description Custom M param for additional payload-aware HNSW links. If not set, default M will be used. @@ -708,6 +668,21 @@ export interface components { /** @description Store copies of original and quantized vectors within the HNSW index file. Default: false. Enabling this option will trade the search speed for disk usage by reducing amount of random seeks during the search. Requires quantized vectors to be enabled. Multi-vectors are not supported. */ inline_storage?: boolean | null; }; + /** + * @description Memory placement of a component's data. + * + * Data is always persisted on disk regardless of this setting; it only controls how the data is held in RAM. + * + * Options: + * + * * `Cold` - Data is not pre-loaded from disk to RAM. Preferred for rarely queried components or components larger than RAM size. First request might be slow, but data is cached with usage. + * + * * `Cached` - Data is pre-loaded into disk-cache RAM on start. First request is fast, but data may be evicted if there is not enough memory and some other component's data is used more frequently. + * + * * `Pinned` - Data is loaded in RAM and never evicted. First request is fast, but the component must fit in RAM at all times. Recommended for frequently queried small components like quantized vectors or primary indexes. + * @enum {string} + */ + Memory: "cold" | "cached" | "pinned"; QuantizationConfig: components["schemas"]["ScalarQuantization"] | components["schemas"]["ProductQuantization"] | components["schemas"]["BinaryQuantization"] | components["schemas"]["TurboQuantization"]; ScalarQuantization: { scalar: components["schemas"]["ScalarQuantizationConfig"]; @@ -719,8 +694,13 @@ export interface components { * @description Quantile for quantization. Expected value range in [0.5, 1.0]. If not set - use the whole range of values */ quantile?: number | null; - /** @description If true - quantized vectors always will be stored in RAM, ignoring the config of main storage */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true - quantized vectors always will be stored in RAM, ignoring the config of main storage + */ always_ram?: boolean | null; + /** @description Memory placement of quantized vectors. Overrides the deprecated `always_ram` flag if both are set. Default: follow the memory placement of the original vector storage. */ + memory?: components["schemas"]["Memory"] | (Record | null); }; /** @enum {string} */ ScalarType: "int8"; @@ -729,7 +709,13 @@ export interface components { }; ProductQuantizationConfig: { compression: components["schemas"]["CompressionRatio"]; + /** + * @deprecated + * @description Deprecated: use `memory` instead. + */ always_ram?: boolean | null; + /** @description Memory placement of quantized vectors. Overrides the deprecated `always_ram` flag if both are set. Default: follow the memory placement of the original vector storage. */ + memory?: components["schemas"]["Memory"] | (Record | null); }; /** @enum {string} */ CompressionRatio: "x4" | "x8" | "x16" | "x32" | "x64"; @@ -737,7 +723,13 @@ export interface components { binary: components["schemas"]["BinaryQuantizationConfig"]; }; BinaryQuantizationConfig: { + /** + * @deprecated + * @description Deprecated: use `memory` instead. + */ always_ram?: boolean | null; + /** @description Memory placement of quantized vectors. Overrides the deprecated `always_ram` flag if both are set. Default: follow the memory placement of the original vector storage. */ + memory?: components["schemas"]["Memory"] | (Record | null); encoding?: components["schemas"]["BinaryQuantizationEncoding"] | (Record | null); /** @description Asymmetric quantization configuration allows a query to have different quantization than stored vectors. It can increase the accuracy of search at the cost of performance. */ query_encoding?: components["schemas"]["BinaryQuantizationQueryEncoding"] | (Record | null); @@ -750,13 +742,19 @@ export interface components { turbo: components["schemas"]["TurboQuantQuantizationConfig"]; }; TurboQuantQuantizationConfig: { + /** + * @deprecated + * @description Deprecated: use `memory` instead. + */ always_ram?: boolean | null; + /** @description Memory placement of quantized vectors. Overrides the deprecated `always_ram` flag if both are set. Default: follow the memory placement of the original vector storage. */ + memory?: components["schemas"]["Memory"] | (Record | null); bits?: components["schemas"]["TurboQuantBitSize"] | (Record | null); }; /** @enum {string} */ TurboQuantBitSize: "bits1" | "bits1_5" | "bits2" | "bits4"; /** @enum {string} */ - Datatype: "float32" | "uint8" | "float16"; + Datatype: "float32" | "uint8" | "float16" | "turbo4"; MultiVectorConfig: { comparator: components["schemas"]["MultiVectorComparator"]; }; @@ -764,6 +762,11 @@ export interface components { MultiVectorComparator: "max_sim"; /** @enum {string} */ ShardingMethod: "auto" | "custom"; + /** @description Params of the payload storage */ + PayloadStorageParams: { + /** @description Memory placement of the payload storage. Overrides the deprecated `on_disk_payload` flag if both are set. `pinned` is not supported for payload storage. Default: `cold` (`cached` if `on_disk_payload` is set to false). */ + memory?: components["schemas"]["Memory"] | (Record | null); + }; /** @description Params of single sparse vector data storage */ SparseVectorParams: { /** @description Custom params for index. If none - values from collection configuration are used. */ @@ -780,8 +783,13 @@ export interface components { * Note: this is number of vectors, not KiloBytes. */ full_scan_threshold?: number | null; - /** @description Store index on disk. If set to false, the index will be stored in RAM. Default: false */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. Store index on disk. If set to false, the index will be stored in RAM. Default: false + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** * @description Defines which datatype should be used for the index. Choosing different datatypes allows to optimize memory usage and performance vs accuracy. * @@ -817,8 +825,13 @@ export interface components { * @default 0 */ max_indexing_threads?: number; - /** @description Store HNSW index on disk. If set to false, index will be stored in RAM. Default: false */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. Store HNSW index on disk. If set to false, index will be stored in RAM. Default: false + */ on_disk?: boolean | null; + /** @description Memory placement of the HNSW graph. Overrides the deprecated `on_disk` flag if both are set. Default: `cached` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** * Format: uint * @description Custom M param for hnsw graph built for payload index. If not set, default M will be used. @@ -892,7 +905,7 @@ export interface components { */ max_optimization_threads?: number | null; /** - * @description If this option is set, service will try to prevent creation of large unoptimized segments. When enabled, updates may be blocked at request level if there are unoptimized segments larger than indexing threshold. Updates will be resumed when optimization is completed and segments are optimized below the threshold. Using this option may lead to increased delay between submitting an update and its application. Default is disabled. + * @description If enabled, the service will try to prevent the creation of large unoptimized segments. When enabled, new points written to segments larger than the indexing threshold are stored as "deferred points": they are persisted in the WAL and segments, but excluded from read/search results until the corresponding segments are optimized (e.g. indexed, quantized, or moved to mmap storage). Update requests with `wait=true` will only return after the deferred points become visible, which may significantly increase the perceived latency between submitting an update and its completion. Update requests with `wait=false` are not affected. Default is disabled. * @default null */ prevent_unoptimized?: boolean | null; @@ -1000,7 +1013,8 @@ export interface components { max_payload_index_count?: number | null; /** * Format: uint8 - * @description Reject memory-consuming update operations when resident memory exceeds this percentage of total RAM (1-100) + * @deprecated + * @description Deprecated: use the node-wide quota config instead. Reject memory-consuming update operations when resident memory exceeds this percentage of total RAM (1-100) */ max_resident_memory_percent?: number | null; }; @@ -1054,10 +1068,17 @@ export interface components { type: components["schemas"]["KeywordIndexType"]; /** @description If true - used for tenant optimization. Default: false. */ is_tenant?: boolean | null; - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; + /** @description If true, enable prefix matching (`match: { "prefix": ... }`) on this field. Default: false. */ + prefix?: boolean | null; }; /** @enum {string} */ KeywordIndexType: "keyword"; @@ -1069,8 +1090,13 @@ export interface components { range?: boolean | null; /** @description If true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. Default is false. */ is_principal?: boolean | null; - /** @description If true, store the index on disk. Default: false. Default is false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; }; @@ -1080,8 +1106,13 @@ export interface components { type: components["schemas"]["FloatIndexType"]; /** @description If true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. */ is_principal?: boolean | null; - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; }; @@ -1089,8 +1120,13 @@ export interface components { FloatIndexType: "float"; GeoIndexParams: { type: components["schemas"]["GeoIndexType"]; - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; }; @@ -1117,8 +1153,13 @@ export interface components { phrase_matching?: boolean | null; /** @description Ignore this set of tokens. Can select from predefined languages and/or provide a custom set. */ stopwords?: components["schemas"]["StopwordsInterface"] | (Record | null); - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Algorithm for stemming. Default: disabled. */ stemmer?: components["schemas"]["StemmingAlgorithm"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ @@ -1138,7 +1179,7 @@ export interface components { custom?: (string)[] | null; }; /** @description Different stemming algorithms with their configs. */ - StemmingAlgorithm: components["schemas"]["SnowballParams"]; + StemmingAlgorithm: components["schemas"]["SnowballParams"] | components["schemas"]["DisabledStemmerParams"]; SnowballParams: { type: components["schemas"]["Snowball"]; language: components["schemas"]["SnowballLanguage"]; @@ -1150,10 +1191,23 @@ export interface components { * @enum {string} */ SnowballLanguage: "arabic" | "armenian" | "danish" | "dutch" | "english" | "finnish" | "french" | "german" | "greek" | "hungarian" | "italian" | "norwegian" | "portuguese" | "romanian" | "russian" | "spanish" | "swedish" | "tamil" | "turkish"; + DisabledStemmerParams: { + type: components["schemas"]["NoStemmer"]; + }; + /** + * @description Tag selecting the explicit "no stemming" algorithm. + * @enum {string} + */ + NoStemmer: "none"; BoolIndexParams: { type: components["schemas"]["BoolIndexType"]; - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; }; @@ -1163,8 +1217,13 @@ export interface components { type: components["schemas"]["DatetimeIndexType"]; /** @description If true - use this key to organize storage of the collection data. This option assumes that this key will be used in majority of filtered requests. */ is_principal?: boolean | null; - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; }; @@ -1174,8 +1233,13 @@ export interface components { type: components["schemas"]["UuidIndexType"]; /** @description If true - used for tenant optimization. */ is_tenant?: boolean | null; - /** @description If true, store the index on disk. Default: false. */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, store the index on disk. Default: false. + */ on_disk?: boolean | null; + /** @description Memory placement of the index. Overrides the deprecated `on_disk` flag if both are set. Default: `pinned` (`cold` if `on_disk` is set to true). */ + memory?: components["schemas"]["Memory"] | (Record | null); /** @description Enable HNSW graph building for this payload field. If true, builds additional HNSW links (Need payload_m > 0). Default: true. */ enable_hnsw?: boolean | null; }; @@ -1249,60 +1313,61 @@ export interface components { values: (number)[]; }; OrderValue: number; - /** @description Search request. Holds all conditions and parameters for the search of most similar points by vector similarity given the filtering restrictions. */ - SearchRequest: { - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - vector: components["schemas"]["NamedVectorStruct"]; - /** @description Look only for points which satisfies this conditions */ - filter?: components["schemas"]["Filter"] | (Record | null); - /** @description Additional search params */ - params?: components["schemas"]["SearchParams"] | (Record | null); - /** - * Format: uint - * @description Max number of result to return - */ - limit: number; + /** @description Search result */ + ScoredPoint: { + id: components["schemas"]["ExtendedPointId"]; /** - * Format: uint - * @description Offset of the first result to return. May be used to paginate results. Note: large offset values may cause performance issues. + * Format: uint64 + * @description Point version + * @example 3 */ - offset?: number | null; - /** @description Select which payload to return with the response. Default is false. */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); + version: number; /** - * @description Options for specifying which vectors to include into response. Default is false. - * @default null + * Format: float + * @description Points vector distance to the query vector + * @example 0.75 */ - with_vector?: components["schemas"]["WithVector"] | (Record | null); + score: number; + /** @description Payload - values assigned to the point */ + payload?: components["schemas"]["Payload"] | (Record | null); + /** @description Vector of the point */ + vector?: components["schemas"]["VectorStructOutput"] | (Record | null); + /** @description Shard Key */ + shard_key?: components["schemas"]["ShardKey"] | (Record | null); + /** @description Order-by value */ + order_value?: components["schemas"]["OrderValue"] | (Record | null); + }; + UpdateResult: { /** - * Format: float - * @description Define a minimal score threshold for the result. If defined, less similar results will not be returned. Score of the returned result might be higher or smaller than the threshold depending on the Distance function used. E.g. for cosine similarity only higher scores will be returned. + * Format: uint64 + * @description Sequential number of the operation */ - score_threshold?: number | null; + operation_id?: number | null; + status: components["schemas"]["UpdateStatus"]; }; /** - * @description Vector data separator for named and unnamed modes Unnamed mode: - * - * { "vector": [1.0, 2.0, 3.0] } - * - * or named mode: - * - * { "vector": { "vector": [1.0, 2.0, 3.0], "name": "image-embeddings" } } + * @description `Acknowledged` - Request is saved to WAL and will be process in a queue. `Completed` - Request is completed, changes are actual. `WaitTimeout` - Request is waiting for timeout. + * @enum {string} */ - NamedVectorStruct: (number)[] | components["schemas"]["NamedVector"] | components["schemas"]["NamedSparseVector"]; - /** @description Dense vector data with name */ - NamedVector: { - /** @description Name of vector data */ - name: string; - /** @description Vector data */ - vector: (number)[]; - }; - /** @description Sparse vector data with name */ - NamedSparseVector: { - /** @description Name of vector data */ - name: string; - vector: components["schemas"]["SparseVector"]; + UpdateStatus: "acknowledged" | "completed" | "wait_timeout"; + /** @description Scroll request - paginate over all points which matches given condition */ + ScrollRequest: { + /** @description Specify in which shards to look for the points, if not specified - look in all shards */ + shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); + /** @description Start ID to read points from. */ + offset?: components["schemas"]["ExtendedPointId"] | (Record | null); + /** + * Format: uint + * @description Page size. Default: 10 + */ + limit?: number | null; + /** @description Look only for points which satisfies this conditions. If not provided - all points. */ + filter?: components["schemas"]["Filter"] | (Record | null); + /** @description Select which payload to return with the response. Default is true. */ + with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); + with_vector?: components["schemas"]["WithVector"]; + /** @description Order the records by a payload field. */ + order_by?: components["schemas"]["OrderByInterface"] | (Record | null); }; Filter: { /** @description At least one of those conditions should match */ @@ -1314,7 +1379,7 @@ export interface components { /** @description All conditions must NOT match */ must_not?: components["schemas"]["Condition"] | (components["schemas"]["Condition"])[] | (Record | null); }; - Condition: components["schemas"]["FieldCondition"] | components["schemas"]["IsEmptyCondition"] | components["schemas"]["IsNullCondition"] | components["schemas"]["HasIdCondition"] | components["schemas"]["HasVectorCondition"] | components["schemas"]["NestedCondition"] | components["schemas"]["Filter"]; + Condition: components["schemas"]["FieldCondition"] | components["schemas"]["IsEmptyCondition"] | components["schemas"]["IsNullCondition"] | components["schemas"]["HasIdCondition"] | components["schemas"]["HasVectorCondition"] | components["schemas"]["SliceCondition"] | components["schemas"]["NestedCondition"] | components["schemas"]["Filter"]; /** @description All possible payload filtering conditions */ FieldCondition: { /** @description Payload key */ @@ -1337,7 +1402,7 @@ export interface components { is_null?: boolean | null; }; /** @description Match filter request */ - Match: components["schemas"]["MatchValue"] | components["schemas"]["MatchText"] | components["schemas"]["MatchTextAny"] | components["schemas"]["MatchPhrase"] | components["schemas"]["MatchAny"] | components["schemas"]["MatchExcept"]; + Match: components["schemas"]["MatchValue"] | components["schemas"]["MatchText"] | components["schemas"]["MatchTextAny"] | components["schemas"]["MatchPhrase"] | components["schemas"]["MatchPrefix"] | components["schemas"]["MatchAny"] | components["schemas"]["MatchExcept"]; /** @description Exact match of the given value */ MatchValue: { value: components["schemas"]["ValueVariants"]; @@ -1355,6 +1420,14 @@ export interface components { MatchPhrase: { phrase: string; }; + /** + * @description Match keyword values that start with the given string. + * + * Byte-wise (hence, for valid UTF-8, character-wise) and case-sensitive, consistent with exact keyword matching. Served efficiently by a keyword index created with the `prefix` option. + */ + MatchPrefix: { + prefix: string; + }; /** @description Exact match on any of the given values */ MatchAny: { any: components["schemas"]["AnyVariants"]; @@ -1498,6 +1571,29 @@ export interface components { HasVectorCondition: { has_vector: string; }; + /** @description Select points that fall into one of `total` disjoint deterministic slices of the id space, for parallel scans and reproducible sampling. */ + SliceCondition: { + slice: components["schemas"]["Slice"]; + }; + /** + * @description One of `total` disjoint deterministic slices of the id space. + * + * A point belongs to the slice iff `hash(id) % total == index`, where `hash` is SipHash-2-4 with a zero key over the canonical id bytes: 8 little-endian bytes for numeric ids, the 16 RFC 4122 bytes for UUIDs. For a fixed `total`, slices `0..total` are disjoint and together cover all points; membership is uniform regardless of the id scheme and stable across queries, segments, platforms and Qdrant versions. + * + * Slices with different `total` values are correlated (same hash, no salt): e.g. slice `0` of `total: 4` is a strict subset of slice `0` of `total: 2`. This keeps a smaller sample contained in a larger one. + */ + Slice: { + /** + * Format: uint32 + * @description Total number of disjoint slices the id space is split into + */ + total: number; + /** + * Format: uint32 + * @description Which slice to select, must be in `0..total` + */ + index: number; + }; NestedCondition: { nested: components["schemas"]["Nested"]; }; @@ -1511,267 +1607,71 @@ export interface components { /** Format: uint */ min_count: number; }; - /** @description Additional parameters of the search */ - SearchParams: { + OrderByInterface: string | components["schemas"]["OrderBy"]; + OrderBy: { + /** @description Payload key to order by */ + key: string; + /** @description Direction of ordering: `asc` or `desc`. Default is ascending. */ + direction?: components["schemas"]["Direction"] | (Record | null); + /** @description Which payload value to start scrolling from. Default is the lowest value for `asc` and the highest for `desc` */ + start_from?: components["schemas"]["StartFrom"] | (Record | null); + }; + /** @enum {string} */ + Direction: "asc" | "desc"; + StartFrom: number | string; + /** @description Result of the points read request */ + ScrollResult: { /** - * Format: uint - * @description Params relevant to HNSW index Size of the beam in a beam-search. Larger the value - more accurate the result, more time required for search. + * @description List of retrieved points + * @example [ + * { + * "id": 40, + * "payload": { + * "city": "London", + * "color": "green" + * }, + * "vector": [ + * 0.875, + * 0.140625, + * 0.897599995136261 + * ], + * "shard_key": "region_1" + * }, + * { + * "id": 41, + * "payload": { + * "city": "Paris", + * "color": "red" + * }, + * "vector": [ + * 0.75, + * 0.640625, + * 0.8945000171661377 + * ], + * "shard_key": "region_1" + * } + * ] */ - hnsw_ef?: number | null; + points: (components["schemas"]["Record"])[]; + /** @description Offset which should be used to retrieve a next page result */ + next_page_offset?: components["schemas"]["ExtendedPointId"] | (Record | null); + }; + /** @description Operation for creating new collection and (optionally) specify index params */ + CreateCollection: { + vectors?: components["schemas"]["VectorsConfig"]; /** - * @description Search without approximation. If set to true, search may run long but with exact results. - * @default false + * Format: uint32 + * @description For auto sharding: Number of shards in collection. - Default is 1 for standalone, otherwise equal to the number of nodes - Minimum is 1 + * + * For custom sharding: Number of shards in collection per shard group. - Default is 1, meaning that each shard key will be mapped to a single shard - Minimum is 1 + * @default null */ - exact?: boolean; - /** @description Quantization params */ - quantization?: components["schemas"]["QuantizationSearchParams"] | (Record | null); + shard_number?: number | null; /** - * @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 - * @default false + * @description Sharding method Default is Auto - points are distributed across all available shards Custom - points are distributed across shards according to shard key + * @default null */ - indexed_only?: boolean; - /** @description ACORN search params */ - acorn?: components["schemas"]["AcornSearchParams"] | (Record | null); - }; - /** @description Additional parameters of the search */ - QuantizationSearchParams: { - /** - * @description If true, quantized vectors are ignored. Default is false. - * @default false - */ - ignore?: boolean; - /** @description If true, use original vectors to re-score top-k results. Might require more time in case if original vectors are stored on disk. If not set, qdrant decides automatically apply rescoring or not. */ - rescore?: boolean | null; - /** - * Format: double - * @description Oversampling factor for quantization. Default is 1.0. - * - * Defines how many extra vectors should be preselected using quantized index, and then re-scored using original vectors. - * - * For example, if `oversampling` is 2.4 and `limit` is 100, then 240 vectors will be preselected using quantized index, and then top-100 will be returned after re-scoring. - */ - oversampling?: number | null; - }; - /** @description ACORN-related search parameters */ - AcornSearchParams: { - /** - * @description If true, then ACORN may be used for the HNSW search based on filters selectivity. Improves search recall for searches with multiple low-selectivity payload filters, at cost of performance. - * @default false - */ - enable?: boolean; - /** - * Format: double - * @description Maximum selectivity of filters to enable ACORN. - * - * If estimated filters selectivity is higher than this value, ACORN will not be used. Selectivity is estimated as: `estimated number of points satisfying the filters / total number of points`. - * - * 0.0 for never, 1.0 for always. Default is 0.4. - */ - max_selectivity?: number | null; - }; - /** @description Search result */ - ScoredPoint: { - id: components["schemas"]["ExtendedPointId"]; - /** - * Format: uint64 - * @description Point version - * @example 3 - */ - version: number; - /** - * Format: float - * @description Points vector distance to the query vector - * @example 0.75 - */ - score: number; - /** @description Payload - values assigned to the point */ - payload?: components["schemas"]["Payload"] | (Record | null); - /** @description Vector of the point */ - vector?: components["schemas"]["VectorStructOutput"] | (Record | null); - /** @description Shard Key */ - shard_key?: components["schemas"]["ShardKey"] | (Record | null); - /** @description Order-by value */ - order_value?: components["schemas"]["OrderValue"] | (Record | null); - }; - UpdateResult: { - /** - * Format: uint64 - * @description Sequential number of the operation - */ - operation_id?: number | null; - status: components["schemas"]["UpdateStatus"]; - }; - /** - * @description `Acknowledged` - Request is saved to WAL and will be process in a queue. `Completed` - Request is completed, changes are actual. `WaitTimeout` - Request is waiting for timeout. - * @enum {string} - */ - UpdateStatus: "acknowledged" | "completed" | "wait_timeout"; - /** - * @description Recommendation request. Provides positive and negative examples of the vectors, which can be ids of points that are already stored in the collection, raw vectors, or even ids and vectors combined. - * - * Service should look for the points which are closer to positive examples and at the same time further to negative examples. The concrete way of how to compare negative and positive distances is up to the `strategy` chosen. - */ - RecommendRequest: { - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - /** - * @description Look for vectors closest to those - * @default [] - */ - positive?: (components["schemas"]["RecommendExample"])[]; - /** - * @description Try to avoid vectors like this - * @default [] - */ - negative?: (components["schemas"]["RecommendExample"])[]; - /** @description How to use positive and negative examples to find the results */ - strategy?: components["schemas"]["RecommendStrategy"] | (Record | null); - /** @description Look only for points which satisfies this conditions */ - filter?: components["schemas"]["Filter"] | (Record | null); - /** @description Additional search params */ - params?: components["schemas"]["SearchParams"] | (Record | null); - /** - * Format: uint - * @description Max number of result to return - */ - limit: number; - /** - * Format: uint - * @description Offset of the first result to return. May be used to paginate results. Note: large offset values may cause performance issues. - */ - offset?: number | null; - /** @description Select which payload to return with the response. Default is false. */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); - /** - * @description Options for specifying which vectors to include into response. Default is false. - * @default null - */ - with_vector?: components["schemas"]["WithVector"] | (Record | null); - /** - * Format: float - * @description Define a minimal score threshold for the result. If defined, less similar results will not be returned. Score of the returned result might be higher or smaller than the threshold depending on the Distance function used. E.g. for cosine similarity only higher scores will be returned. - */ - score_threshold?: number | null; - /** - * @description Define which vector to use for recommendation, if not specified - try to use default vector - * @default null - */ - using?: components["schemas"]["UsingVector"] | (Record | null); - /** - * @description The location used to lookup vectors. If not specified - use current collection. Note: the other collection should have the same vector size as the current collection - * @default null - */ - lookup_from?: components["schemas"]["LookupLocation"] | (Record | null); - }; - RecommendExample: components["schemas"]["ExtendedPointId"] | (number)[] | components["schemas"]["SparseVector"]; - /** - * @description How to use positive and negative examples to find the results, default is `average_vector`: - * - * * `average_vector` - Average positive and negative vectors and create a single query with the formula `query = avg_pos + avg_pos - avg_neg`. Then performs normal search. - * - * * `best_score` - Uses custom search objective. Each candidate is compared against all examples, its score is then chosen from the `max(max_pos_score, max_neg_score)`. If the `max_neg_score` is chosen then it is squared and negated, otherwise it is just the `max_pos_score`. - * - * * `sum_scores` - Uses custom search objective. Compares against all inputs, sums all the scores. Scores against positive vectors are added, against negatives are subtracted. - * @enum {string} - */ - RecommendStrategy: "average_vector" | "best_score" | "sum_scores"; - UsingVector: string; - /** @description Defines a location to use for looking up the vector. Specifies collection and vector field name. */ - LookupLocation: { - /** @description Name of the collection used for lookup */ - collection: string; - /** - * @description Optional name of the vector field within the collection. If not provided, the default vector field will be used. - * @default null - */ - vector?: string | null; - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - }; - /** @description Scroll request - paginate over all points which matches given condition */ - ScrollRequest: { - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - /** @description Start ID to read points from. */ - offset?: components["schemas"]["ExtendedPointId"] | (Record | null); - /** - * Format: uint - * @description Page size. Default: 10 - */ - limit?: number | null; - /** @description Look only for points which satisfies this conditions. If not provided - all points. */ - filter?: components["schemas"]["Filter"] | (Record | null); - /** @description Select which payload to return with the response. Default is true. */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); - with_vector?: components["schemas"]["WithVector"]; - /** @description Order the records by a payload field. */ - order_by?: components["schemas"]["OrderByInterface"] | (Record | null); - }; - OrderByInterface: string | components["schemas"]["OrderBy"]; - OrderBy: { - /** @description Payload key to order by */ - key: string; - /** @description Direction of ordering: `asc` or `desc`. Default is ascending. */ - direction?: components["schemas"]["Direction"] | (Record | null); - /** @description Which payload value to start scrolling from. Default is the lowest value for `asc` and the highest for `desc` */ - start_from?: components["schemas"]["StartFrom"] | (Record | null); - }; - /** @enum {string} */ - Direction: "asc" | "desc"; - StartFrom: number | string; - /** @description Result of the points read request */ - ScrollResult: { - /** - * @description List of retrieved points - * @example [ - * { - * "id": 40, - * "payload": { - * "city": "London", - * "color": "green" - * }, - * "vector": [ - * 0.875, - * 0.140625, - * 0.897599995136261 - * ], - * "shard_key": "region_1" - * }, - * { - * "id": 41, - * "payload": { - * "city": "Paris", - * "color": "red" - * }, - * "vector": [ - * 0.75, - * 0.640625, - * 0.8945000171661377 - * ], - * "shard_key": "region_1" - * } - * ] - */ - points: (components["schemas"]["Record"])[]; - /** @description Offset which should be used to retrieve a next page result */ - next_page_offset?: components["schemas"]["ExtendedPointId"] | (Record | null); - }; - /** @description Operation for creating new collection and (optionally) specify index params */ - CreateCollection: { - vectors?: components["schemas"]["VectorsConfig"]; - /** - * Format: uint32 - * @description For auto sharding: Number of shards in collection. - Default is 1 for standalone, otherwise equal to the number of nodes - Minimum is 1 - * - * For custom sharding: Number of shards in collection per shard group. - Default is 1, meaning that each shard key will be mapped to a single shard - Minimum is 1 - * @default null - */ - shard_number?: number | null; - /** - * @description Sharding method Default is Auto - points are distributed across all available shards Custom - points are distributed across shards according to shard key - * @default null - */ - sharding_method?: components["schemas"]["ShardingMethod"] | (Record | null); + sharding_method?: components["schemas"]["ShardingMethod"] | (Record | null); /** * Format: uint32 * @description Number of shards replicas. Default is 1 Minimum is 1 @@ -1785,12 +1685,18 @@ export interface components { */ write_consistency_factor?: number | null; /** - * @description If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. + * @deprecated + * @description Deprecated: use `payload.memory` instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. * * Default: true * @default null */ on_disk_payload?: boolean | null; + /** + * @description Configuration of the payload storage + * @default null + */ + payload?: components["schemas"]["PayloadStorageParams"] | (Record | null); /** @description Custom params for HNSW index. If none - values from service configuration file are used. */ hnsw_config?: components["schemas"]["HnswConfigDiff"] | (Record | null); /** @description Custom params for WAL. If none - values from service configuration file are used. */ @@ -1886,7 +1792,7 @@ export interface components { /** @description Max number of threads (jobs) for running optimizations per shard. Note: each optimization job will also use `max_indexing_threads` threads by itself for index building. If "auto" - have no limit and choose dynamically to saturate CPU. If 0 - no optimization threads, optimizations will be disabled. */ max_optimization_threads?: components["schemas"]["MaxOptimizationThreads"] | (Record | null); /** - * @description If this option is set, service will try to prevent creation of large unoptimized segments. When enabled, updates may be blocked at request level if there are unoptimized segments larger than indexing threshold. Updates will be resumed when optimization is completed and segments are optimized below the threshold. Using this option may lead to increased delay between submitting an update and its application. Default is disabled. + * @description If enabled, the service will try to prevent the creation of large unoptimized segments. When enabled, new points written to segments larger than the indexing threshold are stored as "deferred points": they are persisted in the WAL and segments, but excluded from read/search results until the corresponding segments are optimized (e.g. indexed, quantized, or moved to mmap storage). Update requests with `wait=true` will only return after the deferred points become visible, which may significantly increase the perceived latency between submitting an update and its completion. Update requests with `wait=false` are not affected. Default is disabled. * @default null */ prevent_unoptimized?: boolean | null; @@ -1979,7 +1885,10 @@ export interface components { max_payload_index_count?: number | null; /** * Format: uint8 - * @description Reject memory-consuming update operations (e.g. upsert, set payload) when the process resident memory exceeds this percentage of total system memory (or cgroup limit). Value in [1, 100]. Applied uniformly to external and internal (replication) traffic — rejection is deterministic so it does not cause replica divergence. Delete operations are not affected, so callers can still free memory. + * @deprecated + * @description Deprecated: use the node-wide quota config (`PUT /quotas`) instead, which caps the same resource for every collection. Scheduled for removal in 1.21. + * + * Reject memory-consuming update operations (e.g. upsert, set payload) when the process resident memory exceeds this percentage of total system memory (or cgroup limit). Value in [1, 100]. Memory is a node-wide resource, so this only tightens the quota for one collection; it cannot lift it. Delete operations are not affected, so callers can still free memory. */ max_resident_memory_percent?: number | null; }; @@ -2021,7 +1930,7 @@ export interface components { /** @description Map of sparse vector data parameters to update for each sparse vector. */ sparse_vectors?: components["schemas"]["SparseVectorsConfig"] | (Record | null); strict_mode_config?: components["schemas"]["StrictModeConfig"] | (Record | null); - /** @description Metadata to update for the collection. If provided, this will merge with existing metadata. To remove metadata, set it to an empty object. */ + /** @description Metadata to update for the collection. If provided, this will merge with existing metadata. Individual keys can be removed by setting their value to `null`. */ metadata?: components["schemas"]["Payload"] | (Record | null); }; /** @@ -2037,8 +1946,13 @@ export interface components { hnsw_config?: components["schemas"]["HnswConfigDiff"] | (Record | null); /** @description Update params for quantization. If none - it is left unchanged. */ quantization_config?: components["schemas"]["QuantizationConfigDiff"] | (Record | null); - /** @description If true, vectors are served from disk, improving RAM usage at the cost of latency */ + /** + * @deprecated + * @description Deprecated: use `memory` instead. If true, vectors are served from disk, improving RAM usage at the cost of latency + */ on_disk?: boolean | null; + /** @description Memory placement of the original vector storage. Overrides the deprecated `on_disk` flag if both are set. `pinned` is not supported for dense vector storage. */ + memory?: components["schemas"]["Memory"] | (Record | null); }; QuantizationConfigDiff: components["schemas"]["ScalarQuantization"] | components["schemas"]["ProductQuantization"] | components["schemas"]["BinaryQuantization"] | components["schemas"]["TurboQuantization"] | components["schemas"]["Disabled"]; /** @enum {string} */ @@ -2065,10 +1979,13 @@ export interface components { */ read_fan_out_delay_ms?: number | null; /** - * @description If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. + * @deprecated + * @description Deprecated: use `payload.memory` instead. If true - point's payload will not be stored in memory. It will be read from the disk every time it is requested. This setting saves RAM by (slightly) increasing the response time. Note: those payload values that are involved in filtering and are indexed - remain in RAM. * @default null */ on_disk_payload?: boolean | null; + /** @description Update params of the payload storage. If none - it is left unchanged. */ + payload?: components["schemas"]["PayloadStorageParams"] | (Record | null); }; SparseVectorsConfig: { [key: string]: components["schemas"]["SparseVectorParams"] | undefined; @@ -2181,7 +2098,7 @@ export interface components { */ avg_len?: number; tokenizer?: components["schemas"]["TokenizerType"]; - /** @description Defines which language to use for text preprocessing. This parameter is used to construct default stopwords filter and stemmer. To disable language-specific processing, set this to `"language": "none"`. If not specified, English is assumed. */ + /** @description Defines which language to use for text preprocessing. This parameter is used to construct default stopwords filter and stemmer. To disable language-specific processing, set `stemmer` to `{"type": "none"}` and configure an empty stopword set. The legacy `"language": "none"` hack is deprecated and may be rejected in a future release. If not specified, English is assumed. */ language?: string | null; /** @description Lowercase the text before tokenization. Default is `true`. */ lowercase?: boolean | null; @@ -2527,6 +2444,8 @@ export interface components { memory?: components["schemas"]["MemoryTelemetry"] | (Record | null); hardware?: components["schemas"]["HardwareTelemetry"] | (Record | null); search_pool?: components["schemas"]["SearchThreadPoolTelemetry"] | (Record | null); + /** @description Resource quota this node is enforcing, and whether it is currently over it. The config is whatever this node last persisted, so a peer that missed a consensus update reports what it is actually applying rather than what the cluster agreed on. Absent for a token without global access, which `GET /quotas` requires as well. */ + quota?: components["schemas"]["QuotaTelemetry"] | (Record | null); }; AppBuildTelemetry: { name: string; @@ -2575,10 +2494,37 @@ export interface components { /** * @description Use single-file mmap in-ram vector storage (InRamMmap) * - * Enabled by default in Qdrant 1.17.1+ - * @default false + * Enabled by default in Qdrant 1.18.3+ + * @default true */ single_file_mmap_vector_storage?: boolean; + /** + * @description Allow the io_uring-based payload storage implementation. When disabled, io_uring payload storage is *never* used. When enabled, payload storage backend is decided based on `storage.performance.io_uring` option and payload storage type. + * @default true + */ + async_payload_storage?: boolean; + /** + * @description Write a segment manifest (`segments_manifest.json`, next to the `segments/` directory) listing the shard's segments and their state, so out-of-process readers can discover segments without scanning the filesystem. + * @default false + */ + write_segment_manifest?: boolean; + /** + * @description Build new segments in append-only mode: in-place point mutations become clone-and-tombstone appends instead. Intended for testing the append-only storage path. + * @default false + */ + append_only_mutations?: boolean; + /** + * @description Persist write-once bitmasks in the compact `StoredBitmask` format instead of raw dense bitslices. Only gates writing: both formats are always readable. + * @default false + */ + compact_bitmask?: boolean; + /** + * @description Serverless-compatible deployment mode. Automatically enables [`Self::write_segment_manifest`], [`Self::append_only_mutations`] and [`Self::compact_bitmask`]. + * + * Note that this will only be applied when passed into [`init_feature_flags`]. + * @default false + */ + serverless_compatible?: boolean; }; /** * @description Controls how segments are loaded on startup to reduce memory pressure. @@ -2607,9 +2553,15 @@ export interface components { * @description Average number of CPU cores used by this process over roughly the last two seconds. `None` on unsupported platforms, before two samples are collected, or on transient failures reading process CPU time. */ cpu_cores_used?: number | null; - /** Format: uint */ + /** + * Format: uint + * @description Effective total memory for this process in KiB (cgroup limit or host RAM). + */ ram_size?: number | null; - /** Format: uint */ + /** + * Format: uint + * @description Size in KiB of the filesystem hosting Qdrant's /storage path (if not available, fallback to host disk size) + */ disk_size?: number | null; cpu_flags: string; cpu_endian?: components["schemas"]["CpuEndian"] | (Record | null); @@ -2770,6 +2722,8 @@ export interface components { vector_data: { [key: string]: components["schemas"]["VectorDataInfo"] | undefined; }; + /** @description Universal I/O backend that payload storage reads files with. Absent if payload storage does not support configurable backends or only supports a single backend type. */ + payload_storage_io_backend?: components["schemas"]["IoBackend"] | (Record | null); /** * Format: uint32 * @description Internal ID from which points are deferred (hidden from reads). Only set for appendable segments. @@ -2788,7 +2742,22 @@ export interface components { num_indexed_vectors: number; /** Format: uint */ num_deleted_vectors: number; + /** @description Universal I/O backend that this vector storage reads files with. Absent if vector storage does not support configurable backends or only supports a single backend type. */ + io_backend?: components["schemas"]["IoBackend"] | (Record | null); }; + /** + * @description Universal I/O backend that is used to read files. + * + * Decided when the component is opened based on `storage.performance.io_uring` option, component memory placement and kernel io_uring support. + * + * Options: + * + * * `Mmap` - Reads are served by the page cache through a memory mapping. + * + * * `IoUring` - Reads are submitted to the kernel with io_uring. + * @enum {string} + */ + IoBackend: "mmap" | "io_uring"; SegmentConfig: { /** @default {} */ vector_data?: { @@ -2832,7 +2801,7 @@ export interface components { * @description Storage types for vectors * @enum {string} */ - VectorStorageDatatype: "float32" | "float16" | "uint8"; + VectorStorageDatatype: "float32" | "float16" | "uint8" | "turbo4"; /** @description Config of single sparse vector data storage */ SparseVectorDataConfig: { index: components["schemas"]["SparseIndexConfig"]; @@ -2852,7 +2821,13 @@ export interface components { index_type: components["schemas"]["SparseIndexType"]; /** @description Datatype used to store weights in the index. */ datatype?: components["schemas"]["VectorStorageDatatype"] | (Record | null); - }; + /** + * @description Requested memory placement of the index. + * + * The structural decision is carried by `index_type`; this field additionally distinguishes `cold` from `cached` for the mmap index variant. + */ + memory?: components["schemas"]["Memory"] | (Record | null); + }; /** @description Sparse index types */ SparseIndexType: "MutableRam" | "ImmutableRam" | "Mmap"; SparseVectorStorageType: "mmap" | "empty"; @@ -3168,6 +3143,59 @@ export interface components { */ high_io_threads: number; }; + /** + * @description What a node reports about the quota it is enforcing. + * + * Carries the verdict rather than the raw utilization, because the point of reporting it is to know whether this node is currently refusing writes — which depends on the limits as well as the readings. + */ + QuotaTelemetry: { + config: components["schemas"]["QuotaConfig"]; + exceeded: components["schemas"]["QuotaExceeded"]; + }; + /** + * @description Cluster-wide limits on node resources. + * + * An unset limit means the corresponding resource is not capped. Limits are only enforced while `enabled` is true. + */ + QuotaConfig: { + /** + * @description Whether the limits below are enforced. + * @default false + */ + enabled?: boolean; + /** + * Format: uint8 + * @description Reject memory-consuming updates once process resident memory reaches this percentage of total system memory (or of the cgroup limit, if one applies). + */ + max_resident_memory_percent?: number | null; + /** + * Format: uint8 + * @description Reject disk-consuming updates once the filesystem hosting the storage directory is filled to this percentage of its capacity. + */ + max_disk_usage_percent?: number | null; + /** + * Format: uint8 + * @description How many percentage points below its limit a resource has to fall before this node starts accepting work again. + * + * Without a margin, a resource resting on its limit crosses it in both directions on the noise between two readings, putting the node in and out of service each time — and restarting a shard recovery with it. Raise it where usage is volatile; `0` disables the margin and releases as soon as usage is back under the limit. + * + * Unset leaves the built-in default in force, so a config written today does not pin a number that a later release may want to revise. + */ + release_margin_percent?: number | null; + }; + /** + * @description Which of the enforced limits a node is currently refusing work over. + * + * Reported per resource because they are freed by different actions: disk by deleting or optimizing, memory by unloading. A single flag would not say which one to go and fix. + * + * `true` outlasts the reading that caused it: a resource that reaches its limit stays flagged until it has fallen a margin below, so that one resting near the limit does not flip the node in and out of service. Expect to see it set while the reported utilization is already back under the configured limit. + * + * A field is `null` when the node is not enforcing that resource — the quota is disabled, no limit is set for it, or it cannot be measured here. That is deliberately distinct from `false`: a resource that can never trip must not be reported as one that is within its limits, or it invites an alert that can never fire. + */ + QuotaExceeded: { + resident_memory?: boolean | null; + disk_usage?: boolean | null; + }; ClusterOperations: components["schemas"]["MoveShardOperation"] | components["schemas"]["ReplicateShardOperation"] | components["schemas"]["AbortTransferOperation"] | components["schemas"]["DropReplicaOperation"] | components["schemas"]["CreateShardingKeyOperation"] | components["schemas"]["DropShardingKeyOperation"] | components["schemas"]["RestartTransferOperation"] | components["schemas"]["StartReshardingOperation"] | components["schemas"]["AbortReshardingOperation"] | components["schemas"]["ReplicatePointsOperation"]; MoveShardOperation: { move_shard: components["schemas"]["MoveShard"]; @@ -3258,8 +3286,12 @@ export interface components { }; StartResharding: { direction: components["schemas"]["ReshardingDirection"]; - /** Format: uint64 */ + /** + * Format: uint64 + * @description Peer to create the new shard on, or to migrate points away from when scaling down. If not specified, the least loaded peer is picked when scaling up, a peer holding the removed shard when scaling down. + */ peer_id?: number | null; + /** @description Custom shard key to reshard, must already exist. If not specified, shards without a shard key are resharded. */ shard_key?: components["schemas"]["ShardKey"] | (Record | null); }; AbortReshardingOperation: { @@ -3274,12 +3306,6 @@ export interface components { from_shard_key: components["schemas"]["ShardKey"]; to_shard_key: components["schemas"]["ShardKey"]; }; - SearchRequestBatch: { - searches: (components["schemas"]["SearchRequest"])[]; - }; - RecommendRequestBatch: { - searches: (components["schemas"]["RecommendRequest"])[]; - }; SnapshotRecover: { /** * Format: uri @@ -3386,115 +3412,6 @@ export interface components { }; /** @description Value of the group_by key, shared across all the hits in the group */ GroupId: string | number; - SearchGroupsRequest: { - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - vector: components["schemas"]["NamedVectorStruct"]; - /** @description Look only for points which satisfies this conditions */ - filter?: components["schemas"]["Filter"] | (Record | null); - /** @description Additional search params */ - params?: components["schemas"]["SearchParams"] | (Record | null); - /** @description Select which payload to return with the response. Default is false. */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); - /** - * @description Options for specifying which vectors to include into response. Default is false. - * @default null - */ - with_vector?: components["schemas"]["WithVector"] | (Record | null); - /** - * Format: float - * @description Define a minimal score threshold for the result. If defined, less similar results will not be returned. Score of the returned result might be higher or smaller than the threshold depending on the Distance function used. E.g. for cosine similarity only higher scores will be returned. - */ - score_threshold?: number | null; - /** @description Payload field to group by, must be a string or number field. If the field contains more than 1 value, all values will be used for grouping. One point can be in multiple groups. */ - group_by: string; - /** - * Format: uint32 - * @description Maximum amount of points to return per group - */ - group_size: number; - /** - * Format: uint32 - * @description Maximum amount of groups to return - */ - limit: number; - /** @description Look for points in another collection using the group ids */ - with_lookup?: components["schemas"]["WithLookupInterface"] | (Record | null); - }; - WithLookupInterface: string | components["schemas"]["WithLookup"]; - WithLookup: { - /** @description Name of the collection to use for points lookup */ - collection: string; - /** - * @description Options for specifying which payload to include (or not) - * @default true - */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); - /** - * @description Options for specifying which vectors to include (or not) - * @default null - */ - with_vectors?: components["schemas"]["WithVector"] | (Record | null); - }; - RecommendGroupsRequest: { - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - /** - * @description Look for vectors closest to those - * @default [] - */ - positive?: (components["schemas"]["RecommendExample"])[]; - /** - * @description Try to avoid vectors like this - * @default [] - */ - negative?: (components["schemas"]["RecommendExample"])[]; - /** - * @description How to use positive and negative examples to find the results - * @default null - */ - strategy?: components["schemas"]["RecommendStrategy"] | (Record | null); - /** @description Look only for points which satisfies this conditions */ - filter?: components["schemas"]["Filter"] | (Record | null); - /** @description Additional search params */ - params?: components["schemas"]["SearchParams"] | (Record | null); - /** @description Select which payload to return with the response. Default is false. */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); - /** - * @description Options for specifying which vectors to include into response. Default is false. - * @default null - */ - with_vector?: components["schemas"]["WithVector"] | (Record | null); - /** - * Format: float - * @description Define a minimal score threshold for the result. If defined, less similar results will not be returned. Score of the returned result might be higher or smaller than the threshold depending on the Distance function used. E.g. for cosine similarity only higher scores will be returned. - */ - score_threshold?: number | null; - /** - * @description Define which vector to use for recommendation, if not specified - try to use default vector - * @default null - */ - using?: components["schemas"]["UsingVector"] | (Record | null); - /** - * @description The location used to lookup vectors. If not specified - use current collection. Note: the other collection should have the same vector size as the current collection - * @default null - */ - lookup_from?: components["schemas"]["LookupLocation"] | (Record | null); - /** @description Payload field to group by, must be a string or number field. If the field contains more than 1 value, all values will be used for grouping. One point can be in multiple groups. */ - group_by: string; - /** - * Format: uint32 - * @description Maximum amount of points to return per group - */ - group_size: number; - /** - * Format: uint32 - * @description Maximum amount of groups to return - */ - limit: number; - /** @description Look for points in another collection using the group ids */ - with_lookup?: components["schemas"]["WithLookupInterface"] | (Record | null); - }; GroupsResult: { groups: (components["schemas"]["PointGroup"])[]; }; @@ -3542,62 +3459,6 @@ export interface components { api_key?: string | null; }; ShardSnapshotLocation: string; - /** @description Use context and a target to find the most similar points, constrained by the context. */ - DiscoverRequest: { - /** @description Specify in which shards to look for the points, if not specified - look in all shards */ - shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); - /** - * @description Look for vectors closest to this. - * - * When using the target (with or without context), the integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. - */ - target?: components["schemas"]["RecommendExample"] | (Record | null); - /** - * @description Pairs of { positive, negative } examples to constrain the search. - * - * When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. - * - * Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. - * - * For discovery search (when including a target), the context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - */ - context?: (components["schemas"]["ContextExamplePair"])[] | null; - /** @description Look only for points which satisfies this conditions */ - filter?: components["schemas"]["Filter"] | (Record | null); - /** @description Additional search params */ - params?: components["schemas"]["SearchParams"] | (Record | null); - /** - * Format: uint - * @description Max number of result to return - */ - limit: number; - /** - * Format: uint - * @description Offset of the first result to return. May be used to paginate results. Note: large offset values may cause performance issues. - */ - offset?: number | null; - /** @description Select which payload to return with the response. Default is false. */ - with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); - /** @description Options for specifying which vectors to include into response. Default is false. */ - with_vector?: components["schemas"]["WithVector"] | (Record | null); - /** - * @description Define which vector to use for recommendation, if not specified - try to use default vector - * @default null - */ - using?: components["schemas"]["UsingVector"] | (Record | null); - /** - * @description The location used to lookup vectors. If not specified - use current collection. Note: the other collection should have the same vector size as the current collection - * @default null - */ - lookup_from?: components["schemas"]["LookupLocation"] | (Record | null); - }; - ContextExamplePair: { - positive: components["schemas"]["RecommendExample"]; - negative: components["schemas"]["RecommendExample"]; - }; - DiscoverRequestBatch: { - searches: (components["schemas"]["DiscoverRequest"])[]; - }; VersionInfo: { title: string; version: string; @@ -3715,6 +3576,17 @@ export interface components { /** @description How to use the provided vectors to find the results */ strategy?: components["schemas"]["RecommendStrategy"] | (Record | null); }; + /** + * @description How to use positive and negative examples to find the results, default is `average_vector`: + * + * * `average_vector` - Average positive and negative vectors and create a single query with the formula `query = avg_pos + avg_pos - avg_neg`. Then performs normal search. + * + * * `best_score` - Uses custom search objective. Each candidate is compared against all examples, its score is then chosen from the `max(max_pos_score, max_neg_score)`. If the `max_neg_score` is chosen then it is squared and negated, otherwise it is just the `max_pos_score`. + * + * * `sum_scores` - Uses custom search objective. Compares against all inputs, sums all the scores. Scores against positive vectors are added, against negatives are subtracted. + * @enum {string} + */ + RecommendStrategy: "average_vector" | "best_score" | "sum_scores"; DiscoverQuery: { discover: components["schemas"]["DiscoverInput"]; }; @@ -3876,6 +3748,93 @@ export interface components { /** Format: float */ c: number; }; + /** @description Additional parameters of the search */ + SearchParams: { + /** + * Format: uint + * @description Params relevant to HNSW index Size of the beam in a beam-search. Larger the value - more accurate the result, more time required for search. + */ + hnsw_ef?: number | null; + /** + * @description Search without approximation. If set to true, search may run long but with exact results. + * @default false + */ + exact?: boolean; + /** @description Quantization params */ + quantization?: components["schemas"]["QuantizationSearchParams"] | (Record | null); + /** + * @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 + * @default false + */ + indexed_only?: boolean; + /** @description ACORN search params */ + acorn?: components["schemas"]["AcornSearchParams"] | (Record | null); + /** @description Which population sparse vector IDF statistics are computed over. By default (or with explicit `"global"`) statistics are collection-wide. Only applicable to sparse vectors with the IDF modifier enabled. */ + idf?: components["schemas"]["IdfParams"] | (Record | null); + }; + /** @description Additional parameters of the search */ + QuantizationSearchParams: { + /** + * @description If true, quantized vectors are ignored. Default is false. + * @default false + */ + ignore?: boolean; + /** @description If true, use original vectors to re-score top-k results. Might require more time in case if original vectors are stored on disk. If not set, qdrant decides automatically apply rescoring or not. */ + rescore?: boolean | null; + /** + * Format: double + * @description Oversampling factor for quantization. Default is 1.0. + * + * Defines how many extra vectors should be preselected using quantized index, and then re-scored using original vectors. + * + * For example, if `oversampling` is 2.4 and `limit` is 100, then 240 vectors will be preselected using quantized index, and then top-100 will be returned after re-scoring. + */ + oversampling?: number | null; + }; + /** @description ACORN-related search parameters */ + AcornSearchParams: { + /** + * @description If true, then ACORN may be used for the HNSW search based on filters selectivity. Improves search recall for searches with multiple low-selectivity payload filters, at cost of performance. + * @default false + */ + enable?: boolean; + /** + * Format: double + * @description Maximum selectivity of filters to enable ACORN. + * + * If estimated filters selectivity is higher than this value, ACORN will not be used. Selectivity is estimated as: `estimated number of points satisfying the filters / total number of points`. + * + * 0.0 for never, 1.0 for always. Default is 0.4. + */ + max_selectivity?: number | null; + }; + /** + * @description Population over which sparse vector IDF statistics are computed for scoring — the *IDF corpus*. + * + * - `"global"` — collection-wide statistics, same as omitting the parameter. - `{ "corpus": }` — document count and per-term document frequencies are computed over the points matching the corpus filter only. The corpus is independent of the retrieval filter and is usually broader than it. + */ + IdfParams: components["schemas"]["IdfScope"] | components["schemas"]["IdfCorpusParams"]; + /** + * @description Named IDF scope without a corpus filter. + * @enum {string} + */ + IdfScope: "global"; + /** @description IDF statistics computed over the points matching a corpus filter. */ + IdfCorpusParams: { + corpus: components["schemas"]["Filter"]; + }; + /** @description Defines a location to use for looking up the vector. Specifies collection and vector field name. */ + LookupLocation: { + /** @description Name of the collection used for lookup */ + collection: string; + /** + * @description Optional name of the vector field within the collection. If not provided, the default vector field will be used. + * @default null + */ + vector?: string | null; + /** @description Specify in which shards to look for the points, if not specified - look in all shards */ + shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); + }; QueryRequestBatch: { searches: (components["schemas"]["QueryRequest"])[]; }; @@ -3926,6 +3885,21 @@ export interface components { /** @description Look for points in another collection using the group ids */ with_lookup?: components["schemas"]["WithLookupInterface"] | (Record | null); }; + WithLookupInterface: string | components["schemas"]["WithLookup"]; + WithLookup: { + /** @description Name of the collection to use for points lookup */ + collection: string; + /** + * @description Options for specifying which payload to include (or not) + * @default true + */ + with_payload?: components["schemas"]["WithPayloadInterface"] | (Record | null); + /** + * @description Options for specifying which vectors to include (or not) + * @default null + */ + with_vectors?: components["schemas"]["WithVector"] | (Record | null); + }; SearchMatrixRequest: { /** @description Specify in which shards to look for the points, if not specified - look in all shards */ shard_key?: components["schemas"]["ShardKeySelector"] | (Record | null); @@ -4249,7 +4223,7 @@ export interface components { distance: components["schemas"]["Distance"]; /** @description Configuration for multi-vector points (e.g., ColBERT) */ multivector_config?: components["schemas"]["MultiVectorConfig"] | (Record | null); - /** @description Element storage type (Float32, Float16, Uint8) */ + /** @description Element storage type (Float32, Float16, Uint8, Turbo4) */ datatype?: components["schemas"]["VectorStorageDatatype"] | (Record | null); }; /** @description Wrapper for sparse vector creation config. */ @@ -4267,8 +4241,57 @@ export interface components { /** @description Datatype used to store weights in the index */ datatype?: components["schemas"]["VectorStorageDatatype"] | (Record | null); }; - }; - responses: never; + /** + * @description Quota configuration in effect, and how close each peer is to it. + * + * The configuration is cluster-wide; the utilization is not. `usage` is the node that served the request, and `peers` is what every peer that answered reports about itself — memory and disk are node-local, so one peer being under its limit says nothing about the others. + */ + QuotaStatus: { + config: components["schemas"]["QuotaConfig"]; + usage: components["schemas"]["QuotaUsage"]; + /** + * @description Utilization reported by each peer, keyed by peer ID, including the one that served the request. + * + * Only peers that answered are listed: a peer missing from the map could not be reached, which is itself worth seeing. Absent entirely outside distributed mode, where there are no peers to ask. + */ + peers?: ({ + [key: string]: components["schemas"]["PeerQuotaUsage"] | undefined; + }) | null; + }; + /** + * @description Utilization of the quota-managed resources **on this node alone** — memory and disk are node-local, so a peer under its limit says nothing about the rest of the cluster. + * + * A field is `null` when the platform does not expose the underlying stat. + */ + QuotaUsage: { + /** + * Format: uint8 + * @description Resident memory of this node's process, as a percentage of the memory available to it (cgroup limit if one applies, else total system memory). + */ + resident_memory_percent?: number | null; + /** + * Format: uint8 + * @description Used space of this node's storage filesystem, as a percentage of its capacity. + */ + disk_usage_percent?: number | null; + }; + /** @description What one peer reports about the quota it is enforcing. */ + PeerQuotaUsage: { + /** @description Whether this peer is at or over one of the enforced limits, and so is currently refusing updates. Always false while the quota is disabled. */ + exceeded: boolean; + /** + * Format: uint8 + * @description Resident memory of this node's process, as a percentage of the memory available to it (cgroup limit if one applies, else total system memory). + */ + resident_memory_percent?: number | null; + /** + * Format: uint8 + * @description Used space of this node's storage filesystem, as a percentage of its capacity. + */ + disk_usage_percent?: number | null; + }; + }; + responses: never; parameters: never; requestBodies: never; headers: never; @@ -4522,7 +4545,7 @@ export interface operations { }; /** * Kubernetes healthz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Liveness-style health check. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/livez`. Use it only to detect whether the process is up and responsive. */ healthz: { responses: { @@ -4538,7 +4561,7 @@ export interface operations { }; /** * Kubernetes livez endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes liveness probe. Returns 200 as soon as the HTTP API is serving requests. It does not inspect collections, shards or consensus state, and is identical to `/healthz`. A failure indicates the process is unresponsive and should be restarted. */ livez: { responses: { @@ -4554,16 +4577,22 @@ export interface operations { }; /** * Kubernetes readyz endpoint - * @description An endpoint for health checking used in Kubernetes. + * @description Kubernetes readiness probe. Checks the instance and waits out pending data operations to see when it can start accepting traffic. In a distributed deployment it returns 200 only once the node has caught up with the cluster consensus commit and its local shards are healthy; otherwise it returns 503. In a single-node deployment it always returns 200 once the API is up. Use it to decide when to route traffic to the instance. */ readyz: { responses: { - /** @description Healthz response */ + /** @description The instance is ready to accept traffic */ 200: { content: { "text/plain": string; }; }; + /** @description The instance is not ready to accept traffic yet */ + 503: { + content: { + "text/plain": string; + }; + }; /** @description error */ "4XX": never; }; @@ -4794,6 +4823,99 @@ export interface operations { }; }; }; + /** + * Get global quotas + * @description Get the cluster-wide resource quota configuration, together with the current utilization it is measured against. + * The configuration is the same on every peer, but the reported utilization is for the node serving this request only - + * memory and disk are node-local, so query each peer to see where the whole cluster stands. + */ + get_quotas: { + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": { + /** @default null */ + usage?: components["schemas"]["Usage"] | (Record | null); + /** + * Format: float + * @description Time spent to process this request + * @example 0.002 + */ + time?: number; + /** @example ok */ + status?: string; + result?: components["schemas"]["QuotaStatus"]; + }; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + /** @description error */ + "4XX": { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + }; + }; + /** + * Set global quotas + * @description Replace the cluster-wide resource quota configuration. The new configuration is propagated to every peer through consensus and persisted, so it survives restarts + */ + update_quotas: { + parameters: { + query?: { + /** + * @description If true, wait until the new configuration is confirmed by consensus on this peer. + * If false - the request returns as soon as the change is proposed. + */ + wait?: boolean; + }; + }; + /** @description Quota configuration to apply */ + requestBody?: { + content: { + "application/json": components["schemas"]["QuotaConfig"]; + }; + }; + responses: { + /** @description successful operation */ + 200: { + content: { + "application/json": { + /** @default null */ + usage?: components["schemas"]["Usage"] | (Record | null); + /** + * Format: float + * @description Time spent to process this request + * @example 0.002 + */ + time?: number; + /** @example ok */ + status?: string; + result?: boolean; + }; + }; + }; + /** @description error */ + default: { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + /** @description error */ + "4XX": { + content: { + "application/json": components["schemas"]["ErrorResponse"]; + }; + }; + }; + }; /** * List collections * @description Get list name of all existing collections @@ -7181,465 +7303,6 @@ export interface operations { }; }; }; - /** - * Search points - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions - */ - search_points: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Search request with optional filtering */ - requestBody?: { - content: { - "application/json": components["schemas"]["SearchRequest"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: (components["schemas"]["ScoredPoint"])[]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Search batch points - * @deprecated - * @description Retrieve by batch the closest points based on vector similarity and given filtering conditions - */ - search_batch_points: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Search batch request */ - requestBody?: { - content: { - "application/json": components["schemas"]["SearchRequestBatch"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: ((components["schemas"]["ScoredPoint"])[])[]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Search point groups - * @deprecated - * @description Retrieve closest points based on vector similarity and given filtering conditions, grouped by a given payload field - */ - search_point_groups: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Search request with optional filtering, grouped by a given payload field */ - requestBody?: { - content: { - "application/json": components["schemas"]["SearchGroupsRequest"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: components["schemas"]["GroupsResult"]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Recommend points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - recommend_points: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Request points based on positive and negative examples. */ - requestBody?: { - content: { - "application/json": components["schemas"]["RecommendRequest"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: (components["schemas"]["ScoredPoint"])[]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Recommend batch points - * @deprecated - * @description Look for the points which are closer to stored positive examples and at the same time further to negative examples. - */ - recommend_batch_points: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Request points based on positive and negative examples. */ - requestBody?: { - content: { - "application/json": components["schemas"]["RecommendRequestBatch"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: ((components["schemas"]["ScoredPoint"])[])[]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Recommend point groups - * @deprecated - * @description 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. - */ - recommend_point_groups: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Request points based on positive and negative examples, grouped by a payload field. */ - requestBody?: { - content: { - "application/json": components["schemas"]["RecommendGroupsRequest"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: components["schemas"]["GroupsResult"]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Discover points - * @deprecated - * @description Use context and a target to find the most similar points to the target, constrained by the context. - * When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. - * Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. - * When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - */ - discover_points: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Request points based on {positive, negative} pairs of examples, and/or a target */ - requestBody?: { - content: { - "application/json": components["schemas"]["DiscoverRequest"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: (components["schemas"]["ScoredPoint"])[]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; - /** - * Discover batch points - * @deprecated - * @description Look for points based on target and/or positive and negative example pairs, in batch. - */ - discover_batch_points: { - parameters: { - query?: { - /** @description Define read consistency guarantees for the operation */ - consistency?: components["schemas"]["ReadConsistency"]; - /** @description If set, overrides global timeout for this request. Unit is seconds. */ - timeout?: number; - }; - path: { - /** @description Name of the collection to search in */ - collection_name: string; - }; - }; - /** @description Batch request points based on { positive, negative } pairs of examples, and/or a target. */ - requestBody?: { - content: { - "application/json": components["schemas"]["DiscoverRequestBatch"]; - }; - }; - responses: { - /** @description successful operation */ - 200: { - content: { - "application/json": { - /** @default null */ - usage?: components["schemas"]["Usage"] | (Record | null); - /** - * Format: float - * @description Time spent to process this request - * @example 0.002 - */ - time?: number; - /** @example ok */ - status?: string; - result?: ((components["schemas"]["ScoredPoint"])[])[]; - }; - }; - }; - /** @description error */ - default: { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - /** @description error */ - "4XX": { - content: { - "application/json": components["schemas"]["ErrorResponse"]; - }; - }; - }; - }; /** * Count points * @description Count points which matches given filtering condition diff --git a/packages/js-client-rest/src/qdrant-client.ts b/packages/js-client-rest/src/qdrant-client.ts index b3b8b48..8b20c94 100644 --- a/packages/js-client-rest/src/qdrant-client.ts +++ b/packages/js-client-rest/src/qdrant-client.ts @@ -146,298 +146,6 @@ export class QdrantClient { return this._openApiClient; } - /** - * Search for points in multiple collections - * - * @param collectionName Name of the collection - * @param {object} args - - * - searches: List of search requests - * - consistency: Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * number - number of replicas to query, values should present in all queried replicas - * 'majority' - query all replicas, but return values present in the majority of replicas - * 'quorum' - query the majority of replicas, return values present in all of them - * 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * @returns List of search responses - */ - async searchBatch( - collection_name: string, - { - searches, - consistency, - timeout, - }: Pick & {consistency?: Schemas['ReadConsistency']} & { - timeout?: number; - }, - ): Promise { - const response = await this._openApiClient.searchBatchPoints({ - collection_name, - consistency, - timeout, - searches, - }); - return response.data.result ?? noResultError(); - } - - /** - * Search for closest vectors in collection taking into account filtering conditions - * - * @param collection_name Collection to search in - * @param {object} args - - * - shard_key: Specify in which shards to look for the points, if not specified - look in all shards - * - vector: - * Search for vectors closest to this. - * Can be either a vector itself, or a named vector, or a tuple of vector name and vector itself - * - filter: - * - Exclude vectors which doesn't fit given conditions. - * - If `None` - search among all vectors - * - params: Additional search params - * - limit: How many results return - * - offset: - * Offset of the first result to return. - * May be used to paginate results. - * Note: large offset values may cause performance issues. - * - with_payload: - * - Specify which stored payload should be attached to the result. - * - If `True` - attach all payload - * - If `False` - do not attach any payload - * - If List of string - include only specified fields - * - If `PayloadSelector` - use explicit rules - * - with_vector: - * - If `True` - Attach stored vector to the search result. - * - If `False` - Do not attach vector. - * - If List of string - include only specified fields - * - Default: `False` - * - score_threshold: - * Define a minimal score threshold for the result. - * If defined, less similar results will not be returned. - * Score of the returned result might be higher or smaller than the threshold depending - * on the Distance function used. - * E.g. for cosine similarity only higher scores will be returned. - * - consistency: - * Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * - int - number of replicas to query, values should present in all queried replicas - * - 'majority' - query all replicas, but return values present in the majority of replicas - * - 'quorum' - query the majority of replicas, return values present in all of them - * - 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * @example - * // Search with filter - * client.search( - * "test_collection", - * { - * vector: [1.0, 0.1, 0.2, 0.7], - * filter: { - * must: [ - * { - * key: 'color', - * range: { - * color: 'red' - * } - * } - * ] - * ) - * } - * ) - * @returns List of found close points with similarity scores. - */ - async search( - collection_name: string, - { - shard_key, - vector, - limit = 10, - offset = 0, - filter, - params, - with_payload = true, - with_vector = false, - score_threshold, - consistency, - timeout, - }: Partial> & - Omit & { - consistency?: Schemas['ReadConsistency']; - } & {timeout?: number}, - ): Promise { - const response = await this._openApiClient.searchPoints({ - collection_name, - consistency, - timeout, - shard_key, - vector, - limit, - offset, - filter, - params, - with_payload, - with_vector, - score_threshold, - }); - return response.data.result ?? noResultError(); - } - - /** - * Perform multiple recommend requests in batch mode - * @param collection_name Name of the collection - * @param {object} args - * - searches: List of recommend requests - * - consistency: - * Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * - number - number of replicas to query, values should present in all queried replicas - * - 'majority' - query all replicas, but return values present in the majority of replicas - * - 'quorum' - query the majority of replicas, return values present in all of them - * - 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * @returns List of recommend responses - */ - async recommendBatch( - collection_name: string, - { - searches, - consistency, - timeout, - }: Schemas['RecommendRequestBatch'] & {consistency?: Schemas['ReadConsistency']} & {timeout?: number}, - ): Promise { - const response = await this._openApiClient.recommendBatchPoints({ - collection_name, - searches, - consistency, - timeout, - }); - return response.data.result ?? []; - } - - /** - * @alias recommendBatch - */ - async recommend_batch( - collection_name: string, - { - searches, - consistency, - timeout, - }: Schemas['RecommendRequestBatch'] & {consistency?: Schemas['ReadConsistency']} & {timeout?: number}, - ): Promise { - const response = await this._openApiClient.recommendBatchPoints({ - collection_name, - searches, - consistency, - timeout, - }); - return response.data.result ?? []; - } - - /** - * Recommendation request. Provides positive and negative examples of the vectors, - * which can be ids of points that are already stored in the collection, raw vectors, or even ids and vectors combined. - * Service should look for the points which are closer to positive examples and at the same time further to negative examples. - * The concrete way of how to compare negative and positive distances is up to the `strategy` chosen. - * @param collection_name Collection to search in - * @param {object} args - * - shard_key: Specify in which shards to look for the points, if not specified - look in all shards - * - positive: - * List of stored point IDs, which should be used as reference for similarity search. - * If there is only one ID provided - this request is equivalent to the regular search with vector of that point. - * If there are more than one IDs, Qdrant will attempt to search for similar to all of them. - * Recommendation for multiple vectors is experimental. Its behaviour may change in the future. - * - negative: - * List of stored point IDs, which should be dissimilar to the search result. - * Negative examples is an experimental functionality. Its behaviour may change in the future. - * - strategy: - * How to use positive and negative examples to find the results. - * - query_filter: - * - Exclude vectors which doesn't fit given conditions. - * - If `None` - search among all vectors - * - search_params: Additional search params - * - limit: How many results return - * - Default: `10` - * - offset: - * Offset of the first result to return. - * May be used to paginate results. - * Note: large offset values may cause performance issues. - * - Default: `0` - * - with_payload: - * - Specify which stored payload should be attached to the result. - * - If `True` - attach all payload - * - If `False` - do not attach any payload - * - If List of string - include only specified fields - * - If `PayloadSelector` - use explicit rules - * - Default: `true` - * - with_vector: - * - If `True` - Attach stored vector to the search result. - * - If `False` - Do not attach vector. - * - If List of string - include only specified fields - * - Default: `false` - * - score_threshold: - * Define a minimal score threshold for the result. - * If defined, less similar results will not be returned. - * Score of the returned result might be higher or smaller than the threshold depending - * on the Distance function used. - * E.g. for cosine similarity only higher scores will be returned. - * - using: - * Name of the vectors to use for recommendations. - * If `None` - use default vectors. - * - lookupFrom: - * Defines a location (collection and vector field name), used to lookup vectors for recommendations. - * If `None` - use current collection will be used. - * - consistency: - * Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * - int - number of replicas to query, values should present in all queried replicas - * - 'majority' - query all replicas, but return values present in the majority of replicas - * - 'quorum' - query the majority of replicas, return values present in all of them - * - 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * @returns List of recommended points with similarity scores. - */ - async recommend( - collection_name: string, - { - shard_key, - positive, - negative, - strategy, - filter, - params, - limit = 10, - offset = 0, - with_payload = true, - with_vector = false, - score_threshold, - using, - lookup_from, - consistency, - timeout, - }: Omit & - Partial> & {consistency?: Schemas['ReadConsistency']} & { - timeout?: number; - }, - ): Promise { - const response = await this._openApiClient.recommendPoints({ - collection_name, - limit, - shard_key, - positive, - negative, - strategy, - filter, - params, - offset, - with_payload, - with_vector, - score_threshold, - using, - lookup_from, - consistency, - timeout, - }); - return response.data.result ?? noResultError(); - } - /** * Scroll over all (matching) points in the collection. * @param collection_name Name of the collection @@ -705,134 +413,6 @@ export class QdrantClient { return response.data.result ?? noResultError(); } - /** - * Search point groups - * @param collection_name - * @param {object} args - - * - consistency: Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * number - number of replicas to query, values should present in all queried replicas - * 'majority' - query all replicas, but return values present in the majority of replicas - * 'quorum' - query the majority of replicas, return values present in all of them - * 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * - shard_key: Specify in which shards to look for the points, if not specified - look in all shards - * - vector: query search vector - * - filter: Look only for points which satisfies this conditions - * - params: Additional search params - * - with_payload: Select which payload to return with the response - * - with_vector: Whether to return the point vector with the result? - * - score_threshold: Define a minimal score threshold for the result. If defined, less similar results will not be returned. Score of the returned result might be higher or smaller than the threshold depending on the Distance function used. E.g. for cosine similarity only higher scores will be returned. - * - group_by: Payload field to group by, must be a string or number field. If the field contains more than 1 value, all values will be used for grouping. One point can be in multiple groups. - * - group_size: Maximum amount of points to return per group - * - limit: Maximum amount of groups to return - * @returns Operation result - */ - async searchPointGroups( - collection_name: string, - { - consistency, - timeout, - shard_key, - vector, - filter, - params, - with_payload = null, - with_vector = null, - score_threshold, - group_by, - group_size, - limit, - }: {consistency?: Schemas['ReadConsistency']} & {timeout?: number} & Schemas['SearchGroupsRequest'], - ): Promise { - const response = await this._openApiClient.searchPointGroups({ - collection_name, - consistency, - timeout, - shard_key, - vector, - filter, - params, - with_payload, - with_vector, - score_threshold, - group_by, - group_size, - limit, - }); - return response.data.result ?? noResultError(); - } - - /** - * Recommend point groups - * @param collection_name - * @param {object} args - - * - consistency: Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * number - number of replicas to query, values should present in all queried replicas - * 'majority' - query all replicas, but return values present in the majority of replicas - * 'quorum' - query the majority of replicas, return values present in all of them - * 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * - shard_key: Specify in which shards to look for the points, if not specified - look in all shards - * - positive: Look for vectors closest to those - * - negative: Try to avoid vectors like this - * - strategy: How to use positive and negative examples to find the results - * - filter: Look only for points which satisfies this conditions - * - params: Additional search params - * - with_payload: Select which payload to return with the response - * - with_vector: Whether to return the point vector with the result? - * - score_threshold: Define a minimal score threshold for the result. If defined, less similar results will not be returned. Score of the returned result might be higher or smaller than the threshold depending on the Distance function used. E.g. for cosine similarity only higher scores will be returned. - * - using: Define which vector to use for recommendation, if not specified - try to use default vector - * - lookup_from: The location used to lookup vectors. If not specified - use current collection. Note: the other collection should have the same vector size as the current collection - * - group_by: Payload field to group by, must be a string or number field. If the field contains more than 1 value, all values will be used for grouping. One point can be in multiple groups. - * - group_size: Maximum amount of points to return per group - * - limit: Maximum amount of groups to return - * @returns Operation result - */ - async recommendPointGroups( - collection_name: string, - { - consistency, - timeout, - shard_key, - positive, - strategy, - negative = [], - filter, - params, - with_payload = null, - with_vector = null, - score_threshold, - using = null, - lookup_from = null, - group_by, - group_size, - limit, - }: {consistency?: Schemas['ReadConsistency']} & {timeout?: number} & Schemas['RecommendGroupsRequest'], - ): Promise { - const response = await this._openApiClient.recommendPointGroups({ - collection_name, - consistency, - timeout, - shard_key, - positive, - negative, - strategy, - filter, - params, - with_payload, - with_vector, - score_threshold, - using, - lookup_from, - group_by, - group_size, - limit, - }); - return response.data.result ?? noResultError(); - } - /** * Update or insert a new point into the collection. * @param collection_name @@ -1341,6 +921,8 @@ export class QdrantClient { write_consistency_factor, sparse_vectors, strict_mode_config, + payload, + metadata, }: {timeout?: number} & Schemas['CreateCollection'], ): Promise { const response = await this._openApiClient.createCollection({ @@ -1358,6 +940,8 @@ export class QdrantClient { write_consistency_factor, sparse_vectors, strict_mode_config, + payload, + metadata, }); return response.data.result ?? noResultError(); @@ -1417,6 +1001,8 @@ export class QdrantClient { write_consistency_factor, sparse_vectors, strict_mode_config, + payload, + metadata, }: {timeout?: number} & Schemas['CreateCollection'], ): Promise { const deleteResponse = await this._openApiClient.deleteCollection({ @@ -1443,6 +1029,8 @@ export class QdrantClient { write_consistency_factor, sparse_vectors, strict_mode_config, + payload, + metadata, }); return response.data.result ?? noResultError(); @@ -1790,101 +1378,6 @@ export class QdrantClient { return response.data.result ?? noResultError(); } - /** - * Discover points - * @description Use context and a target to find the most similar points to the target, constrained by the context. - * When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. - * Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. - * When using target (with or without context), the score behaves a little different: The integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. The context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - * @param collection_name Name of the collection - * @param {object} args - - * - consistency: Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * number - number of replicas to query, values should present in all queried replicas - * 'majority' - query all replicas, but return values present in the majority of replicas - * 'quorum' - query the majority of replicas, return values present in all of them - * 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * - shard_key: Specify in which shards to look for the points, if not specified - look in all shards - * - target: Look for vectors closest to this. When using the target (with or without context), the integer part of the score represents the rank with respect to the context, while the decimal part of the score relates to the distance to the target. - * - context: Pairs of { positive, negative } examples to constrain the search. When using only the context (without a target), a special search - called context search - is performed where pairs of points are used to generate a loss that guides the search towards the zone where most positive examples overlap. This means that the score minimizes the scenario of finding a point closer to a negative than to a positive part of a pair. Since the score of a context relates to loss, the maximum score a point can get is 0.0, and it becomes normal that many points can have a score of 0.0. For discovery search (when including a target), the context part of the score for each pair is calculated +1 if the point is closer to a positive than to a negative part of a pair, and -1 otherwise. - * - filter: Look only for points which satisfies this conditions - * - params: Additional search params - * - limit: Max number of result to return - * - offset: Offset of the first result to return. May be used to paginate results. Note: large offset values may cause performance issues. - * - with_payload: Select which payload to return with the response - * - with_vector: Whether to return the point vector with the result? - * - using: Define which vector to use for recommendation, if not specified - try to use default vector - * - lookup_from The location used to lookup vectors. If not specified - use current collection. Note: the other collection should have the same vector size as the current collection - * @returns Operation result - */ - async discoverPoints( - collection_name: string, - { - consistency, - timeout, - shard_key, - target, - context, - params, - limit, - offset, - with_payload, - with_vector, - using, - lookup_from, - }: {consistency?: Schemas['ReadConsistency']} & {timeout?: number} & Schemas['DiscoverRequest'], - ): Promise { - const response = await this._openApiClient.discoverPoints({ - collection_name, - consistency, - timeout, - shard_key, - target, - context, - params, - limit, - offset, - with_payload, - with_vector, - using, - lookup_from, - }); - return response.data.result ?? noResultError(); - } - - /** - * Discover batch points - * @description Look for points based on target and/or positive and negative example pairs, in batch. - * @param collection_name Name of the collection - * @param {object} args - - * - consistency: Read consistency of the search. Defines how many replicas should be queried before returning the result. - * Values: - * number - number of replicas to query, values should present in all queried replicas - * 'majority' - query all replicas, but return values present in the majority of replicas - * 'quorum' - query the majority of replicas, return values present in all of them - * 'all' - query all replicas, and return values present in all replicas - * - timeout: If set, overrides global timeout setting for this request. Unit is seconds. - * - searches: List of searches - * @returns Operation result - */ - async discoverBatchPoints( - collection_name: string, - { - consistency, - timeout, - searches, - }: {consistency?: Schemas['ReadConsistency']} & {timeout?: number} & Schemas['DiscoverRequestBatch'], - ): Promise { - const response = await this._openApiClient.discoverBatchPoints({ - collection_name, - consistency, - timeout, - searches, - }); - return response.data.result ?? noResultError(); - } - /** * Collect cluster telemetry data * @description Get telemetry data, from the point of view of the cluster. @@ -1922,6 +1415,37 @@ export class QdrantClient { return response.data.result ?? noResultError(); } + /** + * Get the cluster-wide quota configuration and how close each peer is to it + * @description The configuration is cluster-wide, the utilization is not: memory and disk are node-local, + * so one peer being under its limit says nothing about the others. `usage` describes the node that served + * the request, `peers` is what every peer that answered reports about itself. + * @returns Quota configuration in effect, and per-peer utilization + */ + async getQuotas(): Promise { + const response = await this._openApiClient.getQuotas({}); + return response.data.result ?? noResultError(); + } + + /** + * Set the cluster-wide limits on node resources + * @description An unset limit means the corresponding resource is not capped. Limits are only enforced + * while `enabled` is true. + * @param {object} args + * - enabled: Whether the limits are enforced + * - max_resident_memory_percent: Reject memory-consuming updates once process resident memory reaches + * this percentage of the memory available to it + * - max_disk_usage_percent: Reject disk-consuming updates once the storage filesystem is filled to + * this percentage of its capacity + * - release_margin_percent: How far below its limit a resource has to fall before updates resume + * - wait: Await for the configuration to be applied cluster-wide + * @returns Operation result + */ + async updateQuotas({wait, ...config}: {wait?: boolean} & Schemas['QuotaConfig'] = {}): Promise { + const response = await this._openApiClient.updateQuotas({wait, ...config}); + return response.data.result ?? noResultError(); + } + /** * Returns information about the running Qdrant instance * @description Returns information about the running Qdrant instance like version and commit id diff --git a/packages/js-client-rest/tests/integration/qdrant-client.test.ts b/packages/js-client-rest/tests/integration/qdrant-client.test.ts index edf686d..66e9dbc 100644 --- a/packages/js-client-rest/tests/integration/qdrant-client.test.ts +++ b/packages/js-client-rest/tests/integration/qdrant-client.test.ts @@ -8,6 +8,8 @@ describe('QdrantClient', () => { /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; const client = new QdrantClient(); const collectionName = 'test_collection'; + const paramsCollectionName = 'test_collection_params'; + const sparseCollectionName = 'test_collection_sparse'; const bigInt = BigInt(String(Number.MAX_SAFE_INTEGER + 2)) as unknown as number; const maxSafeInteger = Number.MAX_SAFE_INTEGER; const supportsJSONBigInt = semver.satisfies(process.versions.node, '>=21'); @@ -134,12 +136,12 @@ describe('QdrantClient', () => { }); }); - test('search points', async () => { - const result = await client.search(collectionName, { - vector: [0.2, 0.1, 0.9, 0.7], + test('query points without a filter', async () => { + const result = await client.query(collectionName, { + query: {nearest: [0.2, 0.1, 0.9, 0.7]}, limit: 3, }); - expect(result).toHaveLength(3); + expect(result.points).toHaveLength(3); }); test('upsert with timeout', async () => { @@ -163,34 +165,16 @@ describe('QdrantClient', () => { expect(result).toMatchObject({operation_id: expect.any(Number) as number, status: 'completed'}); }); - test('search points filter', async () => { - const result = await client.search(collectionName, { - filter: { - should: [ - { - key: 'city', - match: { - value: 'London', - }, - }, - ], - }, - vector: [0.2, 0.1, 0.9, 0.7], - limit: 3, - }); - expect(result).toHaveLength(2); - }); - - test('search points batch', async () => { - const result = await client.searchBatch(collectionName, { + test('query points batch', async () => { + const result = await client.queryBatch(collectionName, { searches: [ { - vector: [0.2, 0.1, 0.9, 0.7], + query: {nearest: [0.2, 0.1, 0.9, 0.7]}, limit: 3, with_payload: true, }, { - vector: [0.2, 0.1, 0.9, 0.7], + query: {nearest: [0.2, 0.1, 0.9, 0.7]}, limit: 3, with_payload: true, }, @@ -316,4 +300,128 @@ describe('QdrantClient', () => { console.log(result); expect(result[0].points).toHaveLength(2); }); + + test('create collection with memory placement and payload storage params', async () => { + await client.deleteCollection(paramsCollectionName); + expect( + await client.createCollection(paramsCollectionName, { + vectors: {size: 4, distance: 'Dot', memory: 'cached'}, + hnsw_config: {memory: 'cold'}, + payload: {memory: 'cold'}, + metadata: {owner: 'integration-test'}, + strict_mode_config: {enabled: false, max_resident_memory_percent: 95}, + }), + ).toBe(true); + + const {config} = await client.getCollection(paramsCollectionName); + expect(config.params.payload).toMatchObject({memory: 'cold'}); + expect(config.metadata).toMatchObject({owner: 'integration-test'}); + }); + + test('keyword index with prefix matching', async () => { + const result = await client.createPayloadIndex(paramsCollectionName, { + field_name: 'city', + field_schema: {type: 'keyword', prefix: true}, + wait: true, + }); + expect(result.status).toBe('completed'); + + await client.upsert(paramsCollectionName, { + wait: true, + points: [ + {id: 1, vector: [0.05, 0.61, 0.76, 0.74], payload: {city: 'Berlin'}}, + {id: 2, vector: [0.19, 0.81, 0.75, 0.11], payload: {city: 'Bergamo'}}, + {id: 3, vector: [0.36, 0.55, 0.47, 0.94], payload: {city: 'Moscow'}}, + {id: 4, vector: [0.18, 0.01, 0.85, 0.8], payload: {city: 'London'}}, + ], + }); + + const {points} = await client.scroll(paramsCollectionName, { + filter: {must: [{key: 'city', match: {prefix: 'Ber'}}]}, + limit: 10, + }); + expect(points.map((point) => point.payload?.city).sort()).toEqual(['Bergamo', 'Berlin']); + }); + + test('slice condition splits the id space', async () => { + const slices = await Promise.all( + [0, 1].map((index) => + client.scroll(paramsCollectionName, {filter: {must: [{slice: {total: 2, index}}]}, limit: 10}), + ), + ); + const ids = slices.flatMap(({points}) => points.map((point) => point.id)); + + // Slices are disjoint and together cover every point. + expect(new Set(ids).size).toBe(ids.length); + expect(ids.sort()).toEqual([1, 2, 3, 4]); + }); + + test('text index with stemming explicitly disabled', async () => { + const result = await client.createPayloadIndex(paramsCollectionName, { + field_name: 'description', + field_schema: {type: 'text', stemmer: {type: 'none'}}, + wait: true, + }); + expect(result.status).toBe('completed'); + }); + + test('per-request IDF corpus', async () => { + await client.deleteCollection(sparseCollectionName); + await client.createCollection(sparseCollectionName, { + vectors: {}, + sparse_vectors: {text: {modifier: 'idf'}}, + }); + await client.upsert(sparseCollectionName, { + wait: true, + points: [ + {id: 1, vector: {text: {indices: [1, 3], values: [1.0, 0.5]}}, payload: {city: 'Berlin'}}, + {id: 2, vector: {text: {indices: [1, 5], values: [0.7, 0.9]}}, payload: {city: 'Moscow'}}, + ], + }); + + const query = {indices: [1, 3], values: [1.0, 1.0]}; + const global = await client.query(sparseCollectionName, {query, using: 'text', params: {idf: 'global'}}); + const scoped = await client.query(sparseCollectionName, { + query, + using: 'text', + params: {idf: {corpus: {must: [{key: 'city', match: {value: 'Berlin'}}]}}}, + }); + + expect(global.points).toHaveLength(2); + expect(scoped.points).toHaveLength(2); + // Narrowing the corpus changes the document frequencies, and with them the scores. + expect(scoped.points[0].score).not.toBe(global.points[0].score); + }); + + test('cluster-wide quotas', async () => { + const before = await client.getQuotas(); + expect(before.config).toBeDefined(); + expect(before.usage).toBeDefined(); + + expect( + await client.updateQuotas({ + enabled: true, + max_resident_memory_percent: 95, + max_disk_usage_percent: 95, + release_margin_percent: 5, + wait: true, + }), + ).toBe(true); + + const after = await client.getQuotas(); + expect(after.config).toMatchObject({ + enabled: true, + max_resident_memory_percent: 95, + max_disk_usage_percent: 95, + release_margin_percent: 5, + }); + + // Put it back so the rest of the suite is not run against an enforcing node. + expect(await client.updateQuotas({enabled: false, wait: true})).toBe(true); + }); + + test('cleanup', async () => { + expect(await client.deleteCollection(paramsCollectionName)).toBe(true); + expect(await client.deleteCollection(sparseCollectionName)).toBe(true); + }); }); diff --git a/packages/qdrant-js/CHANGELOG.md b/packages/qdrant-js/CHANGELOG.md index 52ee7c0..73d1952 100644 --- a/packages/qdrant-js/CHANGELOG.md +++ b/packages/qdrant-js/CHANGELOG.md @@ -1,5 +1,20 @@ # @qdrant/qdrant-js +## v1.19.0 + +### Breaking Changes + +- The REST client dropped `search`, `searchBatch`, `searchPointGroups`, `recommend`, `recommendBatch`, `recommend_batch`, `recommendPointGroups`, + `discoverPoints` and `discoverBatchPoints`. Use `query`, `queryBatch` and `queryGroups` instead — see the `@qdrant/js-client-rest` changelog for + the full mapping. The gRPC client still exposes the corresponding RPCs, deprecated but functional. + +### Minor Changes + +- Qdrant v1.19.0 API +- Updated dependencies + - @qdrant/js-client-grpc@1.19.0 + - @qdrant/js-client-rest@1.19.0 + ## v1.18.0 ### Minor Changes diff --git a/packages/qdrant-js/package.json b/packages/qdrant-js/package.json index 5f5ebb6..9b855a2 100644 --- a/packages/qdrant-js/package.json +++ b/packages/qdrant-js/package.json @@ -1,6 +1,6 @@ { "name": "@qdrant/qdrant-js", - "version": "1.18.0", + "version": "1.19.0", "engines": { "node": ">=22.0.0" }, @@ -59,8 +59,8 @@ "clean": "rimraf ./dist" }, "dependencies": { - "@qdrant/js-client-rest": "workspace:1.18.0", - "@qdrant/js-client-grpc": "workspace:1.18.0" + "@qdrant/js-client-rest": "workspace:1.19.0", + "@qdrant/js-client-grpc": "workspace:1.19.0" }, "peerDependencies": { "typescript": ">=4.1" diff --git a/packages/qdrant-js/scripts/integration-tests.sh b/packages/qdrant-js/scripts/integration-tests.sh index 6f1ad85..12d27d4 100755 --- a/packages/qdrant-js/scripts/integration-tests.sh +++ b/packages/qdrant-js/scripts/integration-tests.sh @@ -9,7 +9,7 @@ function stop_docker() docker stop qdrant_test } -QDRANT_LATEST="v1.18.0" +QDRANT_LATEST="v1.19.0" QDRANT_VERSION=${QDRANT_VERSION:-"$QDRANT_LATEST"} QDRANT_HOST='127.0.0.1:6333' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7486a86..d30b39e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@eslint/js': specifier: 10.0.1 - version: 10.0.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 10.0.1(eslint@10.6.0(jiti@2.7.0)) '@rollup/plugin-node-resolve': specifier: ^16.0.3 version: 16.0.3(rollup@4.62.2) @@ -22,7 +22,7 @@ importers: version: 24.13.2 eslint: specifier: ^10.6.0 - version: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + version: 10.6.0(jiti@2.7.0) husky: specifier: ^9.1.7 version: 9.1.7 @@ -52,7 +52,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.62.1 - version: 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3) + version: 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) packages/js-client-grpc: dependencies: @@ -71,7 +71,7 @@ importers: version: 1.71.0 '@bufbuild/protoc-gen-es': specifier: ^2.12.1 - version: 2.12.1(@bufbuild/protobuf@2.12.1)(supports-color@10.2.2) + version: 2.12.1(@bufbuild/protobuf@2.12.1) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -101,8 +101,8 @@ importers: specifier: 7.7.1 version: 7.7.1 openapi-typescript: - specifier: ^7.13.0 - version: 7.13.0(typescript@5.9.3) + specifier: ^6.2.6 + version: 6.2.6 semver: specifier: 7.8.5 version: 7.8.5 @@ -119,10 +119,10 @@ importers: packages/qdrant-js: dependencies: '@qdrant/js-client-grpc': - specifier: workspace:1.18.0 + specifier: workspace:1.19.0 version: link:../js-client-grpc '@qdrant/js-client-rest': - specifier: workspace:1.18.0 + specifier: workspace:1.19.0 version: link:../js-client-rest devDependencies: typescript: @@ -131,14 +131,6 @@ importers: packages: - '@babel/code-frame@7.29.7': - resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - '@bufbuild/buf-darwin-arm64@1.71.0': resolution: {integrity: sha512-qZ7xZQyen/jOKFPVs3dlN9pMA56PI4YEo3r4/9ixtiH9gyFgfowR31axsocUgXGThjiN8mvOA8WfpG2tvaSvsw==} engines: {node: '>=12'} @@ -428,6 +420,10 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -473,6 +469,18 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@oxc-parser/binding-android-arm-eabi@0.137.0': resolution: {integrity: sha512-KDs+0VPdEmasOkpuJHW9V5WCF+cvYdMQv2Jd+aJXt+cxIx12NToRQRbXaRwUEDsZw+/jMk81Ve8ZFbjUkJTOwA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -713,16 +721,6 @@ packages: resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} engines: {node: '>=18.0.0', pnpm: '>=8'} - '@redocly/ajv@8.11.2': - resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} - - '@redocly/config@0.22.0': - resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==} - - '@redocly/openapi-core@1.34.16': - resolution: {integrity: sha512-zIgmQTT2TV/U/SJ3N4jlIw36erH6X8ga1UNIoyrlbr0yLEbsiII/16LZ0kMxWu2A8pw0xd56rwTz5sMudy2OAw==} - engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@rolldown/binding-android-arm64@1.1.5': resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1156,10 +1154,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} @@ -1189,20 +1183,18 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - brace-expansion@2.1.1: - resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} - brace-expansion@5.0.7: resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -1210,9 +1202,6 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} - ci-info@4.4.0: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} @@ -1225,9 +1214,6 @@ packages: resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} - colorette@1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1349,12 +1335,19 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fd-package-json@2.0.0: resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} @@ -1371,6 +1364,10 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1402,6 +1399,10 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -1414,10 +1415,6 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -1435,10 +1432,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - index-to-position@1.2.0: - resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} - engines: {node: '>=18'} - is-ci@4.1.0: resolution: {integrity: sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==} hasBin: true @@ -1462,6 +1455,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -1472,13 +1469,6 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - js-levenshtein@1.1.6: - resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} - engines: {node: '>=0.10.0'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.2.0: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true @@ -1489,9 +1479,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1608,6 +1595,14 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -1616,10 +1611,6 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimatch@5.1.9: - resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} - engines: {node: '>=10'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -1643,11 +1634,9 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - openapi-typescript@7.13.0: - resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==} + openapi-typescript@6.2.6: + resolution: {integrity: sha512-UKLdIwn5Yo0NXx+33H4trIihn/cZAYZo5U+PYD4uYWvBD+mRsEBbXz3gUbeNdgP4Uyv9X6Z8FMx7C08PQI3lcw==} hasBin: true - peerDependencies: - typescript: ^5.x optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -1671,10 +1660,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1696,6 +1681,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -1704,10 +1693,6 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - postcss@8.5.16: resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} @@ -1725,9 +1710,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -1741,6 +1725,10 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -1759,6 +1747,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} @@ -1836,9 +1827,9 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - supports-color@10.2.2: - resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} - engines: {node: '>=18'} + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -1864,6 +1855,10 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -1896,10 +1891,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - typescript-eslint@8.62.1: resolution: {integrity: sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1924,13 +1915,14 @@ packages: undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + undici@7.29.0: resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} - uri-js-replace@1.0.1: - resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2047,9 +2039,6 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} - yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -2072,14 +2061,6 @@ packages: snapshots: - '@babel/code-frame@7.29.7': - dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.29.7': {} - '@bufbuild/buf-darwin-arm64@1.71.0': optional: true @@ -2113,18 +2094,18 @@ snapshots: '@bufbuild/protobuf@2.12.1': {} - '@bufbuild/protoc-gen-es@2.12.1(@bufbuild/protobuf@2.12.1)(supports-color@10.2.2)': + '@bufbuild/protoc-gen-es@2.12.1(@bufbuild/protobuf@2.12.1)': dependencies: - '@bufbuild/protoplugin': 2.12.1(supports-color@10.2.2) + '@bufbuild/protoplugin': 2.12.1 optionalDependencies: '@bufbuild/protobuf': 2.12.1 transitivePeerDependencies: - supports-color - '@bufbuild/protoplugin@2.12.1(supports-color@10.2.2)': + '@bufbuild/protoplugin@2.12.1': dependencies: '@bufbuild/protobuf': 2.12.1 - '@typescript/vfs': 1.6.4(supports-color@10.2.2)(typescript@5.4.5) + '@typescript/vfs': 1.6.4(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -2247,17 +2228,17 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0(jiti@2.7.0))': dependencies: - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.6.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5(supports-color@10.2.2)': + '@eslint/config-array@0.23.5': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3(supports-color@10.2.2) + debug: 4.4.3 minimatch: 10.2.5 transitivePeerDependencies: - supports-color @@ -2270,9 +2251,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))': + '@eslint/js@10.0.1(eslint@10.6.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.6.0(jiti@2.7.0) '@eslint/object-schema@3.0.5': {} @@ -2281,6 +2262,8 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 + '@fastify/busboy@2.1.1': {} + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -2335,6 +2318,18 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + '@oxc-parser/binding-android-arm-eabi@0.137.0': optional: true @@ -2466,29 +2461,6 @@ snapshots: '@qdrant/openapi-typescript-fetch@1.2.6': {} - '@redocly/ajv@8.11.2': - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js-replace: 1.0.1 - - '@redocly/config@0.22.0': {} - - '@redocly/openapi-core@1.34.16(supports-color@10.2.2)': - dependencies: - '@redocly/ajv': 8.11.2 - '@redocly/config': 0.22.0 - colorette: 1.4.0 - https-proxy-agent: 7.0.6(supports-color@10.2.2) - js-levenshtein: 1.1.6 - js-yaml: 4.2.0 - minimatch: 5.1.9 - pluralize: 8.0.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - supports-color - '@rolldown/binding-android-arm64@1.1.5': optional: true @@ -2698,15 +2670,15 @@ snapshots: '@types/semver@7.7.1': {} - '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.62.1 - '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.62.1 - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.6.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2714,14 +2686,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3)': + '@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/types': 8.62.1 '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.62.1 - debug: 4.4.3(supports-color@10.2.2) - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + debug: 4.4.3 + eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2730,7 +2702,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@5.9.3) '@typescript-eslint/types': 8.62.1 - debug: 4.4.3(supports-color@10.2.2) + debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2744,13 +2716,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.62.1 '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(typescript@5.9.3) - debug: 4.4.3(supports-color@10.2.2) - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.6.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -2764,7 +2736,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.62.1(typescript@5.9.3) '@typescript-eslint/types': 8.62.1 '@typescript-eslint/visitor-keys': 8.62.1 - debug: 4.4.3(supports-color@10.2.2) + debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 tinyglobby: 0.2.17 @@ -2773,13 +2745,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(typescript@5.9.3)': + '@typescript-eslint/utils@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.62.1 '@typescript-eslint/types': 8.62.1 '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2789,9 +2761,9 @@ snapshots: '@typescript-eslint/types': 8.62.1 eslint-visitor-keys: 5.0.1 - '@typescript/vfs@1.6.4(supports-color@10.2.2)(typescript@5.4.5)': + '@typescript/vfs@1.6.4(typescript@5.4.5)': dependencies: - debug: 4.4.3(supports-color@10.2.2) + debug: 4.4.3 typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -2847,8 +2819,6 @@ snapshots: acorn@8.17.0: {} - agent-base@7.1.4: {} - ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 @@ -2872,24 +2842,20 @@ snapshots: assertion-error@2.0.1: {} - balanced-match@1.0.2: {} - balanced-match@4.0.4: {} - brace-expansion@2.1.1: - dependencies: - balanced-match: 1.0.2 - brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + buffer-from@1.1.2: {} chai@6.2.2: {} - change-case@5.4.4: {} - ci-info@4.4.0: {} cli-cursor@5.0.0: @@ -2901,8 +2867,6 @@ snapshots: slice-ansi: 8.0.0 string-width: 8.2.1 - colorette@1.4.0: {} - commander@2.20.3: {} commondir@1.0.1: {} @@ -2917,11 +2881,9 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debug@4.4.3(supports-color@10.2.2): + debug@4.4.3: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 10.2.2 deep-is@0.1.4: {} @@ -2981,11 +2943,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2): + eslint@10.6.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5(supports-color@10.2.2) + '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -2995,7 +2957,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@10.2.2) + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -3048,10 +3010,22 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + fd-package-json@2.0.0: dependencies: walk-up-path: 4.0.0 @@ -3064,6 +3038,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -3091,6 +3069,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -3105,13 +3087,6 @@ snapshots: dependencies: function-bind: 1.1.2 - https-proxy-agent@7.0.6(supports-color@10.2.2): - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - husky@9.1.7: {} ignore@5.3.2: {} @@ -3120,8 +3095,6 @@ snapshots: imurmurhash@0.1.4: {} - index-to-position@1.2.0: {} - is-ci@4.1.0: dependencies: ci-info: 4.4.0 @@ -3142,6 +3115,8 @@ snapshots: is-module@1.0.0: {} + is-number@7.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.9 @@ -3150,10 +3125,6 @@ snapshots: jiti@2.7.0: {} - js-levenshtein@1.1.6: {} - - js-tokens@4.0.0: {} - js-yaml@4.2.0: dependencies: argparse: 2.0.1 @@ -3162,8 +3133,6 @@ snapshots: json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} keyv@4.5.4: @@ -3277,16 +3246,19 @@ snapshots: make-error@1.3.6: {} + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + mimic-function@5.0.1: {} minimatch@10.2.5: dependencies: brace-expansion: 5.0.7 - minimatch@5.1.9: - dependencies: - brace-expansion: 2.1.1 - minipass@7.1.3: {} ms@2.1.3: {} @@ -3301,14 +3273,13 @@ snapshots: dependencies: mimic-function: 5.0.1 - openapi-typescript@7.13.0(typescript@5.9.3): + openapi-typescript@6.2.6: dependencies: - '@redocly/openapi-core': 1.34.16(supports-color@10.2.2) ansi-colors: 4.1.3 - change-case: 5.4.4 - parse-json: 8.3.0 - supports-color: 10.2.2 - typescript: 5.9.3 + fast-glob: 3.3.3 + js-yaml: 4.2.0 + supports-color: 9.4.0 + undici: 5.29.0 yargs-parser: 21.1.1 optionator@0.9.4: @@ -3377,12 +3348,6 @@ snapshots: package-json-from-dist@1.0.1: {} - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.29.7 - index-to-position: 1.2.0 - type-fest: 4.41.0 - path-exists@4.0.0: {} path-key@3.1.1: {} @@ -3398,12 +3363,12 @@ snapshots: picocolors@1.1.1: {} + picomatch@2.3.2: {} + picomatch@4.0.4: {} picomatch@4.0.5: {} - pluralize@8.0.0: {} - postcss@8.5.16: dependencies: nanoid: 3.3.15 @@ -3416,7 +3381,7 @@ snapshots: punycode@2.3.1: {} - require-from-string@2.0.2: {} + queue-microtask@1.2.3: {} resolve-pkg-maps@1.0.0: {} @@ -3432,6 +3397,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + reusify@1.1.0: {} + rfdc@1.4.1: {} rimraf@6.1.3: @@ -3491,6 +3458,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + semver@7.8.5: {} serialize-javascript@7.0.7: {} @@ -3551,7 +3522,7 @@ snapshots: strip-json-comments@5.0.3: {} - supports-color@10.2.2: {} + supports-color@9.4.0: {} supports-preserve-symlinks-flag@1.0.0: {} @@ -3573,6 +3544,10 @@ snapshots: tinyrainbow@3.1.0: {} + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -3608,15 +3583,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@4.41.0: {} - - typescript-eslint@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3): + typescript-eslint@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3) - '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.62.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@10.2.2))(typescript@5.9.3) - eslint: 10.6.0(jiti@2.7.0)(supports-color@10.2.2) + '@typescript-eslint/utils': 8.62.1(eslint@10.6.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.6.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3629,9 +3602,11 @@ snapshots: undici-types@7.18.2: {} - undici@7.29.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 - uri-js-replace@1.0.1: {} + undici@7.29.0: {} uri-js@4.4.1: dependencies: @@ -3707,8 +3682,6 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - yaml-ast-parser@0.0.43: {} - yaml@2.9.0: {} yargs-parser@21.1.1: {}