Skip to main content

qdrant_client/
qdrant.rs

1// This file is @generated by prost-build.
2/// `Struct` represents a structured data value, consisting of fields
3/// which map to dynamically typed values. In some languages, `Struct`
4/// might be supported by a native representation. For example, in
5/// scripting languages like JS a struct is represented as an
6/// object. The details of that representation are described together
7/// with the proto support for the language.
8///
9/// The JSON representation for `Struct` is a JSON object.
10#[derive(Clone, PartialEq, ::prost::Message)]
11pub struct Struct {
12    /// Unordered map of dynamically typed values.
13    #[prost(map = "string, message", tag = "1")]
14    pub fields: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
15}
16/// `Value` represents a dynamically typed value which can be either
17/// null, a number, a string, a boolean, a recursive struct value, or a
18/// list of values. A producer of value is expected to set one of those
19/// variants, absence of any variant indicates an error.
20///
21/// The JSON representation for `Value` is a JSON value.
22#[derive(Clone, PartialEq, ::prost::Message)]
23pub struct Value {
24    /// The kind of value.
25    #[prost(oneof = "value::Kind", tags = "1, 2, 3, 4, 5, 6, 7")]
26    pub kind: ::core::option::Option<value::Kind>,
27}
28/// Nested message and enum types in `Value`.
29pub mod value {
30    /// The kind of value.
31    #[derive(Clone, PartialEq, ::prost::Oneof)]
32    pub enum Kind {
33        /// Represents a null value.
34        #[prost(enumeration = "super::NullValue", tag = "1")]
35        NullValue(i32),
36        /// Represents a double value.
37        #[prost(double, tag = "2")]
38        DoubleValue(f64),
39        /// Represents an integer value
40        #[prost(int64, tag = "3")]
41        IntegerValue(i64),
42        /// Represents a string value.
43        #[prost(string, tag = "4")]
44        StringValue(::prost::alloc::string::String),
45        /// Represents a boolean value.
46        #[prost(bool, tag = "5")]
47        BoolValue(bool),
48        /// Represents a structured value.
49        #[prost(message, tag = "6")]
50        StructValue(super::Struct),
51        /// Represents a repeated `Value`.
52        #[prost(message, tag = "7")]
53        ListValue(super::ListValue),
54    }
55}
56/// `ListValue` is a wrapper around a repeated field of values.
57///
58/// The JSON representation for `ListValue` is a JSON array.
59#[derive(Clone, PartialEq, ::prost::Message)]
60pub struct ListValue {
61    /// Repeated field of dynamically typed values.
62    #[prost(message, repeated, tag = "1")]
63    pub values: ::prost::alloc::vec::Vec<Value>,
64}
65/// `NullValue` is a singleton enumeration to represent the null value for the
66/// `Value` type union.
67///
68///   The JSON representation for `NullValue` is JSON `null`.
69#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
70#[repr(i32)]
71pub enum NullValue {
72    /// Null value.
73    NullValue = 0,
74}
75impl NullValue {
76    /// String value of the enum field names used in the ProtoBuf definition.
77    ///
78    /// The values are not transformed in any way and thus are considered stable
79    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
80    pub fn as_str_name(&self) -> &'static str {
81        match self {
82            Self::NullValue => "NULL_VALUE",
83        }
84    }
85    /// Creates an enum from field names used in the ProtoBuf definition.
86    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
87        match value {
88            "NULL_VALUE" => Some(Self::NullValue),
89            _ => None,
90        }
91    }
92}
93#[derive(Clone, PartialEq, ::prost::Message)]
94pub struct PointId {
95    #[prost(oneof = "point_id::PointIdOptions", tags = "1, 2")]
96    pub point_id_options: ::core::option::Option<point_id::PointIdOptions>,
97}
98/// Nested message and enum types in `PointId`.
99pub mod point_id {
100    #[derive(Clone, PartialEq, ::prost::Oneof)]
101    pub enum PointIdOptions {
102        /// Numerical ID of the point
103        #[prost(uint64, tag = "1")]
104        Num(u64),
105        /// UUID
106        #[prost(string, tag = "2")]
107        Uuid(::prost::alloc::string::String),
108    }
109}
110#[derive(Clone, Copy, PartialEq, ::prost::Message)]
111pub struct GeoPoint {
112    #[prost(double, tag = "1")]
113    pub lon: f64,
114    #[prost(double, tag = "2")]
115    pub lat: f64,
116}
117#[derive(Clone, PartialEq, ::prost::Message)]
118pub struct Filter {
119    /// At least one of those conditions should match
120    #[prost(message, repeated, tag = "1")]
121    pub should: ::prost::alloc::vec::Vec<Condition>,
122    /// All conditions must match
123    #[prost(message, repeated, tag = "2")]
124    pub must: ::prost::alloc::vec::Vec<Condition>,
125    /// All conditions must NOT match
126    #[prost(message, repeated, tag = "3")]
127    pub must_not: ::prost::alloc::vec::Vec<Condition>,
128    /// At least minimum amount of given conditions should match
129    #[prost(message, optional, tag = "4")]
130    pub min_should: ::core::option::Option<MinShould>,
131}
132#[derive(Clone, PartialEq, ::prost::Message)]
133pub struct MinShould {
134    #[prost(message, repeated, tag = "1")]
135    pub conditions: ::prost::alloc::vec::Vec<Condition>,
136    #[prost(uint64, tag = "2")]
137    pub min_count: u64,
138}
139#[derive(Clone, PartialEq, ::prost::Message)]
140pub struct Condition {
141    #[prost(oneof = "condition::ConditionOneOf", tags = "1, 2, 3, 4, 5, 6, 7")]
142    pub condition_one_of: ::core::option::Option<condition::ConditionOneOf>,
143}
144/// Nested message and enum types in `Condition`.
145pub mod condition {
146    #[derive(Clone, PartialEq, ::prost::Oneof)]
147    pub enum ConditionOneOf {
148        #[prost(message, tag = "1")]
149        Field(super::FieldCondition),
150        #[prost(message, tag = "2")]
151        IsEmpty(super::IsEmptyCondition),
152        #[prost(message, tag = "3")]
153        HasId(super::HasIdCondition),
154        #[prost(message, tag = "4")]
155        Filter(super::Filter),
156        #[prost(message, tag = "5")]
157        IsNull(super::IsNullCondition),
158        #[prost(message, tag = "6")]
159        Nested(super::NestedCondition),
160        #[prost(message, tag = "7")]
161        HasVector(super::HasVectorCondition),
162    }
163}
164#[derive(Clone, PartialEq, ::prost::Message)]
165pub struct IsEmptyCondition {
166    #[prost(string, tag = "1")]
167    pub key: ::prost::alloc::string::String,
168}
169#[derive(Clone, PartialEq, ::prost::Message)]
170pub struct IsNullCondition {
171    #[prost(string, tag = "1")]
172    pub key: ::prost::alloc::string::String,
173}
174#[derive(Clone, PartialEq, ::prost::Message)]
175pub struct HasIdCondition {
176    #[prost(message, repeated, tag = "1")]
177    pub has_id: ::prost::alloc::vec::Vec<PointId>,
178}
179#[derive(Clone, PartialEq, ::prost::Message)]
180pub struct HasVectorCondition {
181    #[prost(string, tag = "1")]
182    pub has_vector: ::prost::alloc::string::String,
183}
184#[derive(Clone, PartialEq, ::prost::Message)]
185pub struct NestedCondition {
186    /// Path to nested object
187    #[prost(string, tag = "1")]
188    pub key: ::prost::alloc::string::String,
189    /// Filter condition
190    #[prost(message, optional, tag = "2")]
191    pub filter: ::core::option::Option<Filter>,
192}
193#[derive(Clone, PartialEq, ::prost::Message)]
194pub struct FieldCondition {
195    #[prost(string, tag = "1")]
196    pub key: ::prost::alloc::string::String,
197    /// Check if point has field with a given value
198    #[prost(message, optional, tag = "2")]
199    pub r#match: ::core::option::Option<Match>,
200    /// Check if points value lies in a given range
201    #[prost(message, optional, tag = "3")]
202    pub range: ::core::option::Option<Range>,
203    /// Check if points geolocation lies in a given area
204    #[prost(message, optional, tag = "4")]
205    pub geo_bounding_box: ::core::option::Option<GeoBoundingBox>,
206    /// Check if geo point is within a given radius
207    #[prost(message, optional, tag = "5")]
208    pub geo_radius: ::core::option::Option<GeoRadius>,
209    /// Check number of values for a specific field
210    #[prost(message, optional, tag = "6")]
211    pub values_count: ::core::option::Option<ValuesCount>,
212    /// Check if geo point is within a given polygon
213    #[prost(message, optional, tag = "7")]
214    pub geo_polygon: ::core::option::Option<GeoPolygon>,
215    /// Check if datetime is within a given range
216    #[prost(message, optional, tag = "8")]
217    pub datetime_range: ::core::option::Option<DatetimeRange>,
218    /// Check if field is empty
219    #[prost(bool, optional, tag = "9")]
220    pub is_empty: ::core::option::Option<bool>,
221    /// Check if field is null
222    #[prost(bool, optional, tag = "10")]
223    pub is_null: ::core::option::Option<bool>,
224}
225#[derive(Clone, PartialEq, ::prost::Message)]
226pub struct Match {
227    #[prost(oneof = "r#match::MatchValue", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")]
228    pub match_value: ::core::option::Option<r#match::MatchValue>,
229}
230/// Nested message and enum types in `Match`.
231pub mod r#match {
232    #[derive(Clone, PartialEq, ::prost::Oneof)]
233    pub enum MatchValue {
234        /// Match string keyword
235        #[prost(string, tag = "1")]
236        Keyword(::prost::alloc::string::String),
237        /// Match integer
238        #[prost(int64, tag = "2")]
239        Integer(i64),
240        /// Match boolean
241        #[prost(bool, tag = "3")]
242        Boolean(bool),
243        /// Match text
244        #[prost(string, tag = "4")]
245        Text(::prost::alloc::string::String),
246        /// Match multiple keywords
247        #[prost(message, tag = "5")]
248        Keywords(super::RepeatedStrings),
249        /// Match multiple integers
250        #[prost(message, tag = "6")]
251        Integers(super::RepeatedIntegers),
252        /// Match any other value except those integers
253        #[prost(message, tag = "7")]
254        ExceptIntegers(super::RepeatedIntegers),
255        /// Match any other value except those keywords
256        #[prost(message, tag = "8")]
257        ExceptKeywords(super::RepeatedStrings),
258        /// Match phrase text
259        #[prost(string, tag = "9")]
260        Phrase(::prost::alloc::string::String),
261        /// Match any word in the text
262        #[prost(string, tag = "10")]
263        TextAny(::prost::alloc::string::String),
264    }
265}
266#[derive(Clone, PartialEq, ::prost::Message)]
267pub struct RepeatedStrings {
268    #[prost(string, repeated, tag = "1")]
269    pub strings: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
270}
271#[derive(Clone, PartialEq, ::prost::Message)]
272pub struct RepeatedIntegers {
273    #[prost(int64, repeated, tag = "1")]
274    pub integers: ::prost::alloc::vec::Vec<i64>,
275}
276#[derive(Clone, Copy, PartialEq, ::prost::Message)]
277pub struct Range {
278    #[prost(double, optional, tag = "1")]
279    pub lt: ::core::option::Option<f64>,
280    #[prost(double, optional, tag = "2")]
281    pub gt: ::core::option::Option<f64>,
282    #[prost(double, optional, tag = "3")]
283    pub gte: ::core::option::Option<f64>,
284    #[prost(double, optional, tag = "4")]
285    pub lte: ::core::option::Option<f64>,
286}
287#[derive(Clone, Copy, PartialEq, ::prost::Message)]
288pub struct DatetimeRange {
289    #[prost(message, optional, tag = "1")]
290    pub lt: ::core::option::Option<::prost_types::Timestamp>,
291    #[prost(message, optional, tag = "2")]
292    pub gt: ::core::option::Option<::prost_types::Timestamp>,
293    #[prost(message, optional, tag = "3")]
294    pub gte: ::core::option::Option<::prost_types::Timestamp>,
295    #[prost(message, optional, tag = "4")]
296    pub lte: ::core::option::Option<::prost_types::Timestamp>,
297}
298#[derive(Clone, Copy, PartialEq, ::prost::Message)]
299pub struct GeoBoundingBox {
300    /// north-west corner
301    #[prost(message, optional, tag = "1")]
302    pub top_left: ::core::option::Option<GeoPoint>,
303    /// south-east corner
304    #[prost(message, optional, tag = "2")]
305    pub bottom_right: ::core::option::Option<GeoPoint>,
306}
307#[derive(Clone, Copy, PartialEq, ::prost::Message)]
308pub struct GeoRadius {
309    /// Center of the circle
310    #[prost(message, optional, tag = "1")]
311    pub center: ::core::option::Option<GeoPoint>,
312    /// In meters
313    #[prost(float, tag = "2")]
314    pub radius: f32,
315}
316#[derive(Clone, PartialEq, ::prost::Message)]
317pub struct GeoLineString {
318    /// Ordered sequence of GeoPoints representing the line
319    #[prost(message, repeated, tag = "1")]
320    pub points: ::prost::alloc::vec::Vec<GeoPoint>,
321}
322/// For a valid GeoPolygon, both the exterior and interior GeoLineStrings must
323/// consist of a minimum of 4 points.
324/// Additionally, the first and last points of each GeoLineString must be the same.
325#[derive(Clone, PartialEq, ::prost::Message)]
326pub struct GeoPolygon {
327    /// The exterior line bounds the surface
328    #[prost(message, optional, tag = "1")]
329    pub exterior: ::core::option::Option<GeoLineString>,
330    /// Interior lines (if present) bound holes within the surface
331    #[prost(message, repeated, tag = "2")]
332    pub interiors: ::prost::alloc::vec::Vec<GeoLineString>,
333}
334#[derive(Clone, Copy, PartialEq, ::prost::Message)]
335pub struct ValuesCount {
336    #[prost(uint64, optional, tag = "1")]
337    pub lt: ::core::option::Option<u64>,
338    #[prost(uint64, optional, tag = "2")]
339    pub gt: ::core::option::Option<u64>,
340    #[prost(uint64, optional, tag = "3")]
341    pub gte: ::core::option::Option<u64>,
342    #[prost(uint64, optional, tag = "4")]
343    pub lte: ::core::option::Option<u64>,
344}
345#[derive(Clone, Copy, PartialEq, ::prost::Message)]
346pub struct VectorParams {
347    /// Size of the vectors
348    #[prost(uint64, tag = "1")]
349    pub size: u64,
350    /// Distance function used for comparing vectors
351    #[prost(enumeration = "Distance", tag = "2")]
352    pub distance: i32,
353    /// Configuration of vector HNSW graph.
354    /// If omitted - the collection configuration will be used
355    #[prost(message, optional, tag = "3")]
356    pub hnsw_config: ::core::option::Option<HnswConfigDiff>,
357    /// Configuration of vector quantization config.
358    /// If omitted - the collection configuration will be used
359    #[prost(message, optional, tag = "4")]
360    pub quantization_config: ::core::option::Option<QuantizationConfig>,
361    /// If true - serve vectors from disk.
362    /// If set to false, the vectors will be loaded in RAM.
363    #[prost(bool, optional, tag = "5")]
364    pub on_disk: ::core::option::Option<bool>,
365    /// Data type of the vectors
366    #[prost(enumeration = "Datatype", optional, tag = "6")]
367    pub datatype: ::core::option::Option<i32>,
368    /// Configuration for multi-vector search
369    #[prost(message, optional, tag = "7")]
370    pub multivector_config: ::core::option::Option<MultiVectorConfig>,
371}
372#[derive(Clone, Copy, PartialEq, ::prost::Message)]
373pub struct VectorParamsDiff {
374    /// Update params for HNSW index.
375    /// If empty object - it will be unset
376    #[prost(message, optional, tag = "1")]
377    pub hnsw_config: ::core::option::Option<HnswConfigDiff>,
378    /// Update quantization params. If none - it is left unchanged.
379    #[prost(message, optional, tag = "2")]
380    pub quantization_config: ::core::option::Option<QuantizationConfigDiff>,
381    /// If true - serve vectors from disk.
382    /// If set to false, the vectors will be loaded in RAM.
383    #[prost(bool, optional, tag = "3")]
384    pub on_disk: ::core::option::Option<bool>,
385}
386#[derive(Clone, PartialEq, ::prost::Message)]
387pub struct VectorParamsMap {
388    #[prost(map = "string, message", tag = "1")]
389    pub map: ::std::collections::HashMap<::prost::alloc::string::String, VectorParams>,
390}
391#[derive(Clone, PartialEq, ::prost::Message)]
392pub struct VectorParamsDiffMap {
393    #[prost(map = "string, message", tag = "1")]
394    pub map: ::std::collections::HashMap<
395        ::prost::alloc::string::String,
396        VectorParamsDiff,
397    >,
398}
399#[derive(Clone, PartialEq, ::prost::Message)]
400pub struct VectorsConfig {
401    #[prost(oneof = "vectors_config::Config", tags = "1, 2")]
402    pub config: ::core::option::Option<vectors_config::Config>,
403}
404/// Nested message and enum types in `VectorsConfig`.
405pub mod vectors_config {
406    #[derive(Clone, PartialEq, ::prost::Oneof)]
407    pub enum Config {
408        #[prost(message, tag = "1")]
409        Params(super::VectorParams),
410        #[prost(message, tag = "2")]
411        ParamsMap(super::VectorParamsMap),
412    }
413}
414#[derive(Clone, PartialEq, ::prost::Message)]
415pub struct VectorsConfigDiff {
416    #[prost(oneof = "vectors_config_diff::Config", tags = "1, 2")]
417    pub config: ::core::option::Option<vectors_config_diff::Config>,
418}
419/// Nested message and enum types in `VectorsConfigDiff`.
420pub mod vectors_config_diff {
421    #[derive(Clone, PartialEq, ::prost::Oneof)]
422    pub enum Config {
423        #[prost(message, tag = "1")]
424        Params(super::VectorParamsDiff),
425        #[prost(message, tag = "2")]
426        ParamsMap(super::VectorParamsDiffMap),
427    }
428}
429#[derive(Clone, Copy, PartialEq, ::prost::Message)]
430pub struct SparseVectorParams {
431    /// Configuration of sparse index
432    #[prost(message, optional, tag = "1")]
433    pub index: ::core::option::Option<SparseIndexConfig>,
434    /// If set - apply modifier to the vector values
435    #[prost(enumeration = "Modifier", optional, tag = "2")]
436    pub modifier: ::core::option::Option<i32>,
437}
438#[derive(Clone, PartialEq, ::prost::Message)]
439pub struct SparseVectorConfig {
440    #[prost(map = "string, message", tag = "1")]
441    pub map: ::std::collections::HashMap<
442        ::prost::alloc::string::String,
443        SparseVectorParams,
444    >,
445}
446#[derive(Clone, Copy, PartialEq, ::prost::Message)]
447pub struct MultiVectorConfig {
448    /// Comparator for multi-vector search
449    #[prost(enumeration = "MultiVectorComparator", tag = "1")]
450    pub comparator: i32,
451}
452#[derive(Clone, PartialEq, ::prost::Message)]
453pub struct GetCollectionInfoRequest {
454    /// Name of the collection
455    #[prost(string, tag = "1")]
456    pub collection_name: ::prost::alloc::string::String,
457}
458#[derive(Clone, PartialEq, ::prost::Message)]
459pub struct CollectionExistsRequest {
460    #[prost(string, tag = "1")]
461    pub collection_name: ::prost::alloc::string::String,
462}
463#[derive(Clone, Copy, PartialEq, ::prost::Message)]
464pub struct CollectionExists {
465    #[prost(bool, tag = "1")]
466    pub exists: bool,
467}
468#[derive(Clone, Copy, PartialEq, ::prost::Message)]
469pub struct CollectionExistsResponse {
470    #[prost(message, optional, tag = "1")]
471    pub result: ::core::option::Option<CollectionExists>,
472    /// Time spent to process
473    #[prost(double, tag = "2")]
474    pub time: f64,
475}
476#[derive(Clone, Copy, PartialEq, ::prost::Message)]
477pub struct ListCollectionsRequest {}
478#[derive(Clone, PartialEq, ::prost::Message)]
479pub struct CollectionDescription {
480    /// Name of the collection
481    #[prost(string, tag = "1")]
482    pub name: ::prost::alloc::string::String,
483}
484#[derive(Clone, PartialEq, ::prost::Message)]
485pub struct GetCollectionInfoResponse {
486    #[prost(message, optional, tag = "1")]
487    pub result: ::core::option::Option<CollectionInfo>,
488    /// Time spent to process
489    #[prost(double, tag = "2")]
490    pub time: f64,
491}
492#[derive(Clone, PartialEq, ::prost::Message)]
493pub struct ListCollectionsResponse {
494    #[prost(message, repeated, tag = "1")]
495    pub collections: ::prost::alloc::vec::Vec<CollectionDescription>,
496    /// Time spent to process
497    #[prost(double, tag = "2")]
498    pub time: f64,
499}
500#[derive(Clone, Copy, PartialEq, ::prost::Message)]
501pub struct MaxOptimizationThreads {
502    #[prost(oneof = "max_optimization_threads::Variant", tags = "1, 2")]
503    pub variant: ::core::option::Option<max_optimization_threads::Variant>,
504}
505/// Nested message and enum types in `MaxOptimizationThreads`.
506pub mod max_optimization_threads {
507    #[derive(
508        Clone,
509        Copy,
510        Debug,
511        PartialEq,
512        Eq,
513        Hash,
514        PartialOrd,
515        Ord,
516        ::prost::Enumeration
517    )]
518    #[repr(i32)]
519    pub enum Setting {
520        Auto = 0,
521    }
522    impl Setting {
523        /// String value of the enum field names used in the ProtoBuf definition.
524        ///
525        /// The values are not transformed in any way and thus are considered stable
526        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
527        pub fn as_str_name(&self) -> &'static str {
528            match self {
529                Self::Auto => "Auto",
530            }
531        }
532        /// Creates an enum from field names used in the ProtoBuf definition.
533        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
534            match value {
535                "Auto" => Some(Self::Auto),
536                _ => None,
537            }
538        }
539    }
540    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
541    pub enum Variant {
542        #[prost(uint64, tag = "1")]
543        Value(u64),
544        #[prost(enumeration = "Setting", tag = "2")]
545        Setting(i32),
546    }
547}
548#[derive(Clone, PartialEq, ::prost::Message)]
549pub struct OptimizerStatus {
550    #[prost(bool, tag = "1")]
551    pub ok: bool,
552    #[prost(string, tag = "2")]
553    pub error: ::prost::alloc::string::String,
554}
555#[derive(Clone, PartialEq, ::prost::Message)]
556pub struct CollectionWarning {
557    #[prost(string, tag = "1")]
558    pub message: ::prost::alloc::string::String,
559}
560#[derive(Clone, Copy, PartialEq, ::prost::Message)]
561pub struct HnswConfigDiff {
562    /// Number of edges per node in the index graph.
563    /// Larger the value - more accurate the search, more space required.
564    #[prost(uint64, optional, tag = "1")]
565    pub m: ::core::option::Option<u64>,
566    /// Number of neighbours to consider during the index building.
567    /// Larger the value - more accurate the search, more time required to build the index.
568    #[prost(uint64, optional, tag = "2")]
569    pub ef_construct: ::core::option::Option<u64>,
570    /// Minimal size threshold (in KiloBytes) below which full-scan is preferred over HNSW search.
571    /// This measures the total size of vectors being queried against.
572    /// When the maximum estimated amount of points that a condition satisfies is smaller than
573    /// `full_scan_threshold`, the query planner will use full-scan search instead of HNSW index
574    /// traversal for better performance.
575    /// Note: 1Kb = 1 vector of size 256
576    #[prost(uint64, optional, tag = "3")]
577    pub full_scan_threshold: ::core::option::Option<u64>,
578    /// Number of parallel threads used for background index building.
579    /// If 0 - automatically select from 8 to 16.
580    /// Best to keep between 8 and 16 to prevent likelihood of building broken/inefficient HNSW graphs.
581    /// On small CPUs, less threads are used.
582    #[prost(uint64, optional, tag = "4")]
583    pub max_indexing_threads: ::core::option::Option<u64>,
584    /// Store HNSW index on disk. If set to false, the index will be stored in RAM.
585    #[prost(bool, optional, tag = "5")]
586    pub on_disk: ::core::option::Option<bool>,
587    /// Number of additional payload-aware links per node in the index graph.
588    /// If not set - regular M parameter will be used.
589    #[prost(uint64, optional, tag = "6")]
590    pub payload_m: ::core::option::Option<u64>,
591    /// Store copies of original and quantized vectors within the HNSW index file. Default: false.
592    /// Enabling this option will trade the search speed for disk usage by reducing amount of
593    /// random seeks during the search.
594    /// Requires quantized vectors to be enabled. Multi-vectors are not supported.
595    #[prost(bool, optional, tag = "7")]
596    pub inline_storage: ::core::option::Option<bool>,
597}
598#[derive(Clone, Copy, PartialEq, ::prost::Message)]
599pub struct SparseIndexConfig {
600    /// Prefer a full scan search upto (excluding) this number of vectors.
601    /// Note: this is number of vectors, not KiloBytes.
602    #[prost(uint64, optional, tag = "1")]
603    pub full_scan_threshold: ::core::option::Option<u64>,
604    /// Store inverted index on disk. If set to false, the index will be stored in RAM.
605    #[prost(bool, optional, tag = "2")]
606    pub on_disk: ::core::option::Option<bool>,
607    /// Datatype used to store weights in the index.
608    #[prost(enumeration = "Datatype", optional, tag = "3")]
609    pub datatype: ::core::option::Option<i32>,
610}
611#[derive(Clone, Copy, PartialEq, ::prost::Message)]
612pub struct WalConfigDiff {
613    /// Size of a single WAL block file
614    #[prost(uint64, optional, tag = "1")]
615    pub wal_capacity_mb: ::core::option::Option<u64>,
616    /// Number of segments to create in advance
617    #[prost(uint64, optional, tag = "2")]
618    pub wal_segments_ahead: ::core::option::Option<u64>,
619    /// Number of closed segments to retain
620    #[prost(uint64, optional, tag = "3")]
621    pub wal_retain_closed: ::core::option::Option<u64>,
622}
623#[derive(Clone, Copy, PartialEq, ::prost::Message)]
624pub struct OptimizersConfigDiff {
625    /// The minimal fraction of deleted vectors in a segment, required to perform
626    /// segment optimization
627    #[prost(double, optional, tag = "1")]
628    pub deleted_threshold: ::core::option::Option<f64>,
629    /// The minimal number of vectors in a segment, required to perform segment
630    /// optimization
631    #[prost(uint64, optional, tag = "2")]
632    pub vacuum_min_vector_number: ::core::option::Option<u64>,
633    /// Target amount of segments the optimizer will try to keep.
634    /// Real amount of segments may vary depending on multiple parameters:
635    ///
636    /// - Amount of stored points.
637    /// - Current write RPS.
638    ///
639    /// It is recommended to select the default number of segments as a factor of the number of search threads,
640    /// so that each segment would be handled evenly by one of the threads.
641    #[prost(uint64, optional, tag = "3")]
642    pub default_segment_number: ::core::option::Option<u64>,
643    /// Deprecated:
644    ///
645    /// Do not create segments larger this size (in kilobytes).
646    /// Large segments might require disproportionately long indexation times,
647    /// therefore it makes sense to limit the size of segments.
648    ///
649    /// If indexing speed is more important - make this parameter lower.
650    /// If search speed is more important - make this parameter higher.
651    /// Note: 1Kb = 1 vector of size 256
652    /// If not set, will be automatically selected considering the number of available CPUs.
653    #[prost(uint64, optional, tag = "4")]
654    pub max_segment_size: ::core::option::Option<u64>,
655    /// Maximum size (in kilobytes) of vectors to store in-memory per segment.
656    /// Segments larger than this threshold will be stored as read-only memmapped file.
657    ///
658    /// Memmap storage is disabled by default, to enable it, set this threshold to a reasonable value.
659    ///
660    /// To disable memmap storage, set this to `0`.
661    ///
662    /// Note: 1Kb = 1 vector of size 256
663    #[prost(uint64, optional, tag = "5")]
664    pub memmap_threshold: ::core::option::Option<u64>,
665    /// Maximum size (in kilobytes) of vectors allowed for plain index, exceeding
666    /// this threshold will enable vector indexing
667    ///
668    /// Default value is 20,000, based on
669    /// <<https://github.com/google-research/google-research/blob/master/scann/docs/algorithms.md>.>
670    ///
671    /// To disable vector indexing, set to `0`.
672    ///
673    /// Note: 1kB = 1 vector of size 256.
674    #[prost(uint64, optional, tag = "6")]
675    pub indexing_threshold: ::core::option::Option<u64>,
676    /// Interval between forced flushes.
677    #[prost(uint64, optional, tag = "7")]
678    pub flush_interval_sec: ::core::option::Option<u64>,
679    /// Deprecated in favor of `max_optimization_threads`
680    #[prost(uint64, optional, tag = "8")]
681    pub deprecated_max_optimization_threads: ::core::option::Option<u64>,
682    /// Max number of threads (jobs) for running optimizations per shard.
683    /// Note: each optimization job will also use `max_indexing_threads` threads by itself for index building.
684    /// If "auto" - have no limit and choose dynamically to saturate CPU.
685    /// If 0 - no optimization threads, optimizations will be disabled.
686    #[prost(message, optional, tag = "9")]
687    pub max_optimization_threads: ::core::option::Option<MaxOptimizationThreads>,
688    /// If this option is set, service will try to prevent creation of large unoptimized segments.
689    /// When enabled, updates may be blocked at request level if there are unoptimized segments larger than indexing threshold.
690    /// Updates will be resumed when optimization is completed and segments are optimized below the threshold.
691    /// Using this option may lead to increased delay between submitting an update and its application.
692    /// Default is disabled.
693    #[prost(bool, optional, tag = "10")]
694    pub prevent_unoptimized: ::core::option::Option<bool>,
695}
696#[derive(Clone, Copy, PartialEq, ::prost::Message)]
697pub struct ScalarQuantization {
698    /// Type of quantization
699    #[prost(enumeration = "QuantizationType", tag = "1")]
700    pub r#type: i32,
701    /// Number of bits to use for quantization
702    #[prost(float, optional, tag = "2")]
703    pub quantile: ::core::option::Option<f32>,
704    /// If true - quantized vectors always will be stored in RAM, ignoring the config of main storage
705    #[prost(bool, optional, tag = "3")]
706    pub always_ram: ::core::option::Option<bool>,
707}
708#[derive(Clone, Copy, PartialEq, ::prost::Message)]
709pub struct ProductQuantization {
710    /// Compression ratio
711    #[prost(enumeration = "CompressionRatio", tag = "1")]
712    pub compression: i32,
713    /// If true - quantized vectors always will be stored in RAM, ignoring the config of main storage
714    #[prost(bool, optional, tag = "2")]
715    pub always_ram: ::core::option::Option<bool>,
716}
717#[derive(Clone, Copy, PartialEq, ::prost::Message)]
718pub struct BinaryQuantizationQueryEncoding {
719    #[prost(oneof = "binary_quantization_query_encoding::Variant", tags = "4")]
720    pub variant: ::core::option::Option<binary_quantization_query_encoding::Variant>,
721}
722/// Nested message and enum types in `BinaryQuantizationQueryEncoding`.
723pub mod binary_quantization_query_encoding {
724    #[derive(
725        Clone,
726        Copy,
727        Debug,
728        PartialEq,
729        Eq,
730        Hash,
731        PartialOrd,
732        Ord,
733        ::prost::Enumeration
734    )]
735    #[repr(i32)]
736    pub enum Setting {
737        Default = 0,
738        Binary = 1,
739        Scalar4Bits = 2,
740        Scalar8Bits = 3,
741    }
742    impl Setting {
743        /// String value of the enum field names used in the ProtoBuf definition.
744        ///
745        /// The values are not transformed in any way and thus are considered stable
746        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
747        pub fn as_str_name(&self) -> &'static str {
748            match self {
749                Self::Default => "Default",
750                Self::Binary => "Binary",
751                Self::Scalar4Bits => "Scalar4Bits",
752                Self::Scalar8Bits => "Scalar8Bits",
753            }
754        }
755        /// Creates an enum from field names used in the ProtoBuf definition.
756        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
757            match value {
758                "Default" => Some(Self::Default),
759                "Binary" => Some(Self::Binary),
760                "Scalar4Bits" => Some(Self::Scalar4Bits),
761                "Scalar8Bits" => Some(Self::Scalar8Bits),
762                _ => None,
763            }
764        }
765    }
766    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
767    pub enum Variant {
768        #[prost(enumeration = "Setting", tag = "4")]
769        Setting(i32),
770    }
771}
772#[derive(Clone, Copy, PartialEq, ::prost::Message)]
773pub struct BinaryQuantization {
774    /// If true - quantized vectors always will be stored in RAM, ignoring the config of main storage
775    #[prost(bool, optional, tag = "1")]
776    pub always_ram: ::core::option::Option<bool>,
777    /// Binary quantization encoding method
778    #[prost(enumeration = "BinaryQuantizationEncoding", optional, tag = "2")]
779    pub encoding: ::core::option::Option<i32>,
780    /// Asymmetric quantization configuration allows a query to have different
781    /// quantization than stored vectors.
782    /// It can increase the accuracy of search at the cost of performance.
783    #[prost(message, optional, tag = "3")]
784    pub query_encoding: ::core::option::Option<BinaryQuantizationQueryEncoding>,
785}
786#[derive(Clone, Copy, PartialEq, ::prost::Message)]
787pub struct TurboQuantization {
788    #[prost(bool, optional, tag = "1")]
789    pub always_ram: ::core::option::Option<bool>,
790    #[prost(enumeration = "TurboQuantBitSize", optional, tag = "2")]
791    pub bits: ::core::option::Option<i32>,
792}
793#[derive(Clone, Copy, PartialEq, ::prost::Message)]
794pub struct QuantizationConfig {
795    #[prost(oneof = "quantization_config::Quantization", tags = "1, 2, 3, 4")]
796    pub quantization: ::core::option::Option<quantization_config::Quantization>,
797}
798/// Nested message and enum types in `QuantizationConfig`.
799pub mod quantization_config {
800    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
801    pub enum Quantization {
802        #[prost(message, tag = "1")]
803        Scalar(super::ScalarQuantization),
804        #[prost(message, tag = "2")]
805        Product(super::ProductQuantization),
806        #[prost(message, tag = "3")]
807        Binary(super::BinaryQuantization),
808        #[prost(message, tag = "4")]
809        Turboquant(super::TurboQuantization),
810    }
811}
812#[derive(Clone, Copy, PartialEq, ::prost::Message)]
813pub struct Disabled {}
814#[derive(Clone, Copy, PartialEq, ::prost::Message)]
815pub struct QuantizationConfigDiff {
816    #[prost(oneof = "quantization_config_diff::Quantization", tags = "1, 2, 3, 4, 5")]
817    pub quantization: ::core::option::Option<quantization_config_diff::Quantization>,
818}
819/// Nested message and enum types in `QuantizationConfigDiff`.
820pub mod quantization_config_diff {
821    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
822    pub enum Quantization {
823        #[prost(message, tag = "1")]
824        Scalar(super::ScalarQuantization),
825        #[prost(message, tag = "2")]
826        Product(super::ProductQuantization),
827        #[prost(message, tag = "3")]
828        Disabled(super::Disabled),
829        #[prost(message, tag = "4")]
830        Binary(super::BinaryQuantization),
831        #[prost(message, tag = "5")]
832        Turboquant(super::TurboQuantization),
833    }
834}
835#[derive(Clone, PartialEq, ::prost::Message)]
836pub struct StrictModeConfig {
837    /// Whether strict mode is enabled for a collection or not.
838    #[prost(bool, optional, tag = "1")]
839    pub enabled: ::core::option::Option<bool>,
840    /// Max allowed `limit` parameter for all APIs that don't have their own max limit.
841    #[prost(uint32, optional, tag = "2")]
842    pub max_query_limit: ::core::option::Option<u32>,
843    /// Max allowed `timeout` parameter.
844    #[prost(uint32, optional, tag = "3")]
845    pub max_timeout: ::core::option::Option<u32>,
846    /// Allow usage of unindexed fields in retrieval based (e.g. search) filters.
847    #[prost(bool, optional, tag = "4")]
848    pub unindexed_filtering_retrieve: ::core::option::Option<bool>,
849    /// Allow usage of unindexed fields in filtered updates (e.g. delete by payload).
850    #[prost(bool, optional, tag = "5")]
851    pub unindexed_filtering_update: ::core::option::Option<bool>,
852    /// Max HNSW ef value allowed in search parameters.
853    #[prost(uint32, optional, tag = "6")]
854    pub search_max_hnsw_ef: ::core::option::Option<u32>,
855    /// Whether exact search is allowed.
856    #[prost(bool, optional, tag = "7")]
857    pub search_allow_exact: ::core::option::Option<bool>,
858    /// Max oversampling value allowed in search
859    #[prost(float, optional, tag = "8")]
860    pub search_max_oversampling: ::core::option::Option<f32>,
861    /// Max batchsize when upserting
862    #[prost(uint64, optional, tag = "9")]
863    pub upsert_max_batchsize: ::core::option::Option<u64>,
864    /// Max batchsize when searching
865    #[prost(uint64, optional, tag = "20")]
866    pub search_max_batchsize: ::core::option::Option<u64>,
867    /// Max size of a collections vector storage in bytes, ignoring replicas.
868    #[prost(uint64, optional, tag = "10")]
869    pub max_collection_vector_size_bytes: ::core::option::Option<u64>,
870    /// Max number of read operations per minute per replica
871    #[prost(uint32, optional, tag = "11")]
872    pub read_rate_limit: ::core::option::Option<u32>,
873    /// Max number of write operations per minute per replica
874    #[prost(uint32, optional, tag = "12")]
875    pub write_rate_limit: ::core::option::Option<u32>,
876    /// Max size of a collections payload storage in bytes, ignoring replicas.
877    #[prost(uint64, optional, tag = "13")]
878    pub max_collection_payload_size_bytes: ::core::option::Option<u64>,
879    /// Max conditions a filter can have.
880    #[prost(uint64, optional, tag = "14")]
881    pub filter_max_conditions: ::core::option::Option<u64>,
882    /// Max size of a condition, eg. items in `MatchAny`.
883    #[prost(uint64, optional, tag = "15")]
884    pub condition_max_size: ::core::option::Option<u64>,
885    /// Multivector strict mode configuration
886    #[prost(message, optional, tag = "16")]
887    pub multivector_config: ::core::option::Option<StrictModeMultivectorConfig>,
888    /// Sparse vector strict mode configuration
889    #[prost(message, optional, tag = "17")]
890    pub sparse_config: ::core::option::Option<StrictModeSparseConfig>,
891    /// Max number of points estimated in a collection
892    #[prost(uint64, optional, tag = "18")]
893    pub max_points_count: ::core::option::Option<u64>,
894    /// Max number of payload indexes in a collection
895    #[prost(uint64, optional, tag = "19")]
896    pub max_payload_index_count: ::core::option::Option<u64>,
897    /// Reject memory-consuming update operations when process resident memory exceeds this percentage of total RAM (cgroup-aware, 1-100).
898    /// Delete-style operations are still allowed so memory can be freed.
899    #[prost(uint32, optional, tag = "21")]
900    pub max_resident_memory_percent: ::core::option::Option<u32>,
901}
902#[derive(Clone, PartialEq, ::prost::Message)]
903pub struct StrictModeSparseConfig {
904    #[prost(map = "string, message", tag = "1")]
905    pub sparse_config: ::std::collections::HashMap<
906        ::prost::alloc::string::String,
907        StrictModeSparse,
908    >,
909}
910#[derive(Clone, Copy, PartialEq, ::prost::Message)]
911pub struct StrictModeSparse {
912    /// Max length of sparse vector
913    #[prost(uint64, optional, tag = "10")]
914    pub max_length: ::core::option::Option<u64>,
915}
916#[derive(Clone, PartialEq, ::prost::Message)]
917pub struct StrictModeMultivectorConfig {
918    #[prost(map = "string, message", tag = "1")]
919    pub multivector_config: ::std::collections::HashMap<
920        ::prost::alloc::string::String,
921        StrictModeMultivector,
922    >,
923}
924#[derive(Clone, Copy, PartialEq, ::prost::Message)]
925pub struct StrictModeMultivector {
926    /// Max number of vectors in a multivector
927    #[prost(uint64, optional, tag = "1")]
928    pub max_vectors: ::core::option::Option<u64>,
929}
930#[derive(Clone, PartialEq, ::prost::Message)]
931pub struct CreateCollection {
932    /// Name of the collection
933    #[prost(string, tag = "1")]
934    pub collection_name: ::prost::alloc::string::String,
935    /// Configuration of vector index
936    #[prost(message, optional, tag = "4")]
937    pub hnsw_config: ::core::option::Option<HnswConfigDiff>,
938    /// Configuration of the Write-Ahead-Log
939    #[prost(message, optional, tag = "5")]
940    pub wal_config: ::core::option::Option<WalConfigDiff>,
941    /// Configuration of the optimizers
942    #[prost(message, optional, tag = "6")]
943    pub optimizers_config: ::core::option::Option<OptimizersConfigDiff>,
944    /// Number of shards in the collection, default is 1 for standalone, otherwise
945    /// equal to the number of nodes. Minimum is 1
946    #[prost(uint32, optional, tag = "7")]
947    pub shard_number: ::core::option::Option<u32>,
948    /// If true - point's payload will not be stored in memory
949    #[prost(bool, optional, tag = "8")]
950    pub on_disk_payload: ::core::option::Option<bool>,
951    /// Wait timeout for operation commit in seconds, if not specified - default
952    /// value will be supplied
953    #[prost(uint64, optional, tag = "9")]
954    pub timeout: ::core::option::Option<u64>,
955    /// Configuration for vectors
956    #[prost(message, optional, tag = "10")]
957    pub vectors_config: ::core::option::Option<VectorsConfig>,
958    /// Number of replicas of each shard that network tries to maintain, default = 1
959    #[prost(uint32, optional, tag = "11")]
960    pub replication_factor: ::core::option::Option<u32>,
961    /// How many replicas should apply the operation for us to consider it successful, default = 1
962    #[prost(uint32, optional, tag = "12")]
963    pub write_consistency_factor: ::core::option::Option<u32>,
964    /// Quantization configuration of vector
965    #[prost(message, optional, tag = "14")]
966    pub quantization_config: ::core::option::Option<QuantizationConfig>,
967    /// Sharding method
968    #[prost(enumeration = "ShardingMethod", optional, tag = "15")]
969    pub sharding_method: ::core::option::Option<i32>,
970    /// Configuration for sparse vectors
971    #[prost(message, optional, tag = "16")]
972    pub sparse_vectors_config: ::core::option::Option<SparseVectorConfig>,
973    /// Configuration for strict mode
974    #[prost(message, optional, tag = "17")]
975    pub strict_mode_config: ::core::option::Option<StrictModeConfig>,
976    /// Arbitrary JSON metadata for the collection
977    #[prost(map = "string, message", tag = "18")]
978    pub metadata: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
979}
980#[derive(Clone, PartialEq, ::prost::Message)]
981pub struct UpdateCollection {
982    /// Name of the collection
983    #[prost(string, tag = "1")]
984    pub collection_name: ::prost::alloc::string::String,
985    /// New configuration parameters for the collection.
986    /// This operation is blocking, it will only proceed once all current
987    /// optimizations are complete
988    #[prost(message, optional, tag = "2")]
989    pub optimizers_config: ::core::option::Option<OptimizersConfigDiff>,
990    /// Wait timeout for operation commit in seconds if blocking.
991    /// If not specified - default value will be supplied.
992    #[prost(uint64, optional, tag = "3")]
993    pub timeout: ::core::option::Option<u64>,
994    /// New configuration parameters for the collection
995    #[prost(message, optional, tag = "4")]
996    pub params: ::core::option::Option<CollectionParamsDiff>,
997    /// New HNSW parameters for the collection index
998    #[prost(message, optional, tag = "5")]
999    pub hnsw_config: ::core::option::Option<HnswConfigDiff>,
1000    /// New vector parameters
1001    #[prost(message, optional, tag = "6")]
1002    pub vectors_config: ::core::option::Option<VectorsConfigDiff>,
1003    /// Quantization configuration of vector
1004    #[prost(message, optional, tag = "7")]
1005    pub quantization_config: ::core::option::Option<QuantizationConfigDiff>,
1006    /// New sparse vector parameters
1007    #[prost(message, optional, tag = "8")]
1008    pub sparse_vectors_config: ::core::option::Option<SparseVectorConfig>,
1009    /// New strict mode configuration
1010    #[prost(message, optional, tag = "9")]
1011    pub strict_mode_config: ::core::option::Option<StrictModeConfig>,
1012    /// Arbitrary JSON-like metadata for the collection, will be merged with
1013    /// already stored metadata
1014    #[prost(map = "string, message", tag = "10")]
1015    pub metadata: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
1016}
1017#[derive(Clone, PartialEq, ::prost::Message)]
1018pub struct DeleteCollection {
1019    /// Name of the collection
1020    #[prost(string, tag = "1")]
1021    pub collection_name: ::prost::alloc::string::String,
1022    /// Wait timeout for operation commit in seconds.
1023    /// If not specified - default value will be supplied.
1024    #[prost(uint64, optional, tag = "2")]
1025    pub timeout: ::core::option::Option<u64>,
1026}
1027#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1028pub struct CollectionOperationResponse {
1029    /// if operation made changes
1030    #[prost(bool, tag = "1")]
1031    pub result: bool,
1032    /// Time spent to process
1033    #[prost(double, tag = "2")]
1034    pub time: f64,
1035}
1036#[derive(Clone, PartialEq, ::prost::Message)]
1037pub struct CollectionParams {
1038    /// Number of shards in collection
1039    #[prost(uint32, tag = "3")]
1040    pub shard_number: u32,
1041    /// If true - point's payload will not be stored in memory
1042    #[prost(bool, tag = "4")]
1043    pub on_disk_payload: bool,
1044    /// Configuration for vectors
1045    #[prost(message, optional, tag = "5")]
1046    pub vectors_config: ::core::option::Option<VectorsConfig>,
1047    /// Number of replicas of each shard that network tries to maintain
1048    #[prost(uint32, optional, tag = "6")]
1049    pub replication_factor: ::core::option::Option<u32>,
1050    /// How many replicas should apply the operation for us to consider it successful
1051    #[prost(uint32, optional, tag = "7")]
1052    pub write_consistency_factor: ::core::option::Option<u32>,
1053    /// Fan-out every read request to these many additional remote nodes (and return first available response)
1054    #[prost(uint32, optional, tag = "8")]
1055    pub read_fan_out_factor: ::core::option::Option<u32>,
1056    /// Sharding method
1057    #[prost(enumeration = "ShardingMethod", optional, tag = "9")]
1058    pub sharding_method: ::core::option::Option<i32>,
1059    /// Configuration for sparse vectors
1060    #[prost(message, optional, tag = "10")]
1061    pub sparse_vectors_config: ::core::option::Option<SparseVectorConfig>,
1062    /// Define number of milliseconds to wait before attempting to read from another replica.
1063    #[prost(uint64, optional, tag = "11")]
1064    pub read_fan_out_delay_ms: ::core::option::Option<u64>,
1065}
1066#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1067pub struct CollectionParamsDiff {
1068    /// Number of replicas of each shard that network tries to maintain
1069    #[prost(uint32, optional, tag = "1")]
1070    pub replication_factor: ::core::option::Option<u32>,
1071    /// How many replicas should apply the operation for us to consider it successful
1072    #[prost(uint32, optional, tag = "2")]
1073    pub write_consistency_factor: ::core::option::Option<u32>,
1074    /// If true - point's payload will not be stored in memory
1075    #[prost(bool, optional, tag = "3")]
1076    pub on_disk_payload: ::core::option::Option<bool>,
1077    /// Fan-out every read request to these many additional remote nodes (and return first available response)
1078    #[prost(uint32, optional, tag = "4")]
1079    pub read_fan_out_factor: ::core::option::Option<u32>,
1080    /// Define number of milliseconds to wait before attempting to read from another replica.
1081    #[prost(uint64, optional, tag = "5")]
1082    pub read_fan_out_delay_ms: ::core::option::Option<u64>,
1083}
1084#[derive(Clone, PartialEq, ::prost::Message)]
1085pub struct CollectionConfig {
1086    /// Collection parameters
1087    #[prost(message, optional, tag = "1")]
1088    pub params: ::core::option::Option<CollectionParams>,
1089    /// Configuration of vector index
1090    #[prost(message, optional, tag = "2")]
1091    pub hnsw_config: ::core::option::Option<HnswConfigDiff>,
1092    /// Configuration of the optimizers
1093    #[prost(message, optional, tag = "3")]
1094    pub optimizer_config: ::core::option::Option<OptimizersConfigDiff>,
1095    /// Configuration of the Write-Ahead-Log
1096    #[prost(message, optional, tag = "4")]
1097    pub wal_config: ::core::option::Option<WalConfigDiff>,
1098    /// Configuration of the vector quantization
1099    #[prost(message, optional, tag = "5")]
1100    pub quantization_config: ::core::option::Option<QuantizationConfig>,
1101    /// Configuration of strict mode.
1102    #[prost(message, optional, tag = "6")]
1103    pub strict_mode_config: ::core::option::Option<StrictModeConfig>,
1104    /// Arbitrary JSON metadata for the collection
1105    #[prost(map = "string, message", tag = "7")]
1106    pub metadata: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
1107}
1108#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1109pub struct KeywordIndexParams {
1110    /// If true - used for tenant optimization.
1111    #[prost(bool, optional, tag = "1")]
1112    pub is_tenant: ::core::option::Option<bool>,
1113    /// If true - store index on disk.
1114    #[prost(bool, optional, tag = "2")]
1115    pub on_disk: ::core::option::Option<bool>,
1116    /// Enable HNSW graph building for this payload field.
1117    /// If true, builds additional HNSW links (Need payload_m > 0).
1118    /// Default: true.
1119    #[prost(bool, optional, tag = "3")]
1120    pub enable_hnsw: ::core::option::Option<bool>,
1121}
1122#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1123pub struct IntegerIndexParams {
1124    /// If true - support direct lookups. Default is true.
1125    #[prost(bool, optional, tag = "1")]
1126    pub lookup: ::core::option::Option<bool>,
1127    /// If true - support ranges filters. Default is true.
1128    #[prost(bool, optional, tag = "2")]
1129    pub range: ::core::option::Option<bool>,
1130    /// If true - use this key to organize storage of the collection data.
1131    /// This option assumes that this key will be used in majority of filtered requests.
1132    /// Default is false.
1133    #[prost(bool, optional, tag = "3")]
1134    pub is_principal: ::core::option::Option<bool>,
1135    /// If true - store index on disk. Default is false.
1136    #[prost(bool, optional, tag = "4")]
1137    pub on_disk: ::core::option::Option<bool>,
1138    /// Enable HNSW graph building for this payload field.
1139    /// If true, builds additional HNSW links (Need payload_m > 0).
1140    /// Default: true.
1141    #[prost(bool, optional, tag = "5")]
1142    pub enable_hnsw: ::core::option::Option<bool>,
1143}
1144#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1145pub struct FloatIndexParams {
1146    /// If true - store index on disk.
1147    #[prost(bool, optional, tag = "1")]
1148    pub on_disk: ::core::option::Option<bool>,
1149    /// If true - use this key to organize storage of the collection data.
1150    /// This option assumes that this key will be used in majority of filtered requests.
1151    #[prost(bool, optional, tag = "2")]
1152    pub is_principal: ::core::option::Option<bool>,
1153    /// Enable HNSW graph building for this payload field.
1154    /// If true, builds additional HNSW links (Need payload_m > 0).
1155    /// Default: true.
1156    #[prost(bool, optional, tag = "3")]
1157    pub enable_hnsw: ::core::option::Option<bool>,
1158}
1159#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1160pub struct GeoIndexParams {
1161    /// If true - store index on disk.
1162    #[prost(bool, optional, tag = "1")]
1163    pub on_disk: ::core::option::Option<bool>,
1164    /// Enable HNSW graph building for this payload field.
1165    /// If true, builds additional HNSW links (Need payload_m > 0).
1166    /// Default: true.
1167    #[prost(bool, optional, tag = "2")]
1168    pub enable_hnsw: ::core::option::Option<bool>,
1169}
1170#[derive(Clone, PartialEq, ::prost::Message)]
1171pub struct StopwordsSet {
1172    /// List of languages to use stopwords from
1173    #[prost(string, repeated, tag = "1")]
1174    pub languages: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1175    /// List of custom stopwords
1176    #[prost(string, repeated, tag = "2")]
1177    pub custom: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1178}
1179#[derive(Clone, PartialEq, ::prost::Message)]
1180pub struct TextIndexParams {
1181    /// Tokenizer type
1182    #[prost(enumeration = "TokenizerType", tag = "1")]
1183    pub tokenizer: i32,
1184    /// If true - all tokens will be lowercase
1185    #[prost(bool, optional, tag = "2")]
1186    pub lowercase: ::core::option::Option<bool>,
1187    /// Minimal token length
1188    #[prost(uint64, optional, tag = "3")]
1189    pub min_token_len: ::core::option::Option<u64>,
1190    /// Maximal token length
1191    #[prost(uint64, optional, tag = "4")]
1192    pub max_token_len: ::core::option::Option<u64>,
1193    /// If true - store index on disk.
1194    #[prost(bool, optional, tag = "5")]
1195    pub on_disk: ::core::option::Option<bool>,
1196    /// Stopwords for the text index
1197    #[prost(message, optional, tag = "6")]
1198    pub stopwords: ::core::option::Option<StopwordsSet>,
1199    /// If true - support phrase matching.
1200    #[prost(bool, optional, tag = "7")]
1201    pub phrase_matching: ::core::option::Option<bool>,
1202    /// Set an algorithm for stemming.
1203    #[prost(message, optional, tag = "8")]
1204    pub stemmer: ::core::option::Option<StemmingAlgorithm>,
1205    /// If true, normalize tokens by folding accented characters to ASCII (e.g., "ação" -> "acao").
1206    /// Default: false.
1207    #[prost(bool, optional, tag = "9")]
1208    pub ascii_folding: ::core::option::Option<bool>,
1209    /// Enable HNSW graph building for this payload field.
1210    /// If true, builds additional HNSW links (Need payload_m > 0).
1211    /// Default: true.
1212    #[prost(bool, optional, tag = "10")]
1213    pub enable_hnsw: ::core::option::Option<bool>,
1214}
1215#[derive(Clone, PartialEq, ::prost::Message)]
1216pub struct StemmingAlgorithm {
1217    #[prost(oneof = "stemming_algorithm::StemmingParams", tags = "1")]
1218    pub stemming_params: ::core::option::Option<stemming_algorithm::StemmingParams>,
1219}
1220/// Nested message and enum types in `StemmingAlgorithm`.
1221pub mod stemming_algorithm {
1222    #[derive(Clone, PartialEq, ::prost::Oneof)]
1223    pub enum StemmingParams {
1224        /// Parameters for snowball stemming
1225        #[prost(message, tag = "1")]
1226        Snowball(super::SnowballParams),
1227    }
1228}
1229#[derive(Clone, PartialEq, ::prost::Message)]
1230pub struct SnowballParams {
1231    /// Which language the algorithm should stem.
1232    #[prost(string, tag = "1")]
1233    pub language: ::prost::alloc::string::String,
1234}
1235#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1236pub struct BoolIndexParams {
1237    /// If true - store index on disk.
1238    #[prost(bool, optional, tag = "1")]
1239    pub on_disk: ::core::option::Option<bool>,
1240    /// Enable HNSW graph building for this payload field.
1241    /// If true, builds additional HNSW links (Need payload_m > 0).
1242    /// Default: true.
1243    #[prost(bool, optional, tag = "2")]
1244    pub enable_hnsw: ::core::option::Option<bool>,
1245}
1246#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1247pub struct DatetimeIndexParams {
1248    /// If true - store index on disk.
1249    #[prost(bool, optional, tag = "1")]
1250    pub on_disk: ::core::option::Option<bool>,
1251    /// If true - use this key to organize storage of the collection data.
1252    /// This option assumes that this key will be used in majority of filtered requests.
1253    #[prost(bool, optional, tag = "2")]
1254    pub is_principal: ::core::option::Option<bool>,
1255    /// Enable HNSW graph building for this payload field.
1256    /// If true, builds additional HNSW links (Need payload_m > 0).
1257    /// Default: true.
1258    #[prost(bool, optional, tag = "3")]
1259    pub enable_hnsw: ::core::option::Option<bool>,
1260}
1261#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1262pub struct UuidIndexParams {
1263    /// If true - used for tenant optimization.
1264    #[prost(bool, optional, tag = "1")]
1265    pub is_tenant: ::core::option::Option<bool>,
1266    /// If true - store index on disk.
1267    #[prost(bool, optional, tag = "2")]
1268    pub on_disk: ::core::option::Option<bool>,
1269    /// Enable HNSW graph building for this payload field.
1270    /// If true, builds additional HNSW links (Need payload_m > 0).
1271    /// Default: true.
1272    #[prost(bool, optional, tag = "3")]
1273    pub enable_hnsw: ::core::option::Option<bool>,
1274}
1275#[derive(Clone, PartialEq, ::prost::Message)]
1276pub struct PayloadIndexParams {
1277    #[prost(
1278        oneof = "payload_index_params::IndexParams",
1279        tags = "3, 2, 4, 5, 1, 6, 7, 8"
1280    )]
1281    pub index_params: ::core::option::Option<payload_index_params::IndexParams>,
1282}
1283/// Nested message and enum types in `PayloadIndexParams`.
1284pub mod payload_index_params {
1285    #[derive(Clone, PartialEq, ::prost::Oneof)]
1286    pub enum IndexParams {
1287        /// Parameters for keyword index
1288        #[prost(message, tag = "3")]
1289        KeywordIndexParams(super::KeywordIndexParams),
1290        /// Parameters for integer index
1291        #[prost(message, tag = "2")]
1292        IntegerIndexParams(super::IntegerIndexParams),
1293        /// Parameters for float index
1294        #[prost(message, tag = "4")]
1295        FloatIndexParams(super::FloatIndexParams),
1296        /// Parameters for geo index
1297        #[prost(message, tag = "5")]
1298        GeoIndexParams(super::GeoIndexParams),
1299        /// Parameters for text index
1300        #[prost(message, tag = "1")]
1301        TextIndexParams(super::TextIndexParams),
1302        /// Parameters for bool index
1303        #[prost(message, tag = "6")]
1304        BoolIndexParams(super::BoolIndexParams),
1305        /// Parameters for datetime index
1306        #[prost(message, tag = "7")]
1307        DatetimeIndexParams(super::DatetimeIndexParams),
1308        /// Parameters for uuid index
1309        #[prost(message, tag = "8")]
1310        UuidIndexParams(super::UuidIndexParams),
1311    }
1312}
1313#[derive(Clone, PartialEq, ::prost::Message)]
1314pub struct PayloadSchemaInfo {
1315    /// Field data type
1316    #[prost(enumeration = "PayloadSchemaType", tag = "1")]
1317    pub data_type: i32,
1318    /// Field index parameters
1319    #[prost(message, optional, tag = "2")]
1320    pub params: ::core::option::Option<PayloadIndexParams>,
1321    /// Number of points indexed within this field
1322    #[prost(uint64, optional, tag = "3")]
1323    pub points: ::core::option::Option<u64>,
1324}
1325#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1326pub struct UpdateQueueInfo {
1327    /// Number of elements in the queue
1328    #[prost(uint64, tag = "1")]
1329    pub length: u64,
1330    /// Number of points that are deferred (i.e hidden from search as they're not yet optimized).
1331    #[prost(uint64, optional, tag = "2")]
1332    pub deferred_points: ::core::option::Option<u64>,
1333}
1334#[derive(Clone, PartialEq, ::prost::Message)]
1335pub struct CollectionInfo {
1336    /// operating condition of the collection
1337    #[prost(enumeration = "CollectionStatus", tag = "1")]
1338    pub status: i32,
1339    /// status of collection optimizers
1340    #[prost(message, optional, tag = "2")]
1341    pub optimizer_status: ::core::option::Option<OptimizerStatus>,
1342    /// Number of independent segments
1343    #[prost(uint64, tag = "4")]
1344    pub segments_count: u64,
1345    /// Configuration
1346    #[prost(message, optional, tag = "7")]
1347    pub config: ::core::option::Option<CollectionConfig>,
1348    /// Collection data types
1349    #[prost(map = "string, message", tag = "8")]
1350    pub payload_schema: ::std::collections::HashMap<
1351        ::prost::alloc::string::String,
1352        PayloadSchemaInfo,
1353    >,
1354    /// Approximate number of points in the collection
1355    #[prost(uint64, optional, tag = "9")]
1356    pub points_count: ::core::option::Option<u64>,
1357    /// Approximate number of indexed vectors in the collection.
1358    #[prost(uint64, optional, tag = "10")]
1359    pub indexed_vectors_count: ::core::option::Option<u64>,
1360    /// Warnings related to the collection
1361    #[prost(message, repeated, tag = "11")]
1362    pub warnings: ::prost::alloc::vec::Vec<CollectionWarning>,
1363    /// Update queue info
1364    #[prost(message, optional, tag = "12")]
1365    pub update_queue: ::core::option::Option<UpdateQueueInfo>,
1366}
1367#[derive(Clone, PartialEq, ::prost::Message)]
1368pub struct ChangeAliases {
1369    /// List of actions
1370    #[prost(message, repeated, tag = "1")]
1371    pub actions: ::prost::alloc::vec::Vec<AliasOperations>,
1372    /// Wait timeout for operation commit in seconds.
1373    /// If not specified - default value will be supplied.
1374    #[prost(uint64, optional, tag = "2")]
1375    pub timeout: ::core::option::Option<u64>,
1376}
1377#[derive(Clone, PartialEq, ::prost::Message)]
1378pub struct AliasOperations {
1379    #[prost(oneof = "alias_operations::Action", tags = "1, 2, 3")]
1380    pub action: ::core::option::Option<alias_operations::Action>,
1381}
1382/// Nested message and enum types in `AliasOperations`.
1383pub mod alias_operations {
1384    #[derive(Clone, PartialEq, ::prost::Oneof)]
1385    pub enum Action {
1386        #[prost(message, tag = "1")]
1387        CreateAlias(super::CreateAlias),
1388        #[prost(message, tag = "2")]
1389        RenameAlias(super::RenameAlias),
1390        #[prost(message, tag = "3")]
1391        DeleteAlias(super::DeleteAlias),
1392    }
1393}
1394#[derive(Clone, PartialEq, ::prost::Message)]
1395pub struct CreateAlias {
1396    /// Name of the collection
1397    #[prost(string, tag = "1")]
1398    pub collection_name: ::prost::alloc::string::String,
1399    /// New name of the alias
1400    #[prost(string, tag = "2")]
1401    pub alias_name: ::prost::alloc::string::String,
1402}
1403#[derive(Clone, PartialEq, ::prost::Message)]
1404pub struct RenameAlias {
1405    /// Name of the alias to rename
1406    #[prost(string, tag = "1")]
1407    pub old_alias_name: ::prost::alloc::string::String,
1408    /// Name of the alias
1409    #[prost(string, tag = "2")]
1410    pub new_alias_name: ::prost::alloc::string::String,
1411}
1412#[derive(Clone, PartialEq, ::prost::Message)]
1413pub struct DeleteAlias {
1414    /// Name of the alias
1415    #[prost(string, tag = "1")]
1416    pub alias_name: ::prost::alloc::string::String,
1417}
1418#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1419pub struct ListAliasesRequest {}
1420#[derive(Clone, PartialEq, ::prost::Message)]
1421pub struct ListCollectionAliasesRequest {
1422    /// Name of the collection
1423    #[prost(string, tag = "1")]
1424    pub collection_name: ::prost::alloc::string::String,
1425}
1426#[derive(Clone, PartialEq, ::prost::Message)]
1427pub struct AliasDescription {
1428    /// Name of the alias
1429    #[prost(string, tag = "1")]
1430    pub alias_name: ::prost::alloc::string::String,
1431    /// Name of the collection
1432    #[prost(string, tag = "2")]
1433    pub collection_name: ::prost::alloc::string::String,
1434}
1435#[derive(Clone, PartialEq, ::prost::Message)]
1436pub struct ListAliasesResponse {
1437    #[prost(message, repeated, tag = "1")]
1438    pub aliases: ::prost::alloc::vec::Vec<AliasDescription>,
1439    /// Time spent to process
1440    #[prost(double, tag = "2")]
1441    pub time: f64,
1442}
1443#[derive(Clone, PartialEq, ::prost::Message)]
1444pub struct CollectionClusterInfoRequest {
1445    /// Name of the collection
1446    #[prost(string, tag = "1")]
1447    pub collection_name: ::prost::alloc::string::String,
1448}
1449#[derive(Clone, PartialEq, ::prost::Message)]
1450pub struct ShardKey {
1451    #[prost(oneof = "shard_key::Key", tags = "1, 2")]
1452    pub key: ::core::option::Option<shard_key::Key>,
1453}
1454/// Nested message and enum types in `ShardKey`.
1455pub mod shard_key {
1456    #[derive(Clone, PartialEq, ::prost::Oneof)]
1457    pub enum Key {
1458        /// String key
1459        #[prost(string, tag = "1")]
1460        Keyword(::prost::alloc::string::String),
1461        /// Number key
1462        #[prost(uint64, tag = "2")]
1463        Number(u64),
1464    }
1465}
1466#[derive(Clone, PartialEq, ::prost::Message)]
1467pub struct LocalShardInfo {
1468    /// Local shard id
1469    #[prost(uint32, tag = "1")]
1470    pub shard_id: u32,
1471    /// Number of points in the shard
1472    #[prost(uint64, tag = "2")]
1473    pub points_count: u64,
1474    /// Is replica active
1475    #[prost(enumeration = "ReplicaState", tag = "3")]
1476    pub state: i32,
1477    /// User-defined shard key
1478    #[prost(message, optional, tag = "4")]
1479    pub shard_key: ::core::option::Option<ShardKey>,
1480}
1481#[derive(Clone, PartialEq, ::prost::Message)]
1482pub struct RemoteShardInfo {
1483    /// Local shard id
1484    #[prost(uint32, tag = "1")]
1485    pub shard_id: u32,
1486    /// Remote peer id
1487    #[prost(uint64, tag = "2")]
1488    pub peer_id: u64,
1489    /// Is replica active
1490    #[prost(enumeration = "ReplicaState", tag = "3")]
1491    pub state: i32,
1492    /// User-defined shard key
1493    #[prost(message, optional, tag = "4")]
1494    pub shard_key: ::core::option::Option<ShardKey>,
1495}
1496#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1497pub struct ShardTransferInfo {
1498    /// Local shard id
1499    #[prost(uint32, tag = "1")]
1500    pub shard_id: u32,
1501    #[prost(uint32, optional, tag = "5")]
1502    pub to_shard_id: ::core::option::Option<u32>,
1503    #[prost(uint64, tag = "2")]
1504    pub from: u64,
1505    #[prost(uint64, tag = "3")]
1506    pub to: u64,
1507    /// If `true` transfer is a synchronization of a replicas;
1508    /// If `false` transfer is a moving of a shard from one peer to another
1509    #[prost(bool, tag = "4")]
1510    pub sync: bool,
1511}
1512#[derive(Clone, PartialEq, ::prost::Message)]
1513pub struct ReshardingInfo {
1514    #[prost(uint32, tag = "1")]
1515    pub shard_id: u32,
1516    #[prost(uint64, tag = "2")]
1517    pub peer_id: u64,
1518    #[prost(message, optional, tag = "3")]
1519    pub shard_key: ::core::option::Option<ShardKey>,
1520    #[prost(enumeration = "ReshardingDirection", tag = "4")]
1521    pub direction: i32,
1522}
1523#[derive(Clone, PartialEq, ::prost::Message)]
1524pub struct CollectionClusterInfoResponse {
1525    /// ID of this peer
1526    #[prost(uint64, tag = "1")]
1527    pub peer_id: u64,
1528    /// Total number of shards
1529    #[prost(uint64, tag = "2")]
1530    pub shard_count: u64,
1531    /// Local shards
1532    #[prost(message, repeated, tag = "3")]
1533    pub local_shards: ::prost::alloc::vec::Vec<LocalShardInfo>,
1534    /// Remote shards
1535    #[prost(message, repeated, tag = "4")]
1536    pub remote_shards: ::prost::alloc::vec::Vec<RemoteShardInfo>,
1537    /// Shard transfers
1538    #[prost(message, repeated, tag = "5")]
1539    pub shard_transfers: ::prost::alloc::vec::Vec<ShardTransferInfo>,
1540    /// Resharding operations
1541    #[prost(message, repeated, tag = "6")]
1542    pub resharding_operations: ::prost::alloc::vec::Vec<ReshardingInfo>,
1543}
1544#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1545pub struct MoveShard {
1546    /// Local shard id
1547    #[prost(uint32, tag = "1")]
1548    pub shard_id: u32,
1549    #[prost(uint32, optional, tag = "5")]
1550    pub to_shard_id: ::core::option::Option<u32>,
1551    #[prost(uint64, tag = "2")]
1552    pub from_peer_id: u64,
1553    #[prost(uint64, tag = "3")]
1554    pub to_peer_id: u64,
1555    #[prost(enumeration = "ShardTransferMethod", optional, tag = "4")]
1556    pub method: ::core::option::Option<i32>,
1557}
1558#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1559pub struct ReplicateShard {
1560    /// Local shard id
1561    #[prost(uint32, tag = "1")]
1562    pub shard_id: u32,
1563    #[prost(uint32, optional, tag = "5")]
1564    pub to_shard_id: ::core::option::Option<u32>,
1565    #[prost(uint64, tag = "2")]
1566    pub from_peer_id: u64,
1567    #[prost(uint64, tag = "3")]
1568    pub to_peer_id: u64,
1569    #[prost(enumeration = "ShardTransferMethod", optional, tag = "4")]
1570    pub method: ::core::option::Option<i32>,
1571}
1572#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1573pub struct AbortShardTransfer {
1574    /// Local shard id
1575    #[prost(uint32, tag = "1")]
1576    pub shard_id: u32,
1577    #[prost(uint32, optional, tag = "4")]
1578    pub to_shard_id: ::core::option::Option<u32>,
1579    #[prost(uint64, tag = "2")]
1580    pub from_peer_id: u64,
1581    #[prost(uint64, tag = "3")]
1582    pub to_peer_id: u64,
1583}
1584#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1585pub struct RestartTransfer {
1586    /// Local shard id
1587    #[prost(uint32, tag = "1")]
1588    pub shard_id: u32,
1589    #[prost(uint32, optional, tag = "5")]
1590    pub to_shard_id: ::core::option::Option<u32>,
1591    #[prost(uint64, tag = "2")]
1592    pub from_peer_id: u64,
1593    #[prost(uint64, tag = "3")]
1594    pub to_peer_id: u64,
1595    #[prost(enumeration = "ShardTransferMethod", tag = "4")]
1596    pub method: i32,
1597}
1598#[derive(Clone, PartialEq, ::prost::Message)]
1599pub struct ReplicatePoints {
1600    /// Source shard key
1601    #[prost(message, optional, tag = "1")]
1602    pub from_shard_key: ::core::option::Option<ShardKey>,
1603    /// Target shard key
1604    #[prost(message, optional, tag = "2")]
1605    pub to_shard_key: ::core::option::Option<ShardKey>,
1606    /// If set - only points matching the filter will be replicated
1607    #[prost(message, optional, tag = "3")]
1608    pub filter: ::core::option::Option<Filter>,
1609}
1610#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1611pub struct Replica {
1612    #[prost(uint32, tag = "1")]
1613    pub shard_id: u32,
1614    #[prost(uint64, tag = "2")]
1615    pub peer_id: u64,
1616}
1617#[derive(Clone, PartialEq, ::prost::Message)]
1618pub struct CreateShardKey {
1619    /// User-defined shard key
1620    #[prost(message, optional, tag = "1")]
1621    pub shard_key: ::core::option::Option<ShardKey>,
1622    /// Number of shards to create per shard key
1623    #[prost(uint32, optional, tag = "2")]
1624    pub shards_number: ::core::option::Option<u32>,
1625    /// Number of replicas of each shard to create
1626    #[prost(uint32, optional, tag = "3")]
1627    pub replication_factor: ::core::option::Option<u32>,
1628    /// List of peer ids, allowed to create shards. If empty - all peers are allowed
1629    #[prost(uint64, repeated, tag = "4")]
1630    pub placement: ::prost::alloc::vec::Vec<u64>,
1631    /// Initial state of created replicas. Warning: use with care.
1632    #[prost(enumeration = "ReplicaState", optional, tag = "5")]
1633    pub initial_state: ::core::option::Option<i32>,
1634}
1635#[derive(Clone, PartialEq, ::prost::Message)]
1636pub struct DeleteShardKey {
1637    /// Shard key to delete
1638    #[prost(message, optional, tag = "1")]
1639    pub shard_key: ::core::option::Option<ShardKey>,
1640}
1641#[derive(Clone, PartialEq, ::prost::Message)]
1642pub struct UpdateCollectionClusterSetupRequest {
1643    /// Name of the collection
1644    #[prost(string, tag = "1")]
1645    pub collection_name: ::prost::alloc::string::String,
1646    /// Wait timeout for operation commit in seconds.
1647    /// If not specified - default value will be supplied.
1648    #[prost(uint64, optional, tag = "6")]
1649    pub timeout: ::core::option::Option<u64>,
1650    #[prost(
1651        oneof = "update_collection_cluster_setup_request::Operation",
1652        tags = "2, 3, 4, 5, 7, 8, 9, 10"
1653    )]
1654    pub operation: ::core::option::Option<
1655        update_collection_cluster_setup_request::Operation,
1656    >,
1657}
1658/// Nested message and enum types in `UpdateCollectionClusterSetupRequest`.
1659pub mod update_collection_cluster_setup_request {
1660    #[derive(Clone, PartialEq, ::prost::Oneof)]
1661    pub enum Operation {
1662        #[prost(message, tag = "2")]
1663        MoveShard(super::MoveShard),
1664        #[prost(message, tag = "3")]
1665        ReplicateShard(super::ReplicateShard),
1666        #[prost(message, tag = "4")]
1667        AbortTransfer(super::AbortShardTransfer),
1668        #[prost(message, tag = "5")]
1669        DropReplica(super::Replica),
1670        #[prost(message, tag = "7")]
1671        CreateShardKey(super::CreateShardKey),
1672        #[prost(message, tag = "8")]
1673        DeleteShardKey(super::DeleteShardKey),
1674        #[prost(message, tag = "9")]
1675        RestartTransfer(super::RestartTransfer),
1676        #[prost(message, tag = "10")]
1677        ReplicatePoints(super::ReplicatePoints),
1678    }
1679}
1680#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1681pub struct UpdateCollectionClusterSetupResponse {
1682    #[prost(bool, tag = "1")]
1683    pub result: bool,
1684}
1685#[derive(Clone, PartialEq, ::prost::Message)]
1686pub struct CreateShardKeyRequest {
1687    /// Name of the collection
1688    #[prost(string, tag = "1")]
1689    pub collection_name: ::prost::alloc::string::String,
1690    /// Request to create shard key
1691    #[prost(message, optional, tag = "2")]
1692    pub request: ::core::option::Option<CreateShardKey>,
1693    /// Wait timeout for operation commit in seconds.
1694    /// If not specified - default value will be supplied.
1695    #[prost(uint64, optional, tag = "3")]
1696    pub timeout: ::core::option::Option<u64>,
1697}
1698#[derive(Clone, PartialEq, ::prost::Message)]
1699pub struct DeleteShardKeyRequest {
1700    /// Name of the collection
1701    #[prost(string, tag = "1")]
1702    pub collection_name: ::prost::alloc::string::String,
1703    /// Request to delete shard key
1704    #[prost(message, optional, tag = "2")]
1705    pub request: ::core::option::Option<DeleteShardKey>,
1706    /// Wait timeout for operation commit in seconds.
1707    /// If not specified - default value will be supplied.
1708    #[prost(uint64, optional, tag = "3")]
1709    pub timeout: ::core::option::Option<u64>,
1710}
1711#[derive(Clone, PartialEq, ::prost::Message)]
1712pub struct ListShardKeysRequest {
1713    /// Name of the collection
1714    #[prost(string, tag = "1")]
1715    pub collection_name: ::prost::alloc::string::String,
1716}
1717#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1718pub struct CreateShardKeyResponse {
1719    #[prost(bool, tag = "1")]
1720    pub result: bool,
1721}
1722#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1723pub struct DeleteShardKeyResponse {
1724    #[prost(bool, tag = "1")]
1725    pub result: bool,
1726}
1727#[derive(Clone, PartialEq, ::prost::Message)]
1728pub struct ShardKeyDescription {
1729    #[prost(message, optional, tag = "1")]
1730    pub key: ::core::option::Option<ShardKey>,
1731}
1732#[derive(Clone, PartialEq, ::prost::Message)]
1733pub struct ListShardKeysResponse {
1734    #[prost(message, repeated, tag = "1")]
1735    pub shard_keys: ::prost::alloc::vec::Vec<ShardKeyDescription>,
1736    /// Time spent to process
1737    #[prost(double, tag = "2")]
1738    pub time: f64,
1739}
1740#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1741#[repr(i32)]
1742pub enum Datatype {
1743    Default = 0,
1744    Float32 = 1,
1745    Uint8 = 2,
1746    Float16 = 3,
1747}
1748impl Datatype {
1749    /// String value of the enum field names used in the ProtoBuf definition.
1750    ///
1751    /// The values are not transformed in any way and thus are considered stable
1752    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1753    pub fn as_str_name(&self) -> &'static str {
1754        match self {
1755            Self::Default => "Default",
1756            Self::Float32 => "Float32",
1757            Self::Uint8 => "Uint8",
1758            Self::Float16 => "Float16",
1759        }
1760    }
1761    /// Creates an enum from field names used in the ProtoBuf definition.
1762    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1763        match value {
1764            "Default" => Some(Self::Default),
1765            "Float32" => Some(Self::Float32),
1766            "Uint8" => Some(Self::Uint8),
1767            "Float16" => Some(Self::Float16),
1768            _ => None,
1769        }
1770    }
1771}
1772#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1773#[repr(i32)]
1774pub enum Modifier {
1775    None = 0,
1776    /// Apply Inverse Document Frequency
1777    Idf = 1,
1778}
1779impl Modifier {
1780    /// String value of the enum field names used in the ProtoBuf definition.
1781    ///
1782    /// The values are not transformed in any way and thus are considered stable
1783    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1784    pub fn as_str_name(&self) -> &'static str {
1785        match self {
1786            Self::None => "None",
1787            Self::Idf => "Idf",
1788        }
1789    }
1790    /// Creates an enum from field names used in the ProtoBuf definition.
1791    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1792        match value {
1793            "None" => Some(Self::None),
1794            "Idf" => Some(Self::Idf),
1795            _ => None,
1796        }
1797    }
1798}
1799#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1800#[repr(i32)]
1801pub enum MultiVectorComparator {
1802    MaxSim = 0,
1803}
1804impl MultiVectorComparator {
1805    /// String value of the enum field names used in the ProtoBuf definition.
1806    ///
1807    /// The values are not transformed in any way and thus are considered stable
1808    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1809    pub fn as_str_name(&self) -> &'static str {
1810        match self {
1811            Self::MaxSim => "MaxSim",
1812        }
1813    }
1814    /// Creates an enum from field names used in the ProtoBuf definition.
1815    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1816        match value {
1817            "MaxSim" => Some(Self::MaxSim),
1818            _ => None,
1819        }
1820    }
1821}
1822#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1823#[repr(i32)]
1824pub enum Distance {
1825    UnknownDistance = 0,
1826    Cosine = 1,
1827    Euclid = 2,
1828    Dot = 3,
1829    Manhattan = 4,
1830}
1831impl Distance {
1832    /// String value of the enum field names used in the ProtoBuf definition.
1833    ///
1834    /// The values are not transformed in any way and thus are considered stable
1835    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1836    pub fn as_str_name(&self) -> &'static str {
1837        match self {
1838            Self::UnknownDistance => "UnknownDistance",
1839            Self::Cosine => "Cosine",
1840            Self::Euclid => "Euclid",
1841            Self::Dot => "Dot",
1842            Self::Manhattan => "Manhattan",
1843        }
1844    }
1845    /// Creates an enum from field names used in the ProtoBuf definition.
1846    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1847        match value {
1848            "UnknownDistance" => Some(Self::UnknownDistance),
1849            "Cosine" => Some(Self::Cosine),
1850            "Euclid" => Some(Self::Euclid),
1851            "Dot" => Some(Self::Dot),
1852            "Manhattan" => Some(Self::Manhattan),
1853            _ => None,
1854        }
1855    }
1856}
1857#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1858#[repr(i32)]
1859pub enum CollectionStatus {
1860    UnknownCollectionStatus = 0,
1861    /// All segments are ready
1862    Green = 1,
1863    /// Optimization in process
1864    Yellow = 2,
1865    /// Something went wrong
1866    Red = 3,
1867    /// Optimization is pending
1868    Grey = 4,
1869}
1870impl CollectionStatus {
1871    /// String value of the enum field names used in the ProtoBuf definition.
1872    ///
1873    /// The values are not transformed in any way and thus are considered stable
1874    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1875    pub fn as_str_name(&self) -> &'static str {
1876        match self {
1877            Self::UnknownCollectionStatus => "UnknownCollectionStatus",
1878            Self::Green => "Green",
1879            Self::Yellow => "Yellow",
1880            Self::Red => "Red",
1881            Self::Grey => "Grey",
1882        }
1883    }
1884    /// Creates an enum from field names used in the ProtoBuf definition.
1885    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1886        match value {
1887            "UnknownCollectionStatus" => Some(Self::UnknownCollectionStatus),
1888            "Green" => Some(Self::Green),
1889            "Yellow" => Some(Self::Yellow),
1890            "Red" => Some(Self::Red),
1891            "Grey" => Some(Self::Grey),
1892            _ => None,
1893        }
1894    }
1895}
1896#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1897#[repr(i32)]
1898pub enum PayloadSchemaType {
1899    UnknownType = 0,
1900    Keyword = 1,
1901    Integer = 2,
1902    Float = 3,
1903    Geo = 4,
1904    Text = 5,
1905    Bool = 6,
1906    Datetime = 7,
1907    Uuid = 8,
1908}
1909impl PayloadSchemaType {
1910    /// String value of the enum field names used in the ProtoBuf definition.
1911    ///
1912    /// The values are not transformed in any way and thus are considered stable
1913    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1914    pub fn as_str_name(&self) -> &'static str {
1915        match self {
1916            Self::UnknownType => "UnknownType",
1917            Self::Keyword => "Keyword",
1918            Self::Integer => "Integer",
1919            Self::Float => "Float",
1920            Self::Geo => "Geo",
1921            Self::Text => "Text",
1922            Self::Bool => "Bool",
1923            Self::Datetime => "Datetime",
1924            Self::Uuid => "Uuid",
1925        }
1926    }
1927    /// Creates an enum from field names used in the ProtoBuf definition.
1928    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1929        match value {
1930            "UnknownType" => Some(Self::UnknownType),
1931            "Keyword" => Some(Self::Keyword),
1932            "Integer" => Some(Self::Integer),
1933            "Float" => Some(Self::Float),
1934            "Geo" => Some(Self::Geo),
1935            "Text" => Some(Self::Text),
1936            "Bool" => Some(Self::Bool),
1937            "Datetime" => Some(Self::Datetime),
1938            "Uuid" => Some(Self::Uuid),
1939            _ => None,
1940        }
1941    }
1942}
1943#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1944#[repr(i32)]
1945pub enum QuantizationType {
1946    UnknownQuantization = 0,
1947    Int8 = 1,
1948}
1949impl QuantizationType {
1950    /// String value of the enum field names used in the ProtoBuf definition.
1951    ///
1952    /// The values are not transformed in any way and thus are considered stable
1953    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1954    pub fn as_str_name(&self) -> &'static str {
1955        match self {
1956            Self::UnknownQuantization => "UnknownQuantization",
1957            Self::Int8 => "Int8",
1958        }
1959    }
1960    /// Creates an enum from field names used in the ProtoBuf definition.
1961    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1962        match value {
1963            "UnknownQuantization" => Some(Self::UnknownQuantization),
1964            "Int8" => Some(Self::Int8),
1965            _ => None,
1966        }
1967    }
1968}
1969#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1970#[repr(i32)]
1971pub enum CompressionRatio {
1972    X4 = 0,
1973    X8 = 1,
1974    X16 = 2,
1975    X32 = 3,
1976    X64 = 4,
1977}
1978impl CompressionRatio {
1979    /// String value of the enum field names used in the ProtoBuf definition.
1980    ///
1981    /// The values are not transformed in any way and thus are considered stable
1982    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1983    pub fn as_str_name(&self) -> &'static str {
1984        match self {
1985            Self::X4 => "x4",
1986            Self::X8 => "x8",
1987            Self::X16 => "x16",
1988            Self::X32 => "x32",
1989            Self::X64 => "x64",
1990        }
1991    }
1992    /// Creates an enum from field names used in the ProtoBuf definition.
1993    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1994        match value {
1995            "x4" => Some(Self::X4),
1996            "x8" => Some(Self::X8),
1997            "x16" => Some(Self::X16),
1998            "x32" => Some(Self::X32),
1999            "x64" => Some(Self::X64),
2000            _ => None,
2001        }
2002    }
2003}
2004#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2005#[repr(i32)]
2006pub enum BinaryQuantizationEncoding {
2007    OneBit = 0,
2008    TwoBits = 1,
2009    OneAndHalfBits = 2,
2010}
2011impl BinaryQuantizationEncoding {
2012    /// String value of the enum field names used in the ProtoBuf definition.
2013    ///
2014    /// The values are not transformed in any way and thus are considered stable
2015    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2016    pub fn as_str_name(&self) -> &'static str {
2017        match self {
2018            Self::OneBit => "OneBit",
2019            Self::TwoBits => "TwoBits",
2020            Self::OneAndHalfBits => "OneAndHalfBits",
2021        }
2022    }
2023    /// Creates an enum from field names used in the ProtoBuf definition.
2024    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2025        match value {
2026            "OneBit" => Some(Self::OneBit),
2027            "TwoBits" => Some(Self::TwoBits),
2028            "OneAndHalfBits" => Some(Self::OneAndHalfBits),
2029            _ => None,
2030        }
2031    }
2032}
2033#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2034#[repr(i32)]
2035pub enum TurboQuantBitSize {
2036    Bits1 = 0,
2037    /// 1.5 bit variant (not 15 bits)
2038    Bits15 = 1,
2039    Bits2 = 2,
2040    Bits4 = 3,
2041}
2042impl TurboQuantBitSize {
2043    /// String value of the enum field names used in the ProtoBuf definition.
2044    ///
2045    /// The values are not transformed in any way and thus are considered stable
2046    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2047    pub fn as_str_name(&self) -> &'static str {
2048        match self {
2049            Self::Bits1 => "Bits1",
2050            Self::Bits15 => "Bits1_5",
2051            Self::Bits2 => "Bits2",
2052            Self::Bits4 => "Bits4",
2053        }
2054    }
2055    /// Creates an enum from field names used in the ProtoBuf definition.
2056    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2057        match value {
2058            "Bits1" => Some(Self::Bits1),
2059            "Bits1_5" => Some(Self::Bits15),
2060            "Bits2" => Some(Self::Bits2),
2061            "Bits4" => Some(Self::Bits4),
2062            _ => None,
2063        }
2064    }
2065}
2066#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2067#[repr(i32)]
2068pub enum ShardingMethod {
2069    /// Auto-sharding based on record ids
2070    Auto = 0,
2071    /// Shard by user-defined key
2072    Custom = 1,
2073}
2074impl ShardingMethod {
2075    /// String value of the enum field names used in the ProtoBuf definition.
2076    ///
2077    /// The values are not transformed in any way and thus are considered stable
2078    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2079    pub fn as_str_name(&self) -> &'static str {
2080        match self {
2081            Self::Auto => "Auto",
2082            Self::Custom => "Custom",
2083        }
2084    }
2085    /// Creates an enum from field names used in the ProtoBuf definition.
2086    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2087        match value {
2088            "Auto" => Some(Self::Auto),
2089            "Custom" => Some(Self::Custom),
2090            _ => None,
2091        }
2092    }
2093}
2094#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2095#[repr(i32)]
2096pub enum TokenizerType {
2097    Unknown = 0,
2098    Prefix = 1,
2099    Whitespace = 2,
2100    Word = 3,
2101    Multilingual = 4,
2102}
2103impl TokenizerType {
2104    /// String value of the enum field names used in the ProtoBuf definition.
2105    ///
2106    /// The values are not transformed in any way and thus are considered stable
2107    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2108    pub fn as_str_name(&self) -> &'static str {
2109        match self {
2110            Self::Unknown => "Unknown",
2111            Self::Prefix => "Prefix",
2112            Self::Whitespace => "Whitespace",
2113            Self::Word => "Word",
2114            Self::Multilingual => "Multilingual",
2115        }
2116    }
2117    /// Creates an enum from field names used in the ProtoBuf definition.
2118    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2119        match value {
2120            "Unknown" => Some(Self::Unknown),
2121            "Prefix" => Some(Self::Prefix),
2122            "Whitespace" => Some(Self::Whitespace),
2123            "Word" => Some(Self::Word),
2124            "Multilingual" => Some(Self::Multilingual),
2125            _ => None,
2126        }
2127    }
2128}
2129#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2130#[repr(i32)]
2131pub enum ReplicaState {
2132    /// Active and sound
2133    Active = 0,
2134    /// Failed for some reason
2135    Dead = 1,
2136    /// The shard is partially loaded and is currently receiving data from other shards
2137    Partial = 2,
2138    /// Collection is being created
2139    Initializing = 3,
2140    /// A shard which receives data, but is not used for search.
2141    /// Useful for backup shards.
2142    Listener = 4,
2143    /// Deprecated: snapshot shard transfer is in progress.
2144    /// Updates should not be sent to (and are ignored by) the shard.
2145    PartialSnapshot = 5,
2146    /// Shard is undergoing recovery by an external node.
2147    /// Normally rejects updates, accepts updates if force is true.
2148    Recovery = 6,
2149    /// Points are being migrated to this shard as part of scale-up resharding
2150    Resharding = 7,
2151    /// Points are being migrated to this shard as part of scale-down resharding
2152    ReshardingScaleDown = 8,
2153    /// Active for readers, Partial for writers
2154    ActiveRead = 9,
2155    /// State for manually creation/recovery of a shard.
2156    /// Usually when snapshot is uploaded.
2157    /// This state is equivalent to `Partial`, except:
2158    /// - it can't receive updates
2159    /// - it is not treated as broken on startup
2160    ManualRecovery = 10,
2161}
2162impl ReplicaState {
2163    /// String value of the enum field names used in the ProtoBuf definition.
2164    ///
2165    /// The values are not transformed in any way and thus are considered stable
2166    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2167    pub fn as_str_name(&self) -> &'static str {
2168        match self {
2169            Self::Active => "Active",
2170            Self::Dead => "Dead",
2171            Self::Partial => "Partial",
2172            Self::Initializing => "Initializing",
2173            Self::Listener => "Listener",
2174            Self::PartialSnapshot => "PartialSnapshot",
2175            Self::Recovery => "Recovery",
2176            Self::Resharding => "Resharding",
2177            Self::ReshardingScaleDown => "ReshardingScaleDown",
2178            Self::ActiveRead => "ActiveRead",
2179            Self::ManualRecovery => "ManualRecovery",
2180        }
2181    }
2182    /// Creates an enum from field names used in the ProtoBuf definition.
2183    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2184        match value {
2185            "Active" => Some(Self::Active),
2186            "Dead" => Some(Self::Dead),
2187            "Partial" => Some(Self::Partial),
2188            "Initializing" => Some(Self::Initializing),
2189            "Listener" => Some(Self::Listener),
2190            "PartialSnapshot" => Some(Self::PartialSnapshot),
2191            "Recovery" => Some(Self::Recovery),
2192            "Resharding" => Some(Self::Resharding),
2193            "ReshardingScaleDown" => Some(Self::ReshardingScaleDown),
2194            "ActiveRead" => Some(Self::ActiveRead),
2195            "ManualRecovery" => Some(Self::ManualRecovery),
2196            _ => None,
2197        }
2198    }
2199}
2200/// Resharding direction, scale up or down in number of shards
2201#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2202#[repr(i32)]
2203pub enum ReshardingDirection {
2204    /// Scale up, add a new shard
2205    Up = 0,
2206    /// Scale down, remove a shard
2207    Down = 1,
2208}
2209impl ReshardingDirection {
2210    /// String value of the enum field names used in the ProtoBuf definition.
2211    ///
2212    /// The values are not transformed in any way and thus are considered stable
2213    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2214    pub fn as_str_name(&self) -> &'static str {
2215        match self {
2216            Self::Up => "Up",
2217            Self::Down => "Down",
2218        }
2219    }
2220    /// Creates an enum from field names used in the ProtoBuf definition.
2221    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2222        match value {
2223            "Up" => Some(Self::Up),
2224            "Down" => Some(Self::Down),
2225            _ => None,
2226        }
2227    }
2228}
2229#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2230#[repr(i32)]
2231pub enum ShardTransferMethod {
2232    /// Stream shard records in batches
2233    StreamRecords = 0,
2234    /// Snapshot the shard and recover it on the target peer
2235    Snapshot = 1,
2236    /// Resolve WAL delta between peers and transfer the difference
2237    WalDelta = 2,
2238    /// Stream shard records in batches for resharding
2239    ReshardingStreamRecords = 3,
2240}
2241impl ShardTransferMethod {
2242    /// String value of the enum field names used in the ProtoBuf definition.
2243    ///
2244    /// The values are not transformed in any way and thus are considered stable
2245    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2246    pub fn as_str_name(&self) -> &'static str {
2247        match self {
2248            Self::StreamRecords => "StreamRecords",
2249            Self::Snapshot => "Snapshot",
2250            Self::WalDelta => "WalDelta",
2251            Self::ReshardingStreamRecords => "ReshardingStreamRecords",
2252        }
2253    }
2254    /// Creates an enum from field names used in the ProtoBuf definition.
2255    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2256        match value {
2257            "StreamRecords" => Some(Self::StreamRecords),
2258            "Snapshot" => Some(Self::Snapshot),
2259            "WalDelta" => Some(Self::WalDelta),
2260            "ReshardingStreamRecords" => Some(Self::ReshardingStreamRecords),
2261            _ => None,
2262        }
2263    }
2264}
2265/// Generated client implementations.
2266pub mod collections_client {
2267    #![allow(
2268        unused_variables,
2269        dead_code,
2270        missing_docs,
2271        clippy::wildcard_imports,
2272        clippy::let_unit_value,
2273    )]
2274    use tonic::codegen::*;
2275    use tonic::codegen::http::Uri;
2276    #[derive(Debug, Clone)]
2277    pub struct CollectionsClient<T> {
2278        inner: tonic::client::Grpc<T>,
2279    }
2280    impl CollectionsClient<tonic::transport::Channel> {
2281        /// Attempt to create a new client by connecting to a given endpoint.
2282        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
2283        where
2284            D: TryInto<tonic::transport::Endpoint>,
2285            D::Error: Into<StdError>,
2286        {
2287            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
2288            Ok(Self::new(conn))
2289        }
2290    }
2291    impl<T> CollectionsClient<T>
2292    where
2293        T: tonic::client::GrpcService<tonic::body::BoxBody>,
2294        T::Error: Into<StdError>,
2295        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
2296        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
2297    {
2298        pub fn new(inner: T) -> Self {
2299            let inner = tonic::client::Grpc::new(inner);
2300            Self { inner }
2301        }
2302        pub fn with_origin(inner: T, origin: Uri) -> Self {
2303            let inner = tonic::client::Grpc::with_origin(inner, origin);
2304            Self { inner }
2305        }
2306        pub fn with_interceptor<F>(
2307            inner: T,
2308            interceptor: F,
2309        ) -> CollectionsClient<InterceptedService<T, F>>
2310        where
2311            F: tonic::service::Interceptor,
2312            T::ResponseBody: Default,
2313            T: tonic::codegen::Service<
2314                http::Request<tonic::body::BoxBody>,
2315                Response = http::Response<
2316                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
2317                >,
2318            >,
2319            <T as tonic::codegen::Service<
2320                http::Request<tonic::body::BoxBody>,
2321            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
2322        {
2323            CollectionsClient::new(InterceptedService::new(inner, interceptor))
2324        }
2325        /// Compress requests with the given encoding.
2326        ///
2327        /// This requires the server to support it otherwise it might respond with an
2328        /// error.
2329        #[must_use]
2330        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2331            self.inner = self.inner.send_compressed(encoding);
2332            self
2333        }
2334        /// Enable decompressing responses.
2335        #[must_use]
2336        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2337            self.inner = self.inner.accept_compressed(encoding);
2338            self
2339        }
2340        /// Limits the maximum size of a decoded message.
2341        ///
2342        /// Default: `4MB`
2343        #[must_use]
2344        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2345            self.inner = self.inner.max_decoding_message_size(limit);
2346            self
2347        }
2348        /// Limits the maximum size of an encoded message.
2349        ///
2350        /// Default: `usize::MAX`
2351        #[must_use]
2352        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2353            self.inner = self.inner.max_encoding_message_size(limit);
2354            self
2355        }
2356        /// Get detailed information about specified existing collection
2357        pub async fn get(
2358            &mut self,
2359            request: impl tonic::IntoRequest<super::GetCollectionInfoRequest>,
2360        ) -> std::result::Result<
2361            tonic::Response<super::GetCollectionInfoResponse>,
2362            tonic::Status,
2363        > {
2364            self.inner
2365                .ready()
2366                .await
2367                .map_err(|e| {
2368                    tonic::Status::unknown(
2369                        format!("Service was not ready: {}", e.into()),
2370                    )
2371                })?;
2372            let codec = tonic::codec::ProstCodec::default();
2373            let path = http::uri::PathAndQuery::from_static("/qdrant.Collections/Get");
2374            let mut req = request.into_request();
2375            req.extensions_mut().insert(GrpcMethod::new("qdrant.Collections", "Get"));
2376            self.inner.unary(req, path, codec).await
2377        }
2378        /// Get list of names of all existing collections
2379        pub async fn list(
2380            &mut self,
2381            request: impl tonic::IntoRequest<super::ListCollectionsRequest>,
2382        ) -> std::result::Result<
2383            tonic::Response<super::ListCollectionsResponse>,
2384            tonic::Status,
2385        > {
2386            self.inner
2387                .ready()
2388                .await
2389                .map_err(|e| {
2390                    tonic::Status::unknown(
2391                        format!("Service was not ready: {}", e.into()),
2392                    )
2393                })?;
2394            let codec = tonic::codec::ProstCodec::default();
2395            let path = http::uri::PathAndQuery::from_static("/qdrant.Collections/List");
2396            let mut req = request.into_request();
2397            req.extensions_mut().insert(GrpcMethod::new("qdrant.Collections", "List"));
2398            self.inner.unary(req, path, codec).await
2399        }
2400        /// Create new collection with given parameters
2401        pub async fn create(
2402            &mut self,
2403            request: impl tonic::IntoRequest<super::CreateCollection>,
2404        ) -> std::result::Result<
2405            tonic::Response<super::CollectionOperationResponse>,
2406            tonic::Status,
2407        > {
2408            self.inner
2409                .ready()
2410                .await
2411                .map_err(|e| {
2412                    tonic::Status::unknown(
2413                        format!("Service was not ready: {}", e.into()),
2414                    )
2415                })?;
2416            let codec = tonic::codec::ProstCodec::default();
2417            let path = http::uri::PathAndQuery::from_static(
2418                "/qdrant.Collections/Create",
2419            );
2420            let mut req = request.into_request();
2421            req.extensions_mut().insert(GrpcMethod::new("qdrant.Collections", "Create"));
2422            self.inner.unary(req, path, codec).await
2423        }
2424        /// Update parameters of the existing collection
2425        pub async fn update(
2426            &mut self,
2427            request: impl tonic::IntoRequest<super::UpdateCollection>,
2428        ) -> std::result::Result<
2429            tonic::Response<super::CollectionOperationResponse>,
2430            tonic::Status,
2431        > {
2432            self.inner
2433                .ready()
2434                .await
2435                .map_err(|e| {
2436                    tonic::Status::unknown(
2437                        format!("Service was not ready: {}", e.into()),
2438                    )
2439                })?;
2440            let codec = tonic::codec::ProstCodec::default();
2441            let path = http::uri::PathAndQuery::from_static(
2442                "/qdrant.Collections/Update",
2443            );
2444            let mut req = request.into_request();
2445            req.extensions_mut().insert(GrpcMethod::new("qdrant.Collections", "Update"));
2446            self.inner.unary(req, path, codec).await
2447        }
2448        /// Drop collection and all associated data
2449        pub async fn delete(
2450            &mut self,
2451            request: impl tonic::IntoRequest<super::DeleteCollection>,
2452        ) -> std::result::Result<
2453            tonic::Response<super::CollectionOperationResponse>,
2454            tonic::Status,
2455        > {
2456            self.inner
2457                .ready()
2458                .await
2459                .map_err(|e| {
2460                    tonic::Status::unknown(
2461                        format!("Service was not ready: {}", e.into()),
2462                    )
2463                })?;
2464            let codec = tonic::codec::ProstCodec::default();
2465            let path = http::uri::PathAndQuery::from_static(
2466                "/qdrant.Collections/Delete",
2467            );
2468            let mut req = request.into_request();
2469            req.extensions_mut().insert(GrpcMethod::new("qdrant.Collections", "Delete"));
2470            self.inner.unary(req, path, codec).await
2471        }
2472        /// Update Aliases of the existing collection
2473        pub async fn update_aliases(
2474            &mut self,
2475            request: impl tonic::IntoRequest<super::ChangeAliases>,
2476        ) -> std::result::Result<
2477            tonic::Response<super::CollectionOperationResponse>,
2478            tonic::Status,
2479        > {
2480            self.inner
2481                .ready()
2482                .await
2483                .map_err(|e| {
2484                    tonic::Status::unknown(
2485                        format!("Service was not ready: {}", e.into()),
2486                    )
2487                })?;
2488            let codec = tonic::codec::ProstCodec::default();
2489            let path = http::uri::PathAndQuery::from_static(
2490                "/qdrant.Collections/UpdateAliases",
2491            );
2492            let mut req = request.into_request();
2493            req.extensions_mut()
2494                .insert(GrpcMethod::new("qdrant.Collections", "UpdateAliases"));
2495            self.inner.unary(req, path, codec).await
2496        }
2497        /// Get list of all aliases for a collection
2498        pub async fn list_collection_aliases(
2499            &mut self,
2500            request: impl tonic::IntoRequest<super::ListCollectionAliasesRequest>,
2501        ) -> std::result::Result<
2502            tonic::Response<super::ListAliasesResponse>,
2503            tonic::Status,
2504        > {
2505            self.inner
2506                .ready()
2507                .await
2508                .map_err(|e| {
2509                    tonic::Status::unknown(
2510                        format!("Service was not ready: {}", e.into()),
2511                    )
2512                })?;
2513            let codec = tonic::codec::ProstCodec::default();
2514            let path = http::uri::PathAndQuery::from_static(
2515                "/qdrant.Collections/ListCollectionAliases",
2516            );
2517            let mut req = request.into_request();
2518            req.extensions_mut()
2519                .insert(GrpcMethod::new("qdrant.Collections", "ListCollectionAliases"));
2520            self.inner.unary(req, path, codec).await
2521        }
2522        /// Get list of all aliases for all existing collections
2523        pub async fn list_aliases(
2524            &mut self,
2525            request: impl tonic::IntoRequest<super::ListAliasesRequest>,
2526        ) -> std::result::Result<
2527            tonic::Response<super::ListAliasesResponse>,
2528            tonic::Status,
2529        > {
2530            self.inner
2531                .ready()
2532                .await
2533                .map_err(|e| {
2534                    tonic::Status::unknown(
2535                        format!("Service was not ready: {}", e.into()),
2536                    )
2537                })?;
2538            let codec = tonic::codec::ProstCodec::default();
2539            let path = http::uri::PathAndQuery::from_static(
2540                "/qdrant.Collections/ListAliases",
2541            );
2542            let mut req = request.into_request();
2543            req.extensions_mut()
2544                .insert(GrpcMethod::new("qdrant.Collections", "ListAliases"));
2545            self.inner.unary(req, path, codec).await
2546        }
2547        /// Get cluster information for a collection
2548        pub async fn collection_cluster_info(
2549            &mut self,
2550            request: impl tonic::IntoRequest<super::CollectionClusterInfoRequest>,
2551        ) -> std::result::Result<
2552            tonic::Response<super::CollectionClusterInfoResponse>,
2553            tonic::Status,
2554        > {
2555            self.inner
2556                .ready()
2557                .await
2558                .map_err(|e| {
2559                    tonic::Status::unknown(
2560                        format!("Service was not ready: {}", e.into()),
2561                    )
2562                })?;
2563            let codec = tonic::codec::ProstCodec::default();
2564            let path = http::uri::PathAndQuery::from_static(
2565                "/qdrant.Collections/CollectionClusterInfo",
2566            );
2567            let mut req = request.into_request();
2568            req.extensions_mut()
2569                .insert(GrpcMethod::new("qdrant.Collections", "CollectionClusterInfo"));
2570            self.inner.unary(req, path, codec).await
2571        }
2572        /// Check the existence of a collection
2573        pub async fn collection_exists(
2574            &mut self,
2575            request: impl tonic::IntoRequest<super::CollectionExistsRequest>,
2576        ) -> std::result::Result<
2577            tonic::Response<super::CollectionExistsResponse>,
2578            tonic::Status,
2579        > {
2580            self.inner
2581                .ready()
2582                .await
2583                .map_err(|e| {
2584                    tonic::Status::unknown(
2585                        format!("Service was not ready: {}", e.into()),
2586                    )
2587                })?;
2588            let codec = tonic::codec::ProstCodec::default();
2589            let path = http::uri::PathAndQuery::from_static(
2590                "/qdrant.Collections/CollectionExists",
2591            );
2592            let mut req = request.into_request();
2593            req.extensions_mut()
2594                .insert(GrpcMethod::new("qdrant.Collections", "CollectionExists"));
2595            self.inner.unary(req, path, codec).await
2596        }
2597        /// Update cluster setup for a collection
2598        pub async fn update_collection_cluster_setup(
2599            &mut self,
2600            request: impl tonic::IntoRequest<super::UpdateCollectionClusterSetupRequest>,
2601        ) -> std::result::Result<
2602            tonic::Response<super::UpdateCollectionClusterSetupResponse>,
2603            tonic::Status,
2604        > {
2605            self.inner
2606                .ready()
2607                .await
2608                .map_err(|e| {
2609                    tonic::Status::unknown(
2610                        format!("Service was not ready: {}", e.into()),
2611                    )
2612                })?;
2613            let codec = tonic::codec::ProstCodec::default();
2614            let path = http::uri::PathAndQuery::from_static(
2615                "/qdrant.Collections/UpdateCollectionClusterSetup",
2616            );
2617            let mut req = request.into_request();
2618            req.extensions_mut()
2619                .insert(
2620                    GrpcMethod::new("qdrant.Collections", "UpdateCollectionClusterSetup"),
2621                );
2622            self.inner.unary(req, path, codec).await
2623        }
2624        /// Create shard key
2625        pub async fn create_shard_key(
2626            &mut self,
2627            request: impl tonic::IntoRequest<super::CreateShardKeyRequest>,
2628        ) -> std::result::Result<
2629            tonic::Response<super::CreateShardKeyResponse>,
2630            tonic::Status,
2631        > {
2632            self.inner
2633                .ready()
2634                .await
2635                .map_err(|e| {
2636                    tonic::Status::unknown(
2637                        format!("Service was not ready: {}", e.into()),
2638                    )
2639                })?;
2640            let codec = tonic::codec::ProstCodec::default();
2641            let path = http::uri::PathAndQuery::from_static(
2642                "/qdrant.Collections/CreateShardKey",
2643            );
2644            let mut req = request.into_request();
2645            req.extensions_mut()
2646                .insert(GrpcMethod::new("qdrant.Collections", "CreateShardKey"));
2647            self.inner.unary(req, path, codec).await
2648        }
2649        /// Delete shard key
2650        pub async fn delete_shard_key(
2651            &mut self,
2652            request: impl tonic::IntoRequest<super::DeleteShardKeyRequest>,
2653        ) -> std::result::Result<
2654            tonic::Response<super::DeleteShardKeyResponse>,
2655            tonic::Status,
2656        > {
2657            self.inner
2658                .ready()
2659                .await
2660                .map_err(|e| {
2661                    tonic::Status::unknown(
2662                        format!("Service was not ready: {}", e.into()),
2663                    )
2664                })?;
2665            let codec = tonic::codec::ProstCodec::default();
2666            let path = http::uri::PathAndQuery::from_static(
2667                "/qdrant.Collections/DeleteShardKey",
2668            );
2669            let mut req = request.into_request();
2670            req.extensions_mut()
2671                .insert(GrpcMethod::new("qdrant.Collections", "DeleteShardKey"));
2672            self.inner.unary(req, path, codec).await
2673        }
2674        /// List shard keys
2675        pub async fn list_shard_keys(
2676            &mut self,
2677            request: impl tonic::IntoRequest<super::ListShardKeysRequest>,
2678        ) -> std::result::Result<
2679            tonic::Response<super::ListShardKeysResponse>,
2680            tonic::Status,
2681        > {
2682            self.inner
2683                .ready()
2684                .await
2685                .map_err(|e| {
2686                    tonic::Status::unknown(
2687                        format!("Service was not ready: {}", e.into()),
2688                    )
2689                })?;
2690            let codec = tonic::codec::ProstCodec::default();
2691            let path = http::uri::PathAndQuery::from_static(
2692                "/qdrant.Collections/ListShardKeys",
2693            );
2694            let mut req = request.into_request();
2695            req.extensions_mut()
2696                .insert(GrpcMethod::new("qdrant.Collections", "ListShardKeys"));
2697            self.inner.unary(req, path, codec).await
2698        }
2699    }
2700}
2701/// Generated server implementations.
2702pub mod collections_server {
2703    #![allow(
2704        unused_variables,
2705        dead_code,
2706        missing_docs,
2707        clippy::wildcard_imports,
2708        clippy::let_unit_value,
2709    )]
2710    use tonic::codegen::*;
2711    /// Generated trait containing gRPC methods that should be implemented for use with CollectionsServer.
2712    #[async_trait]
2713    pub trait Collections: std::marker::Send + std::marker::Sync + 'static {
2714        /// Get detailed information about specified existing collection
2715        async fn get(
2716            &self,
2717            request: tonic::Request<super::GetCollectionInfoRequest>,
2718        ) -> std::result::Result<
2719            tonic::Response<super::GetCollectionInfoResponse>,
2720            tonic::Status,
2721        >;
2722        /// Get list of names of all existing collections
2723        async fn list(
2724            &self,
2725            request: tonic::Request<super::ListCollectionsRequest>,
2726        ) -> std::result::Result<
2727            tonic::Response<super::ListCollectionsResponse>,
2728            tonic::Status,
2729        >;
2730        /// Create new collection with given parameters
2731        async fn create(
2732            &self,
2733            request: tonic::Request<super::CreateCollection>,
2734        ) -> std::result::Result<
2735            tonic::Response<super::CollectionOperationResponse>,
2736            tonic::Status,
2737        >;
2738        /// Update parameters of the existing collection
2739        async fn update(
2740            &self,
2741            request: tonic::Request<super::UpdateCollection>,
2742        ) -> std::result::Result<
2743            tonic::Response<super::CollectionOperationResponse>,
2744            tonic::Status,
2745        >;
2746        /// Drop collection and all associated data
2747        async fn delete(
2748            &self,
2749            request: tonic::Request<super::DeleteCollection>,
2750        ) -> std::result::Result<
2751            tonic::Response<super::CollectionOperationResponse>,
2752            tonic::Status,
2753        >;
2754        /// Update Aliases of the existing collection
2755        async fn update_aliases(
2756            &self,
2757            request: tonic::Request<super::ChangeAliases>,
2758        ) -> std::result::Result<
2759            tonic::Response<super::CollectionOperationResponse>,
2760            tonic::Status,
2761        >;
2762        /// Get list of all aliases for a collection
2763        async fn list_collection_aliases(
2764            &self,
2765            request: tonic::Request<super::ListCollectionAliasesRequest>,
2766        ) -> std::result::Result<
2767            tonic::Response<super::ListAliasesResponse>,
2768            tonic::Status,
2769        >;
2770        /// Get list of all aliases for all existing collections
2771        async fn list_aliases(
2772            &self,
2773            request: tonic::Request<super::ListAliasesRequest>,
2774        ) -> std::result::Result<
2775            tonic::Response<super::ListAliasesResponse>,
2776            tonic::Status,
2777        >;
2778        /// Get cluster information for a collection
2779        async fn collection_cluster_info(
2780            &self,
2781            request: tonic::Request<super::CollectionClusterInfoRequest>,
2782        ) -> std::result::Result<
2783            tonic::Response<super::CollectionClusterInfoResponse>,
2784            tonic::Status,
2785        >;
2786        /// Check the existence of a collection
2787        async fn collection_exists(
2788            &self,
2789            request: tonic::Request<super::CollectionExistsRequest>,
2790        ) -> std::result::Result<
2791            tonic::Response<super::CollectionExistsResponse>,
2792            tonic::Status,
2793        >;
2794        /// Update cluster setup for a collection
2795        async fn update_collection_cluster_setup(
2796            &self,
2797            request: tonic::Request<super::UpdateCollectionClusterSetupRequest>,
2798        ) -> std::result::Result<
2799            tonic::Response<super::UpdateCollectionClusterSetupResponse>,
2800            tonic::Status,
2801        >;
2802        /// Create shard key
2803        async fn create_shard_key(
2804            &self,
2805            request: tonic::Request<super::CreateShardKeyRequest>,
2806        ) -> std::result::Result<
2807            tonic::Response<super::CreateShardKeyResponse>,
2808            tonic::Status,
2809        >;
2810        /// Delete shard key
2811        async fn delete_shard_key(
2812            &self,
2813            request: tonic::Request<super::DeleteShardKeyRequest>,
2814        ) -> std::result::Result<
2815            tonic::Response<super::DeleteShardKeyResponse>,
2816            tonic::Status,
2817        >;
2818        /// List shard keys
2819        async fn list_shard_keys(
2820            &self,
2821            request: tonic::Request<super::ListShardKeysRequest>,
2822        ) -> std::result::Result<
2823            tonic::Response<super::ListShardKeysResponse>,
2824            tonic::Status,
2825        >;
2826    }
2827    #[derive(Debug)]
2828    pub struct CollectionsServer<T> {
2829        inner: Arc<T>,
2830        accept_compression_encodings: EnabledCompressionEncodings,
2831        send_compression_encodings: EnabledCompressionEncodings,
2832        max_decoding_message_size: Option<usize>,
2833        max_encoding_message_size: Option<usize>,
2834    }
2835    impl<T> CollectionsServer<T> {
2836        pub fn new(inner: T) -> Self {
2837            Self::from_arc(Arc::new(inner))
2838        }
2839        pub fn from_arc(inner: Arc<T>) -> Self {
2840            Self {
2841                inner,
2842                accept_compression_encodings: Default::default(),
2843                send_compression_encodings: Default::default(),
2844                max_decoding_message_size: None,
2845                max_encoding_message_size: None,
2846            }
2847        }
2848        pub fn with_interceptor<F>(
2849            inner: T,
2850            interceptor: F,
2851        ) -> InterceptedService<Self, F>
2852        where
2853            F: tonic::service::Interceptor,
2854        {
2855            InterceptedService::new(Self::new(inner), interceptor)
2856        }
2857        /// Enable decompressing requests with the given encoding.
2858        #[must_use]
2859        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2860            self.accept_compression_encodings.enable(encoding);
2861            self
2862        }
2863        /// Compress responses with the given encoding, if the client supports it.
2864        #[must_use]
2865        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2866            self.send_compression_encodings.enable(encoding);
2867            self
2868        }
2869        /// Limits the maximum size of a decoded message.
2870        ///
2871        /// Default: `4MB`
2872        #[must_use]
2873        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2874            self.max_decoding_message_size = Some(limit);
2875            self
2876        }
2877        /// Limits the maximum size of an encoded message.
2878        ///
2879        /// Default: `usize::MAX`
2880        #[must_use]
2881        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2882            self.max_encoding_message_size = Some(limit);
2883            self
2884        }
2885    }
2886    impl<T, B> tonic::codegen::Service<http::Request<B>> for CollectionsServer<T>
2887    where
2888        T: Collections,
2889        B: Body + std::marker::Send + 'static,
2890        B::Error: Into<StdError> + std::marker::Send + 'static,
2891    {
2892        type Response = http::Response<tonic::body::BoxBody>;
2893        type Error = std::convert::Infallible;
2894        type Future = BoxFuture<Self::Response, Self::Error>;
2895        fn poll_ready(
2896            &mut self,
2897            _cx: &mut Context<'_>,
2898        ) -> Poll<std::result::Result<(), Self::Error>> {
2899            Poll::Ready(Ok(()))
2900        }
2901        fn call(&mut self, req: http::Request<B>) -> Self::Future {
2902            match req.uri().path() {
2903                "/qdrant.Collections/Get" => {
2904                    #[allow(non_camel_case_types)]
2905                    struct GetSvc<T: Collections>(pub Arc<T>);
2906                    impl<
2907                        T: Collections,
2908                    > tonic::server::UnaryService<super::GetCollectionInfoRequest>
2909                    for GetSvc<T> {
2910                        type Response = super::GetCollectionInfoResponse;
2911                        type Future = BoxFuture<
2912                            tonic::Response<Self::Response>,
2913                            tonic::Status,
2914                        >;
2915                        fn call(
2916                            &mut self,
2917                            request: tonic::Request<super::GetCollectionInfoRequest>,
2918                        ) -> Self::Future {
2919                            let inner = Arc::clone(&self.0);
2920                            let fut = async move {
2921                                <T as Collections>::get(&inner, request).await
2922                            };
2923                            Box::pin(fut)
2924                        }
2925                    }
2926                    let accept_compression_encodings = self.accept_compression_encodings;
2927                    let send_compression_encodings = self.send_compression_encodings;
2928                    let max_decoding_message_size = self.max_decoding_message_size;
2929                    let max_encoding_message_size = self.max_encoding_message_size;
2930                    let inner = self.inner.clone();
2931                    let fut = async move {
2932                        let method = GetSvc(inner);
2933                        let codec = tonic::codec::ProstCodec::default();
2934                        let mut grpc = tonic::server::Grpc::new(codec)
2935                            .apply_compression_config(
2936                                accept_compression_encodings,
2937                                send_compression_encodings,
2938                            )
2939                            .apply_max_message_size_config(
2940                                max_decoding_message_size,
2941                                max_encoding_message_size,
2942                            );
2943                        let res = grpc.unary(method, req).await;
2944                        Ok(res)
2945                    };
2946                    Box::pin(fut)
2947                }
2948                "/qdrant.Collections/List" => {
2949                    #[allow(non_camel_case_types)]
2950                    struct ListSvc<T: Collections>(pub Arc<T>);
2951                    impl<
2952                        T: Collections,
2953                    > tonic::server::UnaryService<super::ListCollectionsRequest>
2954                    for ListSvc<T> {
2955                        type Response = super::ListCollectionsResponse;
2956                        type Future = BoxFuture<
2957                            tonic::Response<Self::Response>,
2958                            tonic::Status,
2959                        >;
2960                        fn call(
2961                            &mut self,
2962                            request: tonic::Request<super::ListCollectionsRequest>,
2963                        ) -> Self::Future {
2964                            let inner = Arc::clone(&self.0);
2965                            let fut = async move {
2966                                <T as Collections>::list(&inner, request).await
2967                            };
2968                            Box::pin(fut)
2969                        }
2970                    }
2971                    let accept_compression_encodings = self.accept_compression_encodings;
2972                    let send_compression_encodings = self.send_compression_encodings;
2973                    let max_decoding_message_size = self.max_decoding_message_size;
2974                    let max_encoding_message_size = self.max_encoding_message_size;
2975                    let inner = self.inner.clone();
2976                    let fut = async move {
2977                        let method = ListSvc(inner);
2978                        let codec = tonic::codec::ProstCodec::default();
2979                        let mut grpc = tonic::server::Grpc::new(codec)
2980                            .apply_compression_config(
2981                                accept_compression_encodings,
2982                                send_compression_encodings,
2983                            )
2984                            .apply_max_message_size_config(
2985                                max_decoding_message_size,
2986                                max_encoding_message_size,
2987                            );
2988                        let res = grpc.unary(method, req).await;
2989                        Ok(res)
2990                    };
2991                    Box::pin(fut)
2992                }
2993                "/qdrant.Collections/Create" => {
2994                    #[allow(non_camel_case_types)]
2995                    struct CreateSvc<T: Collections>(pub Arc<T>);
2996                    impl<
2997                        T: Collections,
2998                    > tonic::server::UnaryService<super::CreateCollection>
2999                    for CreateSvc<T> {
3000                        type Response = super::CollectionOperationResponse;
3001                        type Future = BoxFuture<
3002                            tonic::Response<Self::Response>,
3003                            tonic::Status,
3004                        >;
3005                        fn call(
3006                            &mut self,
3007                            request: tonic::Request<super::CreateCollection>,
3008                        ) -> Self::Future {
3009                            let inner = Arc::clone(&self.0);
3010                            let fut = async move {
3011                                <T as Collections>::create(&inner, request).await
3012                            };
3013                            Box::pin(fut)
3014                        }
3015                    }
3016                    let accept_compression_encodings = self.accept_compression_encodings;
3017                    let send_compression_encodings = self.send_compression_encodings;
3018                    let max_decoding_message_size = self.max_decoding_message_size;
3019                    let max_encoding_message_size = self.max_encoding_message_size;
3020                    let inner = self.inner.clone();
3021                    let fut = async move {
3022                        let method = CreateSvc(inner);
3023                        let codec = tonic::codec::ProstCodec::default();
3024                        let mut grpc = tonic::server::Grpc::new(codec)
3025                            .apply_compression_config(
3026                                accept_compression_encodings,
3027                                send_compression_encodings,
3028                            )
3029                            .apply_max_message_size_config(
3030                                max_decoding_message_size,
3031                                max_encoding_message_size,
3032                            );
3033                        let res = grpc.unary(method, req).await;
3034                        Ok(res)
3035                    };
3036                    Box::pin(fut)
3037                }
3038                "/qdrant.Collections/Update" => {
3039                    #[allow(non_camel_case_types)]
3040                    struct UpdateSvc<T: Collections>(pub Arc<T>);
3041                    impl<
3042                        T: Collections,
3043                    > tonic::server::UnaryService<super::UpdateCollection>
3044                    for UpdateSvc<T> {
3045                        type Response = super::CollectionOperationResponse;
3046                        type Future = BoxFuture<
3047                            tonic::Response<Self::Response>,
3048                            tonic::Status,
3049                        >;
3050                        fn call(
3051                            &mut self,
3052                            request: tonic::Request<super::UpdateCollection>,
3053                        ) -> Self::Future {
3054                            let inner = Arc::clone(&self.0);
3055                            let fut = async move {
3056                                <T as Collections>::update(&inner, request).await
3057                            };
3058                            Box::pin(fut)
3059                        }
3060                    }
3061                    let accept_compression_encodings = self.accept_compression_encodings;
3062                    let send_compression_encodings = self.send_compression_encodings;
3063                    let max_decoding_message_size = self.max_decoding_message_size;
3064                    let max_encoding_message_size = self.max_encoding_message_size;
3065                    let inner = self.inner.clone();
3066                    let fut = async move {
3067                        let method = UpdateSvc(inner);
3068                        let codec = tonic::codec::ProstCodec::default();
3069                        let mut grpc = tonic::server::Grpc::new(codec)
3070                            .apply_compression_config(
3071                                accept_compression_encodings,
3072                                send_compression_encodings,
3073                            )
3074                            .apply_max_message_size_config(
3075                                max_decoding_message_size,
3076                                max_encoding_message_size,
3077                            );
3078                        let res = grpc.unary(method, req).await;
3079                        Ok(res)
3080                    };
3081                    Box::pin(fut)
3082                }
3083                "/qdrant.Collections/Delete" => {
3084                    #[allow(non_camel_case_types)]
3085                    struct DeleteSvc<T: Collections>(pub Arc<T>);
3086                    impl<
3087                        T: Collections,
3088                    > tonic::server::UnaryService<super::DeleteCollection>
3089                    for DeleteSvc<T> {
3090                        type Response = super::CollectionOperationResponse;
3091                        type Future = BoxFuture<
3092                            tonic::Response<Self::Response>,
3093                            tonic::Status,
3094                        >;
3095                        fn call(
3096                            &mut self,
3097                            request: tonic::Request<super::DeleteCollection>,
3098                        ) -> Self::Future {
3099                            let inner = Arc::clone(&self.0);
3100                            let fut = async move {
3101                                <T as Collections>::delete(&inner, request).await
3102                            };
3103                            Box::pin(fut)
3104                        }
3105                    }
3106                    let accept_compression_encodings = self.accept_compression_encodings;
3107                    let send_compression_encodings = self.send_compression_encodings;
3108                    let max_decoding_message_size = self.max_decoding_message_size;
3109                    let max_encoding_message_size = self.max_encoding_message_size;
3110                    let inner = self.inner.clone();
3111                    let fut = async move {
3112                        let method = DeleteSvc(inner);
3113                        let codec = tonic::codec::ProstCodec::default();
3114                        let mut grpc = tonic::server::Grpc::new(codec)
3115                            .apply_compression_config(
3116                                accept_compression_encodings,
3117                                send_compression_encodings,
3118                            )
3119                            .apply_max_message_size_config(
3120                                max_decoding_message_size,
3121                                max_encoding_message_size,
3122                            );
3123                        let res = grpc.unary(method, req).await;
3124                        Ok(res)
3125                    };
3126                    Box::pin(fut)
3127                }
3128                "/qdrant.Collections/UpdateAliases" => {
3129                    #[allow(non_camel_case_types)]
3130                    struct UpdateAliasesSvc<T: Collections>(pub Arc<T>);
3131                    impl<
3132                        T: Collections,
3133                    > tonic::server::UnaryService<super::ChangeAliases>
3134                    for UpdateAliasesSvc<T> {
3135                        type Response = super::CollectionOperationResponse;
3136                        type Future = BoxFuture<
3137                            tonic::Response<Self::Response>,
3138                            tonic::Status,
3139                        >;
3140                        fn call(
3141                            &mut self,
3142                            request: tonic::Request<super::ChangeAliases>,
3143                        ) -> Self::Future {
3144                            let inner = Arc::clone(&self.0);
3145                            let fut = async move {
3146                                <T as Collections>::update_aliases(&inner, request).await
3147                            };
3148                            Box::pin(fut)
3149                        }
3150                    }
3151                    let accept_compression_encodings = self.accept_compression_encodings;
3152                    let send_compression_encodings = self.send_compression_encodings;
3153                    let max_decoding_message_size = self.max_decoding_message_size;
3154                    let max_encoding_message_size = self.max_encoding_message_size;
3155                    let inner = self.inner.clone();
3156                    let fut = async move {
3157                        let method = UpdateAliasesSvc(inner);
3158                        let codec = tonic::codec::ProstCodec::default();
3159                        let mut grpc = tonic::server::Grpc::new(codec)
3160                            .apply_compression_config(
3161                                accept_compression_encodings,
3162                                send_compression_encodings,
3163                            )
3164                            .apply_max_message_size_config(
3165                                max_decoding_message_size,
3166                                max_encoding_message_size,
3167                            );
3168                        let res = grpc.unary(method, req).await;
3169                        Ok(res)
3170                    };
3171                    Box::pin(fut)
3172                }
3173                "/qdrant.Collections/ListCollectionAliases" => {
3174                    #[allow(non_camel_case_types)]
3175                    struct ListCollectionAliasesSvc<T: Collections>(pub Arc<T>);
3176                    impl<
3177                        T: Collections,
3178                    > tonic::server::UnaryService<super::ListCollectionAliasesRequest>
3179                    for ListCollectionAliasesSvc<T> {
3180                        type Response = super::ListAliasesResponse;
3181                        type Future = BoxFuture<
3182                            tonic::Response<Self::Response>,
3183                            tonic::Status,
3184                        >;
3185                        fn call(
3186                            &mut self,
3187                            request: tonic::Request<super::ListCollectionAliasesRequest>,
3188                        ) -> Self::Future {
3189                            let inner = Arc::clone(&self.0);
3190                            let fut = async move {
3191                                <T as Collections>::list_collection_aliases(&inner, request)
3192                                    .await
3193                            };
3194                            Box::pin(fut)
3195                        }
3196                    }
3197                    let accept_compression_encodings = self.accept_compression_encodings;
3198                    let send_compression_encodings = self.send_compression_encodings;
3199                    let max_decoding_message_size = self.max_decoding_message_size;
3200                    let max_encoding_message_size = self.max_encoding_message_size;
3201                    let inner = self.inner.clone();
3202                    let fut = async move {
3203                        let method = ListCollectionAliasesSvc(inner);
3204                        let codec = tonic::codec::ProstCodec::default();
3205                        let mut grpc = tonic::server::Grpc::new(codec)
3206                            .apply_compression_config(
3207                                accept_compression_encodings,
3208                                send_compression_encodings,
3209                            )
3210                            .apply_max_message_size_config(
3211                                max_decoding_message_size,
3212                                max_encoding_message_size,
3213                            );
3214                        let res = grpc.unary(method, req).await;
3215                        Ok(res)
3216                    };
3217                    Box::pin(fut)
3218                }
3219                "/qdrant.Collections/ListAliases" => {
3220                    #[allow(non_camel_case_types)]
3221                    struct ListAliasesSvc<T: Collections>(pub Arc<T>);
3222                    impl<
3223                        T: Collections,
3224                    > tonic::server::UnaryService<super::ListAliasesRequest>
3225                    for ListAliasesSvc<T> {
3226                        type Response = super::ListAliasesResponse;
3227                        type Future = BoxFuture<
3228                            tonic::Response<Self::Response>,
3229                            tonic::Status,
3230                        >;
3231                        fn call(
3232                            &mut self,
3233                            request: tonic::Request<super::ListAliasesRequest>,
3234                        ) -> Self::Future {
3235                            let inner = Arc::clone(&self.0);
3236                            let fut = async move {
3237                                <T as Collections>::list_aliases(&inner, request).await
3238                            };
3239                            Box::pin(fut)
3240                        }
3241                    }
3242                    let accept_compression_encodings = self.accept_compression_encodings;
3243                    let send_compression_encodings = self.send_compression_encodings;
3244                    let max_decoding_message_size = self.max_decoding_message_size;
3245                    let max_encoding_message_size = self.max_encoding_message_size;
3246                    let inner = self.inner.clone();
3247                    let fut = async move {
3248                        let method = ListAliasesSvc(inner);
3249                        let codec = tonic::codec::ProstCodec::default();
3250                        let mut grpc = tonic::server::Grpc::new(codec)
3251                            .apply_compression_config(
3252                                accept_compression_encodings,
3253                                send_compression_encodings,
3254                            )
3255                            .apply_max_message_size_config(
3256                                max_decoding_message_size,
3257                                max_encoding_message_size,
3258                            );
3259                        let res = grpc.unary(method, req).await;
3260                        Ok(res)
3261                    };
3262                    Box::pin(fut)
3263                }
3264                "/qdrant.Collections/CollectionClusterInfo" => {
3265                    #[allow(non_camel_case_types)]
3266                    struct CollectionClusterInfoSvc<T: Collections>(pub Arc<T>);
3267                    impl<
3268                        T: Collections,
3269                    > tonic::server::UnaryService<super::CollectionClusterInfoRequest>
3270                    for CollectionClusterInfoSvc<T> {
3271                        type Response = super::CollectionClusterInfoResponse;
3272                        type Future = BoxFuture<
3273                            tonic::Response<Self::Response>,
3274                            tonic::Status,
3275                        >;
3276                        fn call(
3277                            &mut self,
3278                            request: tonic::Request<super::CollectionClusterInfoRequest>,
3279                        ) -> Self::Future {
3280                            let inner = Arc::clone(&self.0);
3281                            let fut = async move {
3282                                <T as Collections>::collection_cluster_info(&inner, request)
3283                                    .await
3284                            };
3285                            Box::pin(fut)
3286                        }
3287                    }
3288                    let accept_compression_encodings = self.accept_compression_encodings;
3289                    let send_compression_encodings = self.send_compression_encodings;
3290                    let max_decoding_message_size = self.max_decoding_message_size;
3291                    let max_encoding_message_size = self.max_encoding_message_size;
3292                    let inner = self.inner.clone();
3293                    let fut = async move {
3294                        let method = CollectionClusterInfoSvc(inner);
3295                        let codec = tonic::codec::ProstCodec::default();
3296                        let mut grpc = tonic::server::Grpc::new(codec)
3297                            .apply_compression_config(
3298                                accept_compression_encodings,
3299                                send_compression_encodings,
3300                            )
3301                            .apply_max_message_size_config(
3302                                max_decoding_message_size,
3303                                max_encoding_message_size,
3304                            );
3305                        let res = grpc.unary(method, req).await;
3306                        Ok(res)
3307                    };
3308                    Box::pin(fut)
3309                }
3310                "/qdrant.Collections/CollectionExists" => {
3311                    #[allow(non_camel_case_types)]
3312                    struct CollectionExistsSvc<T: Collections>(pub Arc<T>);
3313                    impl<
3314                        T: Collections,
3315                    > tonic::server::UnaryService<super::CollectionExistsRequest>
3316                    for CollectionExistsSvc<T> {
3317                        type Response = super::CollectionExistsResponse;
3318                        type Future = BoxFuture<
3319                            tonic::Response<Self::Response>,
3320                            tonic::Status,
3321                        >;
3322                        fn call(
3323                            &mut self,
3324                            request: tonic::Request<super::CollectionExistsRequest>,
3325                        ) -> Self::Future {
3326                            let inner = Arc::clone(&self.0);
3327                            let fut = async move {
3328                                <T as Collections>::collection_exists(&inner, request).await
3329                            };
3330                            Box::pin(fut)
3331                        }
3332                    }
3333                    let accept_compression_encodings = self.accept_compression_encodings;
3334                    let send_compression_encodings = self.send_compression_encodings;
3335                    let max_decoding_message_size = self.max_decoding_message_size;
3336                    let max_encoding_message_size = self.max_encoding_message_size;
3337                    let inner = self.inner.clone();
3338                    let fut = async move {
3339                        let method = CollectionExistsSvc(inner);
3340                        let codec = tonic::codec::ProstCodec::default();
3341                        let mut grpc = tonic::server::Grpc::new(codec)
3342                            .apply_compression_config(
3343                                accept_compression_encodings,
3344                                send_compression_encodings,
3345                            )
3346                            .apply_max_message_size_config(
3347                                max_decoding_message_size,
3348                                max_encoding_message_size,
3349                            );
3350                        let res = grpc.unary(method, req).await;
3351                        Ok(res)
3352                    };
3353                    Box::pin(fut)
3354                }
3355                "/qdrant.Collections/UpdateCollectionClusterSetup" => {
3356                    #[allow(non_camel_case_types)]
3357                    struct UpdateCollectionClusterSetupSvc<T: Collections>(pub Arc<T>);
3358                    impl<
3359                        T: Collections,
3360                    > tonic::server::UnaryService<
3361                        super::UpdateCollectionClusterSetupRequest,
3362                    > for UpdateCollectionClusterSetupSvc<T> {
3363                        type Response = super::UpdateCollectionClusterSetupResponse;
3364                        type Future = BoxFuture<
3365                            tonic::Response<Self::Response>,
3366                            tonic::Status,
3367                        >;
3368                        fn call(
3369                            &mut self,
3370                            request: tonic::Request<
3371                                super::UpdateCollectionClusterSetupRequest,
3372                            >,
3373                        ) -> Self::Future {
3374                            let inner = Arc::clone(&self.0);
3375                            let fut = async move {
3376                                <T as Collections>::update_collection_cluster_setup(
3377                                        &inner,
3378                                        request,
3379                                    )
3380                                    .await
3381                            };
3382                            Box::pin(fut)
3383                        }
3384                    }
3385                    let accept_compression_encodings = self.accept_compression_encodings;
3386                    let send_compression_encodings = self.send_compression_encodings;
3387                    let max_decoding_message_size = self.max_decoding_message_size;
3388                    let max_encoding_message_size = self.max_encoding_message_size;
3389                    let inner = self.inner.clone();
3390                    let fut = async move {
3391                        let method = UpdateCollectionClusterSetupSvc(inner);
3392                        let codec = tonic::codec::ProstCodec::default();
3393                        let mut grpc = tonic::server::Grpc::new(codec)
3394                            .apply_compression_config(
3395                                accept_compression_encodings,
3396                                send_compression_encodings,
3397                            )
3398                            .apply_max_message_size_config(
3399                                max_decoding_message_size,
3400                                max_encoding_message_size,
3401                            );
3402                        let res = grpc.unary(method, req).await;
3403                        Ok(res)
3404                    };
3405                    Box::pin(fut)
3406                }
3407                "/qdrant.Collections/CreateShardKey" => {
3408                    #[allow(non_camel_case_types)]
3409                    struct CreateShardKeySvc<T: Collections>(pub Arc<T>);
3410                    impl<
3411                        T: Collections,
3412                    > tonic::server::UnaryService<super::CreateShardKeyRequest>
3413                    for CreateShardKeySvc<T> {
3414                        type Response = super::CreateShardKeyResponse;
3415                        type Future = BoxFuture<
3416                            tonic::Response<Self::Response>,
3417                            tonic::Status,
3418                        >;
3419                        fn call(
3420                            &mut self,
3421                            request: tonic::Request<super::CreateShardKeyRequest>,
3422                        ) -> Self::Future {
3423                            let inner = Arc::clone(&self.0);
3424                            let fut = async move {
3425                                <T as Collections>::create_shard_key(&inner, request).await
3426                            };
3427                            Box::pin(fut)
3428                        }
3429                    }
3430                    let accept_compression_encodings = self.accept_compression_encodings;
3431                    let send_compression_encodings = self.send_compression_encodings;
3432                    let max_decoding_message_size = self.max_decoding_message_size;
3433                    let max_encoding_message_size = self.max_encoding_message_size;
3434                    let inner = self.inner.clone();
3435                    let fut = async move {
3436                        let method = CreateShardKeySvc(inner);
3437                        let codec = tonic::codec::ProstCodec::default();
3438                        let mut grpc = tonic::server::Grpc::new(codec)
3439                            .apply_compression_config(
3440                                accept_compression_encodings,
3441                                send_compression_encodings,
3442                            )
3443                            .apply_max_message_size_config(
3444                                max_decoding_message_size,
3445                                max_encoding_message_size,
3446                            );
3447                        let res = grpc.unary(method, req).await;
3448                        Ok(res)
3449                    };
3450                    Box::pin(fut)
3451                }
3452                "/qdrant.Collections/DeleteShardKey" => {
3453                    #[allow(non_camel_case_types)]
3454                    struct DeleteShardKeySvc<T: Collections>(pub Arc<T>);
3455                    impl<
3456                        T: Collections,
3457                    > tonic::server::UnaryService<super::DeleteShardKeyRequest>
3458                    for DeleteShardKeySvc<T> {
3459                        type Response = super::DeleteShardKeyResponse;
3460                        type Future = BoxFuture<
3461                            tonic::Response<Self::Response>,
3462                            tonic::Status,
3463                        >;
3464                        fn call(
3465                            &mut self,
3466                            request: tonic::Request<super::DeleteShardKeyRequest>,
3467                        ) -> Self::Future {
3468                            let inner = Arc::clone(&self.0);
3469                            let fut = async move {
3470                                <T as Collections>::delete_shard_key(&inner, request).await
3471                            };
3472                            Box::pin(fut)
3473                        }
3474                    }
3475                    let accept_compression_encodings = self.accept_compression_encodings;
3476                    let send_compression_encodings = self.send_compression_encodings;
3477                    let max_decoding_message_size = self.max_decoding_message_size;
3478                    let max_encoding_message_size = self.max_encoding_message_size;
3479                    let inner = self.inner.clone();
3480                    let fut = async move {
3481                        let method = DeleteShardKeySvc(inner);
3482                        let codec = tonic::codec::ProstCodec::default();
3483                        let mut grpc = tonic::server::Grpc::new(codec)
3484                            .apply_compression_config(
3485                                accept_compression_encodings,
3486                                send_compression_encodings,
3487                            )
3488                            .apply_max_message_size_config(
3489                                max_decoding_message_size,
3490                                max_encoding_message_size,
3491                            );
3492                        let res = grpc.unary(method, req).await;
3493                        Ok(res)
3494                    };
3495                    Box::pin(fut)
3496                }
3497                "/qdrant.Collections/ListShardKeys" => {
3498                    #[allow(non_camel_case_types)]
3499                    struct ListShardKeysSvc<T: Collections>(pub Arc<T>);
3500                    impl<
3501                        T: Collections,
3502                    > tonic::server::UnaryService<super::ListShardKeysRequest>
3503                    for ListShardKeysSvc<T> {
3504                        type Response = super::ListShardKeysResponse;
3505                        type Future = BoxFuture<
3506                            tonic::Response<Self::Response>,
3507                            tonic::Status,
3508                        >;
3509                        fn call(
3510                            &mut self,
3511                            request: tonic::Request<super::ListShardKeysRequest>,
3512                        ) -> Self::Future {
3513                            let inner = Arc::clone(&self.0);
3514                            let fut = async move {
3515                                <T as Collections>::list_shard_keys(&inner, request).await
3516                            };
3517                            Box::pin(fut)
3518                        }
3519                    }
3520                    let accept_compression_encodings = self.accept_compression_encodings;
3521                    let send_compression_encodings = self.send_compression_encodings;
3522                    let max_decoding_message_size = self.max_decoding_message_size;
3523                    let max_encoding_message_size = self.max_encoding_message_size;
3524                    let inner = self.inner.clone();
3525                    let fut = async move {
3526                        let method = ListShardKeysSvc(inner);
3527                        let codec = tonic::codec::ProstCodec::default();
3528                        let mut grpc = tonic::server::Grpc::new(codec)
3529                            .apply_compression_config(
3530                                accept_compression_encodings,
3531                                send_compression_encodings,
3532                            )
3533                            .apply_max_message_size_config(
3534                                max_decoding_message_size,
3535                                max_encoding_message_size,
3536                            );
3537                        let res = grpc.unary(method, req).await;
3538                        Ok(res)
3539                    };
3540                    Box::pin(fut)
3541                }
3542                _ => {
3543                    Box::pin(async move {
3544                        let mut response = http::Response::new(empty_body());
3545                        let headers = response.headers_mut();
3546                        headers
3547                            .insert(
3548                                tonic::Status::GRPC_STATUS,
3549                                (tonic::Code::Unimplemented as i32).into(),
3550                            );
3551                        headers
3552                            .insert(
3553                                http::header::CONTENT_TYPE,
3554                                tonic::metadata::GRPC_CONTENT_TYPE,
3555                            );
3556                        Ok(response)
3557                    })
3558                }
3559            }
3560        }
3561    }
3562    impl<T> Clone for CollectionsServer<T> {
3563        fn clone(&self) -> Self {
3564            let inner = self.inner.clone();
3565            Self {
3566                inner,
3567                accept_compression_encodings: self.accept_compression_encodings,
3568                send_compression_encodings: self.send_compression_encodings,
3569                max_decoding_message_size: self.max_decoding_message_size,
3570                max_encoding_message_size: self.max_encoding_message_size,
3571            }
3572        }
3573    }
3574    /// Generated gRPC service name
3575    pub const SERVICE_NAME: &str = "qdrant.Collections";
3576    impl<T> tonic::server::NamedService for CollectionsServer<T> {
3577        const NAME: &'static str = SERVICE_NAME;
3578    }
3579}
3580#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3581pub struct WriteOrdering {
3582    /// Write ordering guarantees
3583    #[prost(enumeration = "WriteOrderingType", tag = "1")]
3584    pub r#type: i32,
3585}
3586#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3587pub struct ReadConsistency {
3588    #[prost(oneof = "read_consistency::Value", tags = "1, 2")]
3589    pub value: ::core::option::Option<read_consistency::Value>,
3590}
3591/// Nested message and enum types in `ReadConsistency`.
3592pub mod read_consistency {
3593    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3594    pub enum Value {
3595        /// Common read consistency configurations
3596        #[prost(enumeration = "super::ReadConsistencyType", tag = "1")]
3597        Type(i32),
3598        /// Send request to a specified number of nodes,
3599        /// and return points which are present on all of them
3600        #[prost(uint64, tag = "2")]
3601        Factor(u64),
3602    }
3603}
3604#[derive(Clone, PartialEq, ::prost::Message)]
3605pub struct SparseIndices {
3606    #[prost(uint32, repeated, tag = "1")]
3607    pub data: ::prost::alloc::vec::Vec<u32>,
3608}
3609#[derive(Clone, PartialEq, ::prost::Message)]
3610pub struct Document {
3611    /// Text of the document
3612    #[prost(string, tag = "1")]
3613    pub text: ::prost::alloc::string::String,
3614    /// Model name
3615    #[prost(string, tag = "3")]
3616    pub model: ::prost::alloc::string::String,
3617    /// Model options
3618    #[prost(map = "string, message", tag = "4")]
3619    pub options: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
3620}
3621#[derive(Clone, PartialEq, ::prost::Message)]
3622pub struct Image {
3623    /// Image data, either base64 encoded or URL
3624    #[prost(message, optional, tag = "1")]
3625    pub image: ::core::option::Option<Value>,
3626    /// Model name
3627    #[prost(string, tag = "2")]
3628    pub model: ::prost::alloc::string::String,
3629    /// Model options
3630    #[prost(map = "string, message", tag = "3")]
3631    pub options: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
3632}
3633#[derive(Clone, PartialEq, ::prost::Message)]
3634pub struct InferenceObject {
3635    /// Object to infer
3636    #[prost(message, optional, tag = "1")]
3637    pub object: ::core::option::Option<Value>,
3638    /// Model name
3639    #[prost(string, tag = "2")]
3640    pub model: ::prost::alloc::string::String,
3641    /// Model options
3642    #[prost(map = "string, message", tag = "3")]
3643    pub options: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
3644}
3645#[derive(Clone, PartialEq, ::prost::Message)]
3646pub struct Vector {
3647    /// Vector data (flatten for multi vectors), deprecated
3648    #[deprecated]
3649    #[prost(float, repeated, packed = "false", tag = "1")]
3650    /**
3651
3652Deprecated since 1.16.0, use [`vector`](crate::qdrant::Vector::vector) field instead.*/
3653    pub data: ::prost::alloc::vec::Vec<f32>,
3654    /// Sparse indices for sparse vectors, deprecated
3655    #[deprecated]
3656    #[prost(message, optional, tag = "2")]
3657    /**
3658
3659Deprecated since 1.16.0, use [`vector`](crate::qdrant::Vector::vector) field instead.*/
3660    pub indices: ::core::option::Option<SparseIndices>,
3661    /// Number of vectors per multi vector, deprecated
3662    #[deprecated]
3663    #[prost(uint32, optional, tag = "3")]
3664    /**
3665
3666Deprecated since 1.16.0, use [`vector`](crate::qdrant::Vector::vector) field instead.*/
3667    pub vectors_count: ::core::option::Option<u32>,
3668    #[prost(oneof = "vector::Vector", tags = "101, 102, 103, 104, 105, 106")]
3669    pub vector: ::core::option::Option<vector::Vector>,
3670}
3671/// Nested message and enum types in `Vector`.
3672pub mod vector {
3673    #[derive(Clone, PartialEq, ::prost::Oneof)]
3674    pub enum Vector {
3675        /// Dense vector
3676        #[prost(message, tag = "101")]
3677        Dense(super::DenseVector),
3678        /// Sparse vector
3679        #[prost(message, tag = "102")]
3680        Sparse(super::SparseVector),
3681        /// Multi dense vector
3682        #[prost(message, tag = "103")]
3683        MultiDense(super::MultiDenseVector),
3684        #[prost(message, tag = "104")]
3685        Document(super::Document),
3686        #[prost(message, tag = "105")]
3687        Image(super::Image),
3688        #[prost(message, tag = "106")]
3689        Object(super::InferenceObject),
3690    }
3691}
3692#[derive(Clone, PartialEq, ::prost::Message)]
3693pub struct VectorOutput {
3694    /// Vector data (flatten for multi vectors), deprecated
3695    #[deprecated]
3696    #[prost(float, repeated, packed = "false", tag = "1")]
3697    /**
3698
3699Deprecated since 1.16.0, use [`into_vector`](crate::qdrant::VectorOutput::into_vector) method instead.*/
3700    pub data: ::prost::alloc::vec::Vec<f32>,
3701    /// Sparse indices for sparse vectors, deprecated
3702    #[deprecated]
3703    #[prost(message, optional, tag = "2")]
3704    /**
3705
3706Deprecated since 1.16.0, use [`into_vector`](crate::qdrant::VectorOutput::into_vector) method instead.*/
3707    pub indices: ::core::option::Option<SparseIndices>,
3708    /// Number of vectors per multi vector, deprecated
3709    #[deprecated]
3710    #[prost(uint32, optional, tag = "3")]
3711    /**
3712
3713Deprecated since 1.16.0, use [`into_vector`](crate::qdrant::VectorOutput::into_vector) method instead.*/
3714    pub vectors_count: ::core::option::Option<u32>,
3715    #[prost(oneof = "vector_output::Vector", tags = "101, 102, 103")]
3716    pub vector: ::core::option::Option<vector_output::Vector>,
3717}
3718/// Nested message and enum types in `VectorOutput`.
3719pub mod vector_output {
3720    #[derive(Clone, PartialEq, ::prost::Oneof)]
3721    pub enum Vector {
3722        /// Dense vector
3723        #[prost(message, tag = "101")]
3724        Dense(super::DenseVector),
3725        /// Sparse vector
3726        #[prost(message, tag = "102")]
3727        Sparse(super::SparseVector),
3728        /// Multi dense vector
3729        #[prost(message, tag = "103")]
3730        MultiDense(super::MultiDenseVector),
3731    }
3732}
3733#[derive(Clone, PartialEq, ::prost::Message)]
3734pub struct DenseVector {
3735    #[prost(float, repeated, tag = "1")]
3736    pub data: ::prost::alloc::vec::Vec<f32>,
3737}
3738#[derive(Clone, PartialEq, ::prost::Message)]
3739pub struct SparseVector {
3740    #[prost(float, repeated, tag = "1")]
3741    pub values: ::prost::alloc::vec::Vec<f32>,
3742    #[prost(uint32, repeated, tag = "2")]
3743    pub indices: ::prost::alloc::vec::Vec<u32>,
3744}
3745#[derive(Clone, PartialEq, ::prost::Message)]
3746pub struct MultiDenseVector {
3747    #[prost(message, repeated, tag = "1")]
3748    pub vectors: ::prost::alloc::vec::Vec<DenseVector>,
3749}
3750/// Vector type to be used in queries.
3751/// Ids will be substituted with their corresponding vectors from the collection.
3752#[derive(Clone, PartialEq, ::prost::Message)]
3753pub struct VectorInput {
3754    #[prost(oneof = "vector_input::Variant", tags = "1, 2, 3, 4, 5, 6, 7")]
3755    pub variant: ::core::option::Option<vector_input::Variant>,
3756}
3757/// Nested message and enum types in `VectorInput`.
3758pub mod vector_input {
3759    #[derive(Clone, PartialEq, ::prost::Oneof)]
3760    pub enum Variant {
3761        #[prost(message, tag = "1")]
3762        Id(super::PointId),
3763        #[prost(message, tag = "2")]
3764        Dense(super::DenseVector),
3765        #[prost(message, tag = "3")]
3766        Sparse(super::SparseVector),
3767        #[prost(message, tag = "4")]
3768        MultiDense(super::MultiDenseVector),
3769        #[prost(message, tag = "5")]
3770        Document(super::Document),
3771        #[prost(message, tag = "6")]
3772        Image(super::Image),
3773        #[prost(message, tag = "7")]
3774        Object(super::InferenceObject),
3775    }
3776}
3777#[derive(Clone, PartialEq, ::prost::Message)]
3778pub struct ShardKeySelector {
3779    /// List of shard keys which should be used in the request
3780    #[prost(message, repeated, tag = "1")]
3781    pub shard_keys: ::prost::alloc::vec::Vec<ShardKey>,
3782    #[prost(message, optional, tag = "2")]
3783    pub fallback: ::core::option::Option<ShardKey>,
3784}
3785#[derive(Clone, PartialEq, ::prost::Message)]
3786pub struct UpsertPoints {
3787    /// name of the collection
3788    #[prost(string, tag = "1")]
3789    pub collection_name: ::prost::alloc::string::String,
3790    /// Wait until the changes have been applied?
3791    #[prost(bool, optional, tag = "2")]
3792    pub wait: ::core::option::Option<bool>,
3793    #[prost(message, repeated, tag = "3")]
3794    pub points: ::prost::alloc::vec::Vec<PointStruct>,
3795    /// Write ordering guarantees
3796    #[prost(message, optional, tag = "4")]
3797    pub ordering: ::core::option::Option<WriteOrdering>,
3798    /// Option for custom sharding to specify used shard keys
3799    #[prost(message, optional, tag = "5")]
3800    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3801    /// Filter to apply when updating existing points. Only points matching this filter will be updated.
3802    /// Points that don't match will keep their current state. New points will be inserted regardless of the filter.
3803    #[prost(message, optional, tag = "6")]
3804    pub update_filter: ::core::option::Option<Filter>,
3805    /// Timeout for the request in seconds
3806    #[prost(uint64, optional, tag = "7")]
3807    pub timeout: ::core::option::Option<u64>,
3808    /// Mode of the upsert operation: insert_only, upsert (default), update_only
3809    #[prost(enumeration = "UpdateMode", optional, tag = "8")]
3810    pub update_mode: ::core::option::Option<i32>,
3811}
3812#[derive(Clone, PartialEq, ::prost::Message)]
3813pub struct DeletePoints {
3814    /// name of the collection
3815    #[prost(string, tag = "1")]
3816    pub collection_name: ::prost::alloc::string::String,
3817    /// Wait until the changes have been applied?
3818    #[prost(bool, optional, tag = "2")]
3819    pub wait: ::core::option::Option<bool>,
3820    /// Affected points
3821    #[prost(message, optional, tag = "3")]
3822    pub points: ::core::option::Option<PointsSelector>,
3823    /// Write ordering guarantees
3824    #[prost(message, optional, tag = "4")]
3825    pub ordering: ::core::option::Option<WriteOrdering>,
3826    /// Option for custom sharding to specify used shard keys
3827    #[prost(message, optional, tag = "5")]
3828    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3829    /// Timeout for the request in seconds
3830    #[prost(uint64, optional, tag = "6")]
3831    pub timeout: ::core::option::Option<u64>,
3832}
3833#[derive(Clone, PartialEq, ::prost::Message)]
3834pub struct GetPoints {
3835    /// name of the collection
3836    #[prost(string, tag = "1")]
3837    pub collection_name: ::prost::alloc::string::String,
3838    /// List of points to retrieve
3839    #[prost(message, repeated, tag = "2")]
3840    pub ids: ::prost::alloc::vec::Vec<PointId>,
3841    /// Options for specifying which payload to include or not
3842    #[prost(message, optional, tag = "4")]
3843    pub with_payload: ::core::option::Option<WithPayloadSelector>,
3844    /// Options for specifying which vectors to include into response
3845    #[prost(message, optional, tag = "5")]
3846    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
3847    /// Options for specifying read consistency guarantees
3848    #[prost(message, optional, tag = "6")]
3849    pub read_consistency: ::core::option::Option<ReadConsistency>,
3850    /// Specify in which shards to look for the points, if not specified - look in all shards
3851    #[prost(message, optional, tag = "7")]
3852    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3853    /// If set, overrides global timeout setting for this request. Unit is seconds.
3854    #[prost(uint64, optional, tag = "8")]
3855    pub timeout: ::core::option::Option<u64>,
3856}
3857#[derive(Clone, PartialEq, ::prost::Message)]
3858pub struct UpdatePointVectors {
3859    /// name of the collection
3860    #[prost(string, tag = "1")]
3861    pub collection_name: ::prost::alloc::string::String,
3862    /// Wait until the changes have been applied?
3863    #[prost(bool, optional, tag = "2")]
3864    pub wait: ::core::option::Option<bool>,
3865    /// List of points and vectors to update
3866    #[prost(message, repeated, tag = "3")]
3867    pub points: ::prost::alloc::vec::Vec<PointVectors>,
3868    /// Write ordering guarantees
3869    #[prost(message, optional, tag = "4")]
3870    pub ordering: ::core::option::Option<WriteOrdering>,
3871    /// Option for custom sharding to specify used shard keys
3872    #[prost(message, optional, tag = "5")]
3873    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3874    /// If specified, only points that match this filter will be updated
3875    #[prost(message, optional, tag = "6")]
3876    pub update_filter: ::core::option::Option<Filter>,
3877    /// Timeout for the request in seconds
3878    #[prost(uint64, optional, tag = "7")]
3879    pub timeout: ::core::option::Option<u64>,
3880}
3881#[derive(Clone, PartialEq, ::prost::Message)]
3882pub struct PointVectors {
3883    /// ID to update vectors for
3884    #[prost(message, optional, tag = "1")]
3885    pub id: ::core::option::Option<PointId>,
3886    /// Named vectors to update, leave others intact
3887    #[prost(message, optional, tag = "2")]
3888    pub vectors: ::core::option::Option<Vectors>,
3889}
3890#[derive(Clone, PartialEq, ::prost::Message)]
3891pub struct DeletePointVectors {
3892    /// name of the collection
3893    #[prost(string, tag = "1")]
3894    pub collection_name: ::prost::alloc::string::String,
3895    /// Wait until the changes have been applied?
3896    #[prost(bool, optional, tag = "2")]
3897    pub wait: ::core::option::Option<bool>,
3898    /// Affected points
3899    #[prost(message, optional, tag = "3")]
3900    pub points_selector: ::core::option::Option<PointsSelector>,
3901    /// List of vector names to delete
3902    #[prost(message, optional, tag = "4")]
3903    pub vectors: ::core::option::Option<VectorsSelector>,
3904    /// Write ordering guarantees
3905    #[prost(message, optional, tag = "5")]
3906    pub ordering: ::core::option::Option<WriteOrdering>,
3907    /// Option for custom sharding to specify used shard keys
3908    #[prost(message, optional, tag = "6")]
3909    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3910    /// Timeout for the request in seconds
3911    #[prost(uint64, optional, tag = "7")]
3912    pub timeout: ::core::option::Option<u64>,
3913}
3914#[derive(Clone, PartialEq, ::prost::Message)]
3915pub struct SetPayloadPoints {
3916    /// name of the collection
3917    #[prost(string, tag = "1")]
3918    pub collection_name: ::prost::alloc::string::String,
3919    /// Wait until the changes have been applied?
3920    #[prost(bool, optional, tag = "2")]
3921    pub wait: ::core::option::Option<bool>,
3922    /// New payload values
3923    #[prost(map = "string, message", tag = "3")]
3924    pub payload: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
3925    /// Affected points
3926    #[prost(message, optional, tag = "5")]
3927    pub points_selector: ::core::option::Option<PointsSelector>,
3928    /// Write ordering guarantees
3929    #[prost(message, optional, tag = "6")]
3930    pub ordering: ::core::option::Option<WriteOrdering>,
3931    /// Option for custom sharding to specify used shard keys
3932    #[prost(message, optional, tag = "7")]
3933    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3934    /// Option for indicate property of payload
3935    #[prost(string, optional, tag = "8")]
3936    pub key: ::core::option::Option<::prost::alloc::string::String>,
3937    /// Timeout for the request in seconds
3938    #[prost(uint64, optional, tag = "9")]
3939    pub timeout: ::core::option::Option<u64>,
3940}
3941#[derive(Clone, PartialEq, ::prost::Message)]
3942pub struct DeletePayloadPoints {
3943    /// name of the collection
3944    #[prost(string, tag = "1")]
3945    pub collection_name: ::prost::alloc::string::String,
3946    /// Wait until the changes have been applied?
3947    #[prost(bool, optional, tag = "2")]
3948    pub wait: ::core::option::Option<bool>,
3949    /// List of keys to delete
3950    #[prost(string, repeated, tag = "3")]
3951    pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3952    /// Affected points
3953    #[prost(message, optional, tag = "5")]
3954    pub points_selector: ::core::option::Option<PointsSelector>,
3955    /// Write ordering guarantees
3956    #[prost(message, optional, tag = "6")]
3957    pub ordering: ::core::option::Option<WriteOrdering>,
3958    /// Option for custom sharding to specify used shard keys
3959    #[prost(message, optional, tag = "7")]
3960    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3961    /// Timeout for the request in seconds
3962    #[prost(uint64, optional, tag = "8")]
3963    pub timeout: ::core::option::Option<u64>,
3964}
3965#[derive(Clone, PartialEq, ::prost::Message)]
3966pub struct ClearPayloadPoints {
3967    /// name of the collection
3968    #[prost(string, tag = "1")]
3969    pub collection_name: ::prost::alloc::string::String,
3970    /// Wait until the changes have been applied?
3971    #[prost(bool, optional, tag = "2")]
3972    pub wait: ::core::option::Option<bool>,
3973    /// Affected points
3974    #[prost(message, optional, tag = "3")]
3975    pub points: ::core::option::Option<PointsSelector>,
3976    /// Write ordering guarantees
3977    #[prost(message, optional, tag = "4")]
3978    pub ordering: ::core::option::Option<WriteOrdering>,
3979    /// Option for custom sharding to specify used shard keys
3980    #[prost(message, optional, tag = "5")]
3981    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
3982    /// Timeout for the request in seconds
3983    #[prost(uint64, optional, tag = "6")]
3984    pub timeout: ::core::option::Option<u64>,
3985}
3986#[derive(Clone, PartialEq, ::prost::Message)]
3987pub struct CreateFieldIndexCollection {
3988    /// name of the collection
3989    #[prost(string, tag = "1")]
3990    pub collection_name: ::prost::alloc::string::String,
3991    /// Wait until the changes have been applied?
3992    #[prost(bool, optional, tag = "2")]
3993    pub wait: ::core::option::Option<bool>,
3994    /// Field name to index
3995    #[prost(string, tag = "3")]
3996    pub field_name: ::prost::alloc::string::String,
3997    /// Field type.
3998    #[prost(enumeration = "FieldType", optional, tag = "4")]
3999    pub field_type: ::core::option::Option<i32>,
4000    /// Payload index params.
4001    #[prost(message, optional, tag = "5")]
4002    pub field_index_params: ::core::option::Option<PayloadIndexParams>,
4003    /// Write ordering guarantees
4004    #[prost(message, optional, tag = "6")]
4005    pub ordering: ::core::option::Option<WriteOrdering>,
4006    /// Timeout for the request in seconds
4007    #[prost(uint64, optional, tag = "7")]
4008    pub timeout: ::core::option::Option<u64>,
4009}
4010#[derive(Clone, PartialEq, ::prost::Message)]
4011pub struct DeleteFieldIndexCollection {
4012    /// name of the collection
4013    #[prost(string, tag = "1")]
4014    pub collection_name: ::prost::alloc::string::String,
4015    /// Wait until the changes have been applied?
4016    #[prost(bool, optional, tag = "2")]
4017    pub wait: ::core::option::Option<bool>,
4018    /// Field name to delete
4019    #[prost(string, tag = "3")]
4020    pub field_name: ::prost::alloc::string::String,
4021    /// Write ordering guarantees
4022    #[prost(message, optional, tag = "4")]
4023    pub ordering: ::core::option::Option<WriteOrdering>,
4024    /// Timeout for the request in seconds
4025    #[prost(uint64, optional, tag = "5")]
4026    pub timeout: ::core::option::Option<u64>,
4027}
4028/// Dense vector creation parameters.
4029/// Only includes immutable properties that define the vector space.
4030/// Storage type, index, and quantization are configured separately.
4031#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4032pub struct DenseVectorCreationConfig {
4033    /// Size/dimensionality of the vectors
4034    #[prost(uint64, tag = "1")]
4035    pub size: u64,
4036    /// Distance function used for comparing vectors
4037    #[prost(enumeration = "Distance", tag = "2")]
4038    pub distance: i32,
4039    /// Configuration for multi-vector search (e.g., ColBERT)
4040    #[prost(message, optional, tag = "3")]
4041    pub multivector_config: ::core::option::Option<MultiVectorConfig>,
4042    /// Data type of the vectors (Float32, Float16, Uint8)
4043    #[prost(enumeration = "Datatype", optional, tag = "4")]
4044    pub datatype: ::core::option::Option<i32>,
4045}
4046/// Sparse vector creation parameters.
4047/// Only includes immutable properties that define the vector space.
4048#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4049pub struct SparseVectorCreationConfig {
4050    /// If set - apply modifier to the vector values (e.g., IDF)
4051    #[prost(enumeration = "Modifier", optional, tag = "1")]
4052    pub modifier: ::core::option::Option<i32>,
4053    /// Data type used to store weights in the index
4054    #[prost(enumeration = "Datatype", optional, tag = "2")]
4055    pub datatype: ::core::option::Option<i32>,
4056}
4057#[derive(Clone, PartialEq, ::prost::Message)]
4058pub struct CreateVectorNameRequest {
4059    /// Name of the collection
4060    #[prost(string, tag = "1")]
4061    pub collection_name: ::prost::alloc::string::String,
4062    /// Wait until the changes have been applied?
4063    #[prost(bool, optional, tag = "2")]
4064    pub wait: ::core::option::Option<bool>,
4065    /// Name of the new vector
4066    #[prost(string, tag = "3")]
4067    pub vector_name: ::prost::alloc::string::String,
4068    /// If set, overrides global timeout setting for this request. Unit is seconds.
4069    #[prost(uint64, optional, tag = "6")]
4070    pub timeout: ::core::option::Option<u64>,
4071    /// Write ordering guarantees
4072    #[prost(message, optional, tag = "7")]
4073    pub ordering: ::core::option::Option<WriteOrdering>,
4074    /// Configuration for the new vector - either dense or sparse
4075    #[prost(oneof = "create_vector_name_request::VectorConfig", tags = "4, 5")]
4076    pub vector_config: ::core::option::Option<create_vector_name_request::VectorConfig>,
4077}
4078/// Nested message and enum types in `CreateVectorNameRequest`.
4079pub mod create_vector_name_request {
4080    /// Configuration for the new vector - either dense or sparse
4081    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
4082    pub enum VectorConfig {
4083        /// Dense vector parameters
4084        #[prost(message, tag = "4")]
4085        DenseConfig(super::DenseVectorCreationConfig),
4086        /// Sparse vector parameters
4087        #[prost(message, tag = "5")]
4088        SparseConfig(super::SparseVectorCreationConfig),
4089    }
4090}
4091#[derive(Clone, PartialEq, ::prost::Message)]
4092pub struct DeleteVectorNameRequest {
4093    /// Name of the collection
4094    #[prost(string, tag = "1")]
4095    pub collection_name: ::prost::alloc::string::String,
4096    /// Wait until the changes have been applied?
4097    #[prost(bool, optional, tag = "2")]
4098    pub wait: ::core::option::Option<bool>,
4099    /// Name of the vector to delete
4100    #[prost(string, tag = "3")]
4101    pub vector_name: ::prost::alloc::string::String,
4102    /// If set, overrides global timeout setting for this request. Unit is seconds.
4103    #[prost(uint64, optional, tag = "4")]
4104    pub timeout: ::core::option::Option<u64>,
4105    /// Write ordering guarantees
4106    #[prost(message, optional, tag = "5")]
4107    pub ordering: ::core::option::Option<WriteOrdering>,
4108}
4109#[derive(Clone, PartialEq, ::prost::Message)]
4110pub struct PayloadIncludeSelector {
4111    /// List of payload keys to include into result
4112    #[prost(string, repeated, tag = "1")]
4113    pub fields: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4114}
4115#[derive(Clone, PartialEq, ::prost::Message)]
4116pub struct PayloadExcludeSelector {
4117    /// List of payload keys to exclude from the result
4118    #[prost(string, repeated, tag = "1")]
4119    pub fields: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4120}
4121#[derive(Clone, PartialEq, ::prost::Message)]
4122pub struct WithPayloadSelector {
4123    #[prost(oneof = "with_payload_selector::SelectorOptions", tags = "1, 2, 3")]
4124    pub selector_options: ::core::option::Option<with_payload_selector::SelectorOptions>,
4125}
4126/// Nested message and enum types in `WithPayloadSelector`.
4127pub mod with_payload_selector {
4128    #[derive(Clone, PartialEq, ::prost::Oneof)]
4129    pub enum SelectorOptions {
4130        /// If `true` - return all payload, if `false` - none
4131        #[prost(bool, tag = "1")]
4132        Enable(bool),
4133        #[prost(message, tag = "2")]
4134        Include(super::PayloadIncludeSelector),
4135        #[prost(message, tag = "3")]
4136        Exclude(super::PayloadExcludeSelector),
4137    }
4138}
4139#[derive(Clone, PartialEq, ::prost::Message)]
4140pub struct NamedVectors {
4141    #[prost(map = "string, message", tag = "1")]
4142    pub vectors: ::std::collections::HashMap<::prost::alloc::string::String, Vector>,
4143}
4144#[derive(Clone, PartialEq, ::prost::Message)]
4145pub struct NamedVectorsOutput {
4146    #[prost(map = "string, message", tag = "1")]
4147    pub vectors: ::std::collections::HashMap<
4148        ::prost::alloc::string::String,
4149        VectorOutput,
4150    >,
4151}
4152#[derive(Clone, PartialEq, ::prost::Message)]
4153pub struct Vectors {
4154    #[prost(oneof = "vectors::VectorsOptions", tags = "1, 2")]
4155    pub vectors_options: ::core::option::Option<vectors::VectorsOptions>,
4156}
4157/// Nested message and enum types in `Vectors`.
4158pub mod vectors {
4159    #[derive(Clone, PartialEq, ::prost::Oneof)]
4160    pub enum VectorsOptions {
4161        #[prost(message, tag = "1")]
4162        Vector(super::Vector),
4163        #[prost(message, tag = "2")]
4164        Vectors(super::NamedVectors),
4165    }
4166}
4167#[derive(Clone, PartialEq, ::prost::Message)]
4168pub struct VectorsOutput {
4169    #[prost(oneof = "vectors_output::VectorsOptions", tags = "1, 2")]
4170    pub vectors_options: ::core::option::Option<vectors_output::VectorsOptions>,
4171}
4172/// Nested message and enum types in `VectorsOutput`.
4173pub mod vectors_output {
4174    #[derive(Clone, PartialEq, ::prost::Oneof)]
4175    pub enum VectorsOptions {
4176        #[prost(message, tag = "1")]
4177        Vector(super::VectorOutput),
4178        #[prost(message, tag = "2")]
4179        Vectors(super::NamedVectorsOutput),
4180    }
4181}
4182#[derive(Clone, PartialEq, ::prost::Message)]
4183pub struct VectorsSelector {
4184    /// List of vectors to include into result
4185    #[prost(string, repeated, tag = "1")]
4186    pub names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4187}
4188#[derive(Clone, PartialEq, ::prost::Message)]
4189pub struct WithVectorsSelector {
4190    #[prost(oneof = "with_vectors_selector::SelectorOptions", tags = "1, 2")]
4191    pub selector_options: ::core::option::Option<with_vectors_selector::SelectorOptions>,
4192}
4193/// Nested message and enum types in `WithVectorsSelector`.
4194pub mod with_vectors_selector {
4195    #[derive(Clone, PartialEq, ::prost::Oneof)]
4196    pub enum SelectorOptions {
4197        /// If `true` - return all vectors, if `false` - none
4198        #[prost(bool, tag = "1")]
4199        Enable(bool),
4200        /// List of vectors to include into result
4201        #[prost(message, tag = "2")]
4202        Include(super::VectorsSelector),
4203    }
4204}
4205#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4206pub struct QuantizationSearchParams {
4207    /// If set to true, search will ignore quantized vector data
4208    #[prost(bool, optional, tag = "1")]
4209    pub ignore: ::core::option::Option<bool>,
4210    /// If true, use original vectors to re-score top-k results.
4211    /// If ignored, qdrant decides automatically does rescore enabled or not.
4212    #[prost(bool, optional, tag = "2")]
4213    pub rescore: ::core::option::Option<bool>,
4214    /// Oversampling factor for quantization.
4215    ///
4216    /// Defines how many extra vectors should be preselected using quantized index,
4217    /// and then re-scored using original vectors.
4218    ///
4219    /// For example, if `oversampling` is 2.4 and `limit` is 100,
4220    /// then 240 vectors will be preselected using quantized index,
4221    /// and then top-100 will be returned after re-scoring.
4222    #[prost(double, optional, tag = "3")]
4223    pub oversampling: ::core::option::Option<f64>,
4224}
4225#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4226pub struct AcornSearchParams {
4227    /// If true, then ACORN may be used for the HNSW search based on filters
4228    /// selectivity.
4229    ///
4230    /// Improves search recall for searches with multiple low-selectivity
4231    /// payload filters, at cost of performance.
4232    #[prost(bool, optional, tag = "1")]
4233    pub enable: ::core::option::Option<bool>,
4234    /// Maximum selectivity of filters to enable ACORN.
4235    ///
4236    /// If estimated filters selectivity is higher than this value,
4237    /// ACORN will not be used. Selectivity is estimated as:
4238    /// `estimated number of points satisfying the filters / total number of points`.
4239    ///
4240    /// 0.0 for never, 1.0 for always. Default is 0.4.
4241    #[prost(double, optional, tag = "2")]
4242    pub max_selectivity: ::core::option::Option<f64>,
4243}
4244#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4245pub struct SearchParams {
4246    /// Params relevant to HNSW index. Size of the beam in a beam-search.
4247    /// Larger the value - more accurate the result, more time required for search.
4248    #[prost(uint64, optional, tag = "1")]
4249    pub hnsw_ef: ::core::option::Option<u64>,
4250    /// Search without approximation. If set to true, search may run long but with exact results.
4251    #[prost(bool, optional, tag = "2")]
4252    pub exact: ::core::option::Option<bool>,
4253    /// If set to true, search will ignore quantized vector data
4254    #[prost(message, optional, tag = "3")]
4255    pub quantization: ::core::option::Option<QuantizationSearchParams>,
4256    /// If enabled, the engine will only perform search among indexed or small segments.
4257    /// Using this option prevents slow searches in case of delayed index, but does not
4258    /// guarantee that all uploaded vectors will be included in search results
4259    #[prost(bool, optional, tag = "4")]
4260    pub indexed_only: ::core::option::Option<bool>,
4261    /// ACORN search params
4262    #[prost(message, optional, tag = "5")]
4263    pub acorn: ::core::option::Option<AcornSearchParams>,
4264}
4265#[derive(Clone, PartialEq, ::prost::Message)]
4266pub struct SearchPoints {
4267    /// name of the collection
4268    #[prost(string, tag = "1")]
4269    pub collection_name: ::prost::alloc::string::String,
4270    /// vector
4271    #[prost(float, repeated, tag = "2")]
4272    pub vector: ::prost::alloc::vec::Vec<f32>,
4273    /// Filter conditions - return only those points that satisfy the specified conditions
4274    #[prost(message, optional, tag = "3")]
4275    pub filter: ::core::option::Option<Filter>,
4276    /// Max number of result
4277    #[prost(uint64, tag = "4")]
4278    pub limit: u64,
4279    /// Options for specifying which payload to include or not
4280    #[prost(message, optional, tag = "6")]
4281    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4282    /// Search config
4283    #[prost(message, optional, tag = "7")]
4284    pub params: ::core::option::Option<SearchParams>,
4285    /// If provided - cut off results with worse scores
4286    #[prost(float, optional, tag = "8")]
4287    pub score_threshold: ::core::option::Option<f32>,
4288    /// Offset of the result
4289    #[prost(uint64, optional, tag = "9")]
4290    pub offset: ::core::option::Option<u64>,
4291    /// Which vector to use for search, if not specified - use default vector
4292    #[prost(string, optional, tag = "10")]
4293    pub vector_name: ::core::option::Option<::prost::alloc::string::String>,
4294    /// Options for specifying which vectors to include into response
4295    #[prost(message, optional, tag = "11")]
4296    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4297    /// Options for specifying read consistency guarantees
4298    #[prost(message, optional, tag = "12")]
4299    pub read_consistency: ::core::option::Option<ReadConsistency>,
4300    /// If set, overrides global timeout setting for this request. Unit is seconds.
4301    #[prost(uint64, optional, tag = "13")]
4302    pub timeout: ::core::option::Option<u64>,
4303    /// Specify in which shards to look for the points, if not specified - look in all shards
4304    #[prost(message, optional, tag = "14")]
4305    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4306    #[prost(message, optional, tag = "15")]
4307    pub sparse_indices: ::core::option::Option<SparseIndices>,
4308}
4309#[derive(Clone, PartialEq, ::prost::Message)]
4310pub struct SearchBatchPoints {
4311    /// Name of the collection
4312    #[prost(string, tag = "1")]
4313    pub collection_name: ::prost::alloc::string::String,
4314    #[prost(message, repeated, tag = "2")]
4315    pub search_points: ::prost::alloc::vec::Vec<SearchPoints>,
4316    /// Options for specifying read consistency guarantees
4317    #[prost(message, optional, tag = "3")]
4318    pub read_consistency: ::core::option::Option<ReadConsistency>,
4319    /// If set, overrides global timeout setting for this request. Unit is seconds.
4320    #[prost(uint64, optional, tag = "4")]
4321    pub timeout: ::core::option::Option<u64>,
4322}
4323#[derive(Clone, PartialEq, ::prost::Message)]
4324pub struct WithLookup {
4325    /// Name of the collection to use for points lookup
4326    #[prost(string, tag = "1")]
4327    pub collection: ::prost::alloc::string::String,
4328    /// Options for specifying which payload to include (or not)
4329    #[prost(message, optional, tag = "2")]
4330    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4331    /// Options for specifying which vectors to include (or not)
4332    #[prost(message, optional, tag = "3")]
4333    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4334}
4335#[derive(Clone, PartialEq, ::prost::Message)]
4336pub struct SearchPointGroups {
4337    /// Name of the collection
4338    #[prost(string, tag = "1")]
4339    pub collection_name: ::prost::alloc::string::String,
4340    /// Vector to compare against
4341    #[prost(float, repeated, tag = "2")]
4342    pub vector: ::prost::alloc::vec::Vec<f32>,
4343    /// Filter conditions - return only those points that satisfy the specified conditions
4344    #[prost(message, optional, tag = "3")]
4345    pub filter: ::core::option::Option<Filter>,
4346    /// Max number of result
4347    #[prost(uint32, tag = "4")]
4348    pub limit: u32,
4349    /// Options for specifying which payload to include or not
4350    #[prost(message, optional, tag = "5")]
4351    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4352    /// Search config
4353    #[prost(message, optional, tag = "6")]
4354    pub params: ::core::option::Option<SearchParams>,
4355    /// If provided - cut off results with worse scores
4356    #[prost(float, optional, tag = "7")]
4357    pub score_threshold: ::core::option::Option<f32>,
4358    /// Which vector to use for search, if not specified - use default vector
4359    #[prost(string, optional, tag = "8")]
4360    pub vector_name: ::core::option::Option<::prost::alloc::string::String>,
4361    /// Options for specifying which vectors to include into response
4362    #[prost(message, optional, tag = "9")]
4363    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4364    /// Payload field to group by, must be a string or number field.
4365    /// If there are multiple values for the field, all of them will be used.
4366    /// One point can be in multiple groups.
4367    #[prost(string, tag = "10")]
4368    pub group_by: ::prost::alloc::string::String,
4369    /// Maximum amount of points to return per group
4370    #[prost(uint32, tag = "11")]
4371    pub group_size: u32,
4372    /// Options for specifying read consistency guarantees
4373    #[prost(message, optional, tag = "12")]
4374    pub read_consistency: ::core::option::Option<ReadConsistency>,
4375    /// Options for specifying how to use the group id to lookup points in another collection
4376    #[prost(message, optional, tag = "13")]
4377    pub with_lookup: ::core::option::Option<WithLookup>,
4378    /// If set, overrides global timeout setting for this request. Unit is seconds.
4379    #[prost(uint64, optional, tag = "14")]
4380    pub timeout: ::core::option::Option<u64>,
4381    /// Specify in which shards to look for the points, if not specified - look in all shards
4382    #[prost(message, optional, tag = "15")]
4383    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4384    #[prost(message, optional, tag = "16")]
4385    pub sparse_indices: ::core::option::Option<SparseIndices>,
4386}
4387#[derive(Clone, PartialEq, ::prost::Message)]
4388pub struct StartFrom {
4389    #[prost(oneof = "start_from::Value", tags = "1, 2, 3, 4")]
4390    pub value: ::core::option::Option<start_from::Value>,
4391}
4392/// Nested message and enum types in `StartFrom`.
4393pub mod start_from {
4394    #[derive(Clone, PartialEq, ::prost::Oneof)]
4395    pub enum Value {
4396        #[prost(double, tag = "1")]
4397        Float(f64),
4398        #[prost(int64, tag = "2")]
4399        Integer(i64),
4400        #[prost(message, tag = "3")]
4401        Timestamp(::prost_types::Timestamp),
4402        #[prost(string, tag = "4")]
4403        Datetime(::prost::alloc::string::String),
4404    }
4405}
4406#[derive(Clone, PartialEq, ::prost::Message)]
4407pub struct OrderBy {
4408    /// Payload key to order by
4409    #[prost(string, tag = "1")]
4410    pub key: ::prost::alloc::string::String,
4411    /// Ascending or descending order
4412    #[prost(enumeration = "Direction", optional, tag = "2")]
4413    pub direction: ::core::option::Option<i32>,
4414    /// Start from this value
4415    #[prost(message, optional, tag = "3")]
4416    pub start_from: ::core::option::Option<StartFrom>,
4417}
4418#[derive(Clone, PartialEq, ::prost::Message)]
4419pub struct ScrollPoints {
4420    #[prost(string, tag = "1")]
4421    pub collection_name: ::prost::alloc::string::String,
4422    /// Filter conditions - return only those points that satisfy the specified conditions
4423    #[prost(message, optional, tag = "2")]
4424    pub filter: ::core::option::Option<Filter>,
4425    /// Start with this ID
4426    #[prost(message, optional, tag = "3")]
4427    pub offset: ::core::option::Option<PointId>,
4428    /// Max number of result
4429    #[prost(uint32, optional, tag = "4")]
4430    pub limit: ::core::option::Option<u32>,
4431    /// Options for specifying which payload to include or not
4432    #[prost(message, optional, tag = "6")]
4433    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4434    /// Options for specifying which vectors to include into response
4435    #[prost(message, optional, tag = "7")]
4436    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4437    /// Options for specifying read consistency guarantees
4438    #[prost(message, optional, tag = "8")]
4439    pub read_consistency: ::core::option::Option<ReadConsistency>,
4440    /// Specify in which shards to look for the points, if not specified - look in all shards
4441    #[prost(message, optional, tag = "9")]
4442    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4443    /// Order the records by a payload field
4444    #[prost(message, optional, tag = "10")]
4445    pub order_by: ::core::option::Option<OrderBy>,
4446    /// If set, overrides global timeout setting for this request. Unit is seconds.
4447    #[prost(uint64, optional, tag = "11")]
4448    pub timeout: ::core::option::Option<u64>,
4449}
4450#[derive(Clone, PartialEq, ::prost::Message)]
4451pub struct LookupLocation {
4452    #[prost(string, tag = "1")]
4453    pub collection_name: ::prost::alloc::string::String,
4454    /// Which vector to use for search, if not specified - use default vector
4455    #[prost(string, optional, tag = "2")]
4456    pub vector_name: ::core::option::Option<::prost::alloc::string::String>,
4457    /// Specify in which shards to look for the points, if not specified - look in all shards
4458    #[prost(message, optional, tag = "3")]
4459    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4460}
4461#[derive(Clone, PartialEq, ::prost::Message)]
4462pub struct RecommendPoints {
4463    /// name of the collection
4464    #[prost(string, tag = "1")]
4465    pub collection_name: ::prost::alloc::string::String,
4466    /// Look for vectors closest to the vectors from these points
4467    #[prost(message, repeated, tag = "2")]
4468    pub positive: ::prost::alloc::vec::Vec<PointId>,
4469    /// Try to avoid vectors like the vector from these points
4470    #[prost(message, repeated, tag = "3")]
4471    pub negative: ::prost::alloc::vec::Vec<PointId>,
4472    /// Filter conditions - return only those points that satisfy the specified conditions
4473    #[prost(message, optional, tag = "4")]
4474    pub filter: ::core::option::Option<Filter>,
4475    /// Max number of result
4476    #[prost(uint64, tag = "5")]
4477    pub limit: u64,
4478    /// Options for specifying which payload to include or not
4479    #[prost(message, optional, tag = "7")]
4480    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4481    /// Search config
4482    #[prost(message, optional, tag = "8")]
4483    pub params: ::core::option::Option<SearchParams>,
4484    /// If provided - cut off results with worse scores
4485    #[prost(float, optional, tag = "9")]
4486    pub score_threshold: ::core::option::Option<f32>,
4487    /// Offset of the result
4488    #[prost(uint64, optional, tag = "10")]
4489    pub offset: ::core::option::Option<u64>,
4490    /// Define which vector to use for recommendation, if not specified - default vector
4491    #[prost(string, optional, tag = "11")]
4492    pub using: ::core::option::Option<::prost::alloc::string::String>,
4493    /// Options for specifying which vectors to include into response
4494    #[prost(message, optional, tag = "12")]
4495    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4496    /// Name of the collection to use for points lookup, if not specified - use current collection
4497    #[prost(message, optional, tag = "13")]
4498    pub lookup_from: ::core::option::Option<LookupLocation>,
4499    /// Options for specifying read consistency guarantees
4500    #[prost(message, optional, tag = "14")]
4501    pub read_consistency: ::core::option::Option<ReadConsistency>,
4502    /// How to use the example vectors to find the results
4503    #[prost(enumeration = "RecommendStrategy", optional, tag = "16")]
4504    pub strategy: ::core::option::Option<i32>,
4505    /// Look for vectors closest to those
4506    #[prost(message, repeated, tag = "17")]
4507    pub positive_vectors: ::prost::alloc::vec::Vec<Vector>,
4508    /// Try to avoid vectors like this
4509    #[prost(message, repeated, tag = "18")]
4510    pub negative_vectors: ::prost::alloc::vec::Vec<Vector>,
4511    /// If set, overrides global timeout setting for this request. Unit is seconds.
4512    #[prost(uint64, optional, tag = "19")]
4513    pub timeout: ::core::option::Option<u64>,
4514    /// Specify in which shards to look for the points, if not specified - look in all shards
4515    #[prost(message, optional, tag = "20")]
4516    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4517}
4518#[derive(Clone, PartialEq, ::prost::Message)]
4519pub struct RecommendBatchPoints {
4520    /// Name of the collection
4521    #[prost(string, tag = "1")]
4522    pub collection_name: ::prost::alloc::string::String,
4523    #[prost(message, repeated, tag = "2")]
4524    pub recommend_points: ::prost::alloc::vec::Vec<RecommendPoints>,
4525    /// Options for specifying read consistency guarantees
4526    #[prost(message, optional, tag = "3")]
4527    pub read_consistency: ::core::option::Option<ReadConsistency>,
4528    /// If set, overrides global timeout setting for this request. Unit is seconds.
4529    #[prost(uint64, optional, tag = "4")]
4530    pub timeout: ::core::option::Option<u64>,
4531}
4532#[derive(Clone, PartialEq, ::prost::Message)]
4533pub struct RecommendPointGroups {
4534    /// Name of the collection
4535    #[prost(string, tag = "1")]
4536    pub collection_name: ::prost::alloc::string::String,
4537    /// Look for vectors closest to the vectors from these points
4538    #[prost(message, repeated, tag = "2")]
4539    pub positive: ::prost::alloc::vec::Vec<PointId>,
4540    /// Try to avoid vectors like the vector from these points
4541    #[prost(message, repeated, tag = "3")]
4542    pub negative: ::prost::alloc::vec::Vec<PointId>,
4543    /// Filter conditions - return only those points that satisfy the specified conditions
4544    #[prost(message, optional, tag = "4")]
4545    pub filter: ::core::option::Option<Filter>,
4546    /// Max number of groups in result
4547    #[prost(uint32, tag = "5")]
4548    pub limit: u32,
4549    /// Options for specifying which payload to include or not
4550    #[prost(message, optional, tag = "6")]
4551    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4552    /// Search config
4553    #[prost(message, optional, tag = "7")]
4554    pub params: ::core::option::Option<SearchParams>,
4555    /// If provided - cut off results with worse scores
4556    #[prost(float, optional, tag = "8")]
4557    pub score_threshold: ::core::option::Option<f32>,
4558    /// Define which vector to use for recommendation, if not specified - default vector
4559    #[prost(string, optional, tag = "9")]
4560    pub using: ::core::option::Option<::prost::alloc::string::String>,
4561    /// Options for specifying which vectors to include into response
4562    #[prost(message, optional, tag = "10")]
4563    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4564    /// Name of the collection to use for points lookup, if not specified - use current collection
4565    #[prost(message, optional, tag = "11")]
4566    pub lookup_from: ::core::option::Option<LookupLocation>,
4567    /// Payload field to group by, must be a string or number field.
4568    /// If there are multiple values for the field, all of them will be used.
4569    /// One point can be in multiple groups.
4570    #[prost(string, tag = "12")]
4571    pub group_by: ::prost::alloc::string::String,
4572    /// Maximum amount of points to return per group
4573    #[prost(uint32, tag = "13")]
4574    pub group_size: u32,
4575    /// Options for specifying read consistency guarantees
4576    #[prost(message, optional, tag = "14")]
4577    pub read_consistency: ::core::option::Option<ReadConsistency>,
4578    /// Options for specifying how to use the group id to lookup points in another collection
4579    #[prost(message, optional, tag = "15")]
4580    pub with_lookup: ::core::option::Option<WithLookup>,
4581    /// How to use the example vectors to find the results
4582    #[prost(enumeration = "RecommendStrategy", optional, tag = "17")]
4583    pub strategy: ::core::option::Option<i32>,
4584    /// Look for vectors closest to those
4585    #[prost(message, repeated, tag = "18")]
4586    pub positive_vectors: ::prost::alloc::vec::Vec<Vector>,
4587    /// Try to avoid vectors like this
4588    #[prost(message, repeated, tag = "19")]
4589    pub negative_vectors: ::prost::alloc::vec::Vec<Vector>,
4590    /// If set, overrides global timeout setting for this request. Unit is seconds.
4591    #[prost(uint64, optional, tag = "20")]
4592    pub timeout: ::core::option::Option<u64>,
4593    /// Specify in which shards to look for the points, if not specified - look in all shards
4594    #[prost(message, optional, tag = "21")]
4595    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4596}
4597#[derive(Clone, PartialEq, ::prost::Message)]
4598pub struct TargetVector {
4599    #[prost(oneof = "target_vector::Target", tags = "1")]
4600    pub target: ::core::option::Option<target_vector::Target>,
4601}
4602/// Nested message and enum types in `TargetVector`.
4603pub mod target_vector {
4604    #[derive(Clone, PartialEq, ::prost::Oneof)]
4605    pub enum Target {
4606        #[prost(message, tag = "1")]
4607        Single(super::VectorExample),
4608    }
4609}
4610#[derive(Clone, PartialEq, ::prost::Message)]
4611pub struct VectorExample {
4612    #[prost(oneof = "vector_example::Example", tags = "1, 2")]
4613    pub example: ::core::option::Option<vector_example::Example>,
4614}
4615/// Nested message and enum types in `VectorExample`.
4616pub mod vector_example {
4617    #[derive(Clone, PartialEq, ::prost::Oneof)]
4618    pub enum Example {
4619        #[prost(message, tag = "1")]
4620        Id(super::PointId),
4621        #[prost(message, tag = "2")]
4622        Vector(super::Vector),
4623    }
4624}
4625#[derive(Clone, PartialEq, ::prost::Message)]
4626pub struct ContextExamplePair {
4627    #[prost(message, optional, tag = "1")]
4628    pub positive: ::core::option::Option<VectorExample>,
4629    #[prost(message, optional, tag = "2")]
4630    pub negative: ::core::option::Option<VectorExample>,
4631}
4632#[derive(Clone, PartialEq, ::prost::Message)]
4633pub struct DiscoverPoints {
4634    /// name of the collection
4635    #[prost(string, tag = "1")]
4636    pub collection_name: ::prost::alloc::string::String,
4637    /// Use this as the primary search objective
4638    #[prost(message, optional, tag = "2")]
4639    pub target: ::core::option::Option<TargetVector>,
4640    /// Search will be constrained by these pairs of examples
4641    #[prost(message, repeated, tag = "3")]
4642    pub context: ::prost::alloc::vec::Vec<ContextExamplePair>,
4643    /// Filter conditions - return only those points that satisfy the specified conditions
4644    #[prost(message, optional, tag = "4")]
4645    pub filter: ::core::option::Option<Filter>,
4646    /// Max number of result
4647    #[prost(uint64, tag = "5")]
4648    pub limit: u64,
4649    /// Options for specifying which payload to include or not
4650    #[prost(message, optional, tag = "6")]
4651    pub with_payload: ::core::option::Option<WithPayloadSelector>,
4652    /// Search config
4653    #[prost(message, optional, tag = "7")]
4654    pub params: ::core::option::Option<SearchParams>,
4655    /// Offset of the result
4656    #[prost(uint64, optional, tag = "8")]
4657    pub offset: ::core::option::Option<u64>,
4658    /// Define which vector to use for recommendation, if not specified - default vector
4659    #[prost(string, optional, tag = "9")]
4660    pub using: ::core::option::Option<::prost::alloc::string::String>,
4661    /// Options for specifying which vectors to include into response
4662    #[prost(message, optional, tag = "10")]
4663    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
4664    /// Name of the collection to use for points lookup, if not specified - use current collection
4665    #[prost(message, optional, tag = "11")]
4666    pub lookup_from: ::core::option::Option<LookupLocation>,
4667    /// Options for specifying read consistency guarantees
4668    #[prost(message, optional, tag = "12")]
4669    pub read_consistency: ::core::option::Option<ReadConsistency>,
4670    /// If set, overrides global timeout setting for this request. Unit is seconds.
4671    #[prost(uint64, optional, tag = "13")]
4672    pub timeout: ::core::option::Option<u64>,
4673    /// Specify in which shards to look for the points, if not specified - look in all shards
4674    #[prost(message, optional, tag = "14")]
4675    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4676}
4677#[derive(Clone, PartialEq, ::prost::Message)]
4678pub struct DiscoverBatchPoints {
4679    /// Name of the collection
4680    #[prost(string, tag = "1")]
4681    pub collection_name: ::prost::alloc::string::String,
4682    #[prost(message, repeated, tag = "2")]
4683    pub discover_points: ::prost::alloc::vec::Vec<DiscoverPoints>,
4684    /// Options for specifying read consistency guarantees
4685    #[prost(message, optional, tag = "3")]
4686    pub read_consistency: ::core::option::Option<ReadConsistency>,
4687    /// If set, overrides global timeout setting for this request. Unit is seconds.
4688    #[prost(uint64, optional, tag = "4")]
4689    pub timeout: ::core::option::Option<u64>,
4690}
4691#[derive(Clone, PartialEq, ::prost::Message)]
4692pub struct CountPoints {
4693    /// Name of the collection
4694    #[prost(string, tag = "1")]
4695    pub collection_name: ::prost::alloc::string::String,
4696    /// Filter conditions - return only those points that satisfy the specified conditions
4697    #[prost(message, optional, tag = "2")]
4698    pub filter: ::core::option::Option<Filter>,
4699    /// If `true` - return exact count, if `false` - return approximate count
4700    #[prost(bool, optional, tag = "3")]
4701    pub exact: ::core::option::Option<bool>,
4702    /// Options for specifying read consistency guarantees
4703    #[prost(message, optional, tag = "4")]
4704    pub read_consistency: ::core::option::Option<ReadConsistency>,
4705    /// Specify in which shards to look for the points, if not specified - look in all shards
4706    #[prost(message, optional, tag = "5")]
4707    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
4708    /// If set, overrides global timeout setting for this request. Unit is seconds.
4709    #[prost(uint64, optional, tag = "6")]
4710    pub timeout: ::core::option::Option<u64>,
4711}
4712#[derive(Clone, PartialEq, ::prost::Message)]
4713pub struct RecommendInput {
4714    /// Look for vectors closest to the vectors from these points
4715    #[prost(message, repeated, tag = "1")]
4716    pub positive: ::prost::alloc::vec::Vec<VectorInput>,
4717    /// Try to avoid vectors like the vector from these points
4718    #[prost(message, repeated, tag = "2")]
4719    pub negative: ::prost::alloc::vec::Vec<VectorInput>,
4720    /// How to use the provided vectors to find the results
4721    #[prost(enumeration = "RecommendStrategy", optional, tag = "3")]
4722    pub strategy: ::core::option::Option<i32>,
4723}
4724#[derive(Clone, PartialEq, ::prost::Message)]
4725pub struct ContextInputPair {
4726    /// A positive vector
4727    #[prost(message, optional, tag = "1")]
4728    pub positive: ::core::option::Option<VectorInput>,
4729    /// Repel from this vector
4730    #[prost(message, optional, tag = "2")]
4731    pub negative: ::core::option::Option<VectorInput>,
4732}
4733#[derive(Clone, PartialEq, ::prost::Message)]
4734pub struct DiscoverInput {
4735    /// Use this as the primary search objective
4736    #[prost(message, optional, tag = "1")]
4737    pub target: ::core::option::Option<VectorInput>,
4738    /// Search space will be constrained by these pairs of vectors
4739    #[prost(message, optional, tag = "2")]
4740    pub context: ::core::option::Option<ContextInput>,
4741}
4742#[derive(Clone, PartialEq, ::prost::Message)]
4743pub struct ContextInput {
4744    /// Search space will be constrained by these pairs of vectors
4745    #[prost(message, repeated, tag = "1")]
4746    pub pairs: ::prost::alloc::vec::Vec<ContextInputPair>,
4747}
4748#[derive(Clone, PartialEq, ::prost::Message)]
4749pub struct RelevanceFeedbackInput {
4750    /// The original query vector
4751    #[prost(message, optional, tag = "1")]
4752    pub target: ::core::option::Option<VectorInput>,
4753    /// Previous results scored by the feedback provider.
4754    #[prost(message, repeated, tag = "2")]
4755    pub feedback: ::prost::alloc::vec::Vec<FeedbackItem>,
4756    /// Formula and trained coefficients to use.
4757    #[prost(message, optional, tag = "3")]
4758    pub strategy: ::core::option::Option<FeedbackStrategy>,
4759}
4760#[derive(Clone, PartialEq, ::prost::Message)]
4761pub struct FeedbackItem {
4762    /// The id or vector from the original model
4763    #[prost(message, optional, tag = "1")]
4764    pub example: ::core::option::Option<VectorInput>,
4765    /// Score for this vector as determined by the feedback provider
4766    #[prost(float, tag = "2")]
4767    pub score: f32,
4768}
4769#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4770pub struct FeedbackStrategy {
4771    #[prost(oneof = "feedback_strategy::Variant", tags = "1")]
4772    pub variant: ::core::option::Option<feedback_strategy::Variant>,
4773}
4774/// Nested message and enum types in `FeedbackStrategy`.
4775pub mod feedback_strategy {
4776    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
4777    pub enum Variant {
4778        /// a * score + sim(confidence^b * c * delta)
4779        #[prost(message, tag = "1")]
4780        Naive(super::NaiveFeedbackStrategy),
4781    }
4782}
4783#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4784pub struct NaiveFeedbackStrategy {
4785    #[prost(float, tag = "1")]
4786    pub a: f32,
4787    #[prost(float, tag = "2")]
4788    pub b: f32,
4789    #[prost(float, tag = "3")]
4790    pub c: f32,
4791}
4792#[derive(Clone, PartialEq, ::prost::Message)]
4793pub struct Formula {
4794    #[prost(message, optional, tag = "1")]
4795    pub expression: ::core::option::Option<Expression>,
4796    #[prost(map = "string, message", tag = "2")]
4797    pub defaults: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
4798}
4799#[derive(Clone, PartialEq, ::prost::Message)]
4800pub struct Expression {
4801    #[prost(
4802        oneof = "expression::Variant",
4803        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19"
4804    )]
4805    pub variant: ::core::option::Option<expression::Variant>,
4806}
4807/// Nested message and enum types in `Expression`.
4808pub mod expression {
4809    #[derive(Clone, PartialEq, ::prost::Oneof)]
4810    pub enum Variant {
4811        #[prost(float, tag = "1")]
4812        Constant(f32),
4813        /// Payload key or reference to score.
4814        #[prost(string, tag = "2")]
4815        Variable(::prost::alloc::string::String),
4816        /// Payload condition. If true, becomes 1.0; otherwise 0.0
4817        #[prost(message, tag = "3")]
4818        Condition(super::Condition),
4819        /// Geographic distance in meters
4820        #[prost(message, tag = "4")]
4821        GeoDistance(super::GeoDistance),
4822        /// Date-time constant
4823        #[prost(string, tag = "5")]
4824        Datetime(::prost::alloc::string::String),
4825        /// Payload key with date-time values
4826        #[prost(string, tag = "6")]
4827        DatetimeKey(::prost::alloc::string::String),
4828        /// Multiply
4829        #[prost(message, tag = "7")]
4830        Mult(super::MultExpression),
4831        /// Sum
4832        #[prost(message, tag = "8")]
4833        Sum(super::SumExpression),
4834        /// Divide
4835        #[prost(message, tag = "9")]
4836        Div(::prost::alloc::boxed::Box<super::DivExpression>),
4837        /// Negate
4838        #[prost(message, tag = "10")]
4839        Neg(::prost::alloc::boxed::Box<super::Expression>),
4840        /// Absolute value
4841        #[prost(message, tag = "11")]
4842        Abs(::prost::alloc::boxed::Box<super::Expression>),
4843        /// Square root
4844        #[prost(message, tag = "12")]
4845        Sqrt(::prost::alloc::boxed::Box<super::Expression>),
4846        /// Power
4847        #[prost(message, tag = "13")]
4848        Pow(::prost::alloc::boxed::Box<super::PowExpression>),
4849        /// Exponential
4850        #[prost(message, tag = "14")]
4851        Exp(::prost::alloc::boxed::Box<super::Expression>),
4852        /// Logarithm
4853        #[prost(message, tag = "15")]
4854        Log10(::prost::alloc::boxed::Box<super::Expression>),
4855        /// Natural logarithm
4856        #[prost(message, tag = "16")]
4857        Ln(::prost::alloc::boxed::Box<super::Expression>),
4858        /// Exponential decay
4859        #[prost(message, tag = "17")]
4860        ExpDecay(::prost::alloc::boxed::Box<super::DecayParamsExpression>),
4861        /// Gaussian decay
4862        #[prost(message, tag = "18")]
4863        GaussDecay(::prost::alloc::boxed::Box<super::DecayParamsExpression>),
4864        /// Linear decay
4865        #[prost(message, tag = "19")]
4866        LinDecay(::prost::alloc::boxed::Box<super::DecayParamsExpression>),
4867    }
4868}
4869#[derive(Clone, PartialEq, ::prost::Message)]
4870pub struct GeoDistance {
4871    #[prost(message, optional, tag = "1")]
4872    pub origin: ::core::option::Option<GeoPoint>,
4873    #[prost(string, tag = "2")]
4874    pub to: ::prost::alloc::string::String,
4875}
4876#[derive(Clone, PartialEq, ::prost::Message)]
4877pub struct MultExpression {
4878    #[prost(message, repeated, tag = "1")]
4879    pub mult: ::prost::alloc::vec::Vec<Expression>,
4880}
4881#[derive(Clone, PartialEq, ::prost::Message)]
4882pub struct SumExpression {
4883    #[prost(message, repeated, tag = "1")]
4884    pub sum: ::prost::alloc::vec::Vec<Expression>,
4885}
4886#[derive(Clone, PartialEq, ::prost::Message)]
4887pub struct DivExpression {
4888    #[prost(message, optional, boxed, tag = "1")]
4889    pub left: ::core::option::Option<::prost::alloc::boxed::Box<Expression>>,
4890    #[prost(message, optional, boxed, tag = "2")]
4891    pub right: ::core::option::Option<::prost::alloc::boxed::Box<Expression>>,
4892    #[prost(float, optional, tag = "3")]
4893    pub by_zero_default: ::core::option::Option<f32>,
4894}
4895#[derive(Clone, PartialEq, ::prost::Message)]
4896pub struct PowExpression {
4897    #[prost(message, optional, boxed, tag = "1")]
4898    pub base: ::core::option::Option<::prost::alloc::boxed::Box<Expression>>,
4899    #[prost(message, optional, boxed, tag = "2")]
4900    pub exponent: ::core::option::Option<::prost::alloc::boxed::Box<Expression>>,
4901}
4902#[derive(Clone, PartialEq, ::prost::Message)]
4903pub struct DecayParamsExpression {
4904    /// The variable to decay
4905    #[prost(message, optional, boxed, tag = "1")]
4906    pub x: ::core::option::Option<::prost::alloc::boxed::Box<Expression>>,
4907    /// The target value to start decaying from. Defaults to 0.
4908    #[prost(message, optional, boxed, tag = "2")]
4909    pub target: ::core::option::Option<::prost::alloc::boxed::Box<Expression>>,
4910    /// The scale factor of the decay, in terms of `x`.
4911    /// Defaults to 1.0. Must be a non-zero positive number.
4912    #[prost(float, optional, tag = "3")]
4913    pub scale: ::core::option::Option<f32>,
4914    /// The midpoint of the decay.
4915    /// Should be between 0 and 1. Defaults to 0.5.
4916    /// Output will be this value when `|x - target| == scale`.
4917    #[prost(float, optional, tag = "4")]
4918    pub midpoint: ::core::option::Option<f32>,
4919}
4920#[derive(Clone, PartialEq, ::prost::Message)]
4921pub struct NearestInputWithMmr {
4922    /// The vector to search for nearest neighbors.
4923    #[prost(message, optional, tag = "1")]
4924    pub nearest: ::core::option::Option<VectorInput>,
4925    /// Perform MMR (Maximal Marginal Relevance) reranking after search,
4926    /// using the same vector in this query to calculate relevance.
4927    #[prost(message, optional, tag = "2")]
4928    pub mmr: ::core::option::Option<Mmr>,
4929}
4930/// Maximal Marginal Relevance (MMR) algorithm for re-ranking the points.
4931#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4932pub struct Mmr {
4933    /// Tunable parameter for the MMR algorithm.
4934    /// Determines the balance between diversity and relevance.
4935    ///
4936    /// A higher value favors diversity (dissimilarity to selected results),
4937    /// while a lower value favors relevance (similarity to the query vector).
4938    ///
4939    /// Must be in the range \[0, 1\].
4940    /// Default value is 0.5.
4941    #[prost(float, optional, tag = "2")]
4942    pub diversity: ::core::option::Option<f32>,
4943    /// The maximum number of candidates to consider for re-ranking.
4944    ///
4945    /// If not specified, the `limit` value is used.
4946    #[prost(uint32, optional, tag = "3")]
4947    pub candidates_limit: ::core::option::Option<u32>,
4948}
4949/// Parameterized reciprocal rank fusion
4950#[derive(Clone, PartialEq, ::prost::Message)]
4951pub struct Rrf {
4952    /// K parameter for reciprocal rank fusion
4953    #[prost(uint32, optional, tag = "1")]
4954    pub k: ::core::option::Option<u32>,
4955    /// Weights for each prefetch source.
4956    /// Higher weight gives more influence on the final ranking.
4957    /// If not specified, all prefetches are weighted equally.
4958    /// The number of weights should match the number of prefetches.
4959    #[prost(float, repeated, tag = "2")]
4960    pub weights: ::prost::alloc::vec::Vec<f32>,
4961}
4962#[derive(Clone, PartialEq, ::prost::Message)]
4963pub struct Query {
4964    #[prost(oneof = "query::Variant", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11")]
4965    pub variant: ::core::option::Option<query::Variant>,
4966}
4967/// Nested message and enum types in `Query`.
4968pub mod query {
4969    #[derive(Clone, PartialEq, ::prost::Oneof)]
4970    pub enum Variant {
4971        /// Find the nearest neighbors to this vector.
4972        #[prost(message, tag = "1")]
4973        Nearest(super::VectorInput),
4974        /// Use multiple positive and negative vectors to find the results.
4975        #[prost(message, tag = "2")]
4976        Recommend(super::RecommendInput),
4977        /// Search for nearest points, but constrain the search space with context
4978        #[prost(message, tag = "3")]
4979        Discover(super::DiscoverInput),
4980        /// Return points that live in positive areas.
4981        #[prost(message, tag = "4")]
4982        Context(super::ContextInput),
4983        /// Order the points by a payload field.
4984        #[prost(message, tag = "5")]
4985        OrderBy(super::OrderBy),
4986        /// Fuse the results of multiple prefetches.
4987        #[prost(enumeration = "super::Fusion", tag = "6")]
4988        Fusion(i32),
4989        /// Sample points from the collection.
4990        #[prost(enumeration = "super::Sample", tag = "7")]
4991        Sample(i32),
4992        /// Score boosting via an arbitrary formula
4993        #[prost(message, tag = "8")]
4994        Formula(super::Formula),
4995        /// Search nearest neighbors, but re-rank based on the Maximal Marginal Relevance algorithm.
4996        #[prost(message, tag = "9")]
4997        NearestWithMmr(super::NearestInputWithMmr),
4998        /// Parameterized reciprocal rank fusion
4999        #[prost(message, tag = "10")]
5000        Rrf(super::Rrf),
5001        /// Search with feedback from some oracle.
5002        #[prost(message, tag = "11")]
5003        RelevanceFeedback(super::RelevanceFeedbackInput),
5004    }
5005}
5006#[derive(Clone, PartialEq, ::prost::Message)]
5007pub struct PrefetchQuery {
5008    /// Sub-requests to perform first.
5009    /// If present, the query will be performed on the results of the prefetches.
5010    #[prost(message, repeated, tag = "1")]
5011    pub prefetch: ::prost::alloc::vec::Vec<PrefetchQuery>,
5012    /// Query to perform.
5013    /// If missing, returns points ordered by their IDs.
5014    #[prost(message, optional, tag = "2")]
5015    pub query: ::core::option::Option<Query>,
5016    /// Define which vector to use for querying.
5017    /// If missing, the default vector is used.
5018    #[prost(string, optional, tag = "3")]
5019    pub using: ::core::option::Option<::prost::alloc::string::String>,
5020    /// Filter conditions - return only those points that satisfy the specified conditions.
5021    #[prost(message, optional, tag = "4")]
5022    pub filter: ::core::option::Option<Filter>,
5023    /// Search params for when there is no prefetch.
5024    #[prost(message, optional, tag = "5")]
5025    pub params: ::core::option::Option<SearchParams>,
5026    /// Return points with scores better than this threshold.
5027    #[prost(float, optional, tag = "6")]
5028    pub score_threshold: ::core::option::Option<f32>,
5029    /// Max number of points. Default is 10
5030    #[prost(uint64, optional, tag = "7")]
5031    pub limit: ::core::option::Option<u64>,
5032    /// The location to use for IDs lookup.
5033    /// If not specified - use the current collection and the 'using' vector.
5034    #[prost(message, optional, tag = "8")]
5035    pub lookup_from: ::core::option::Option<LookupLocation>,
5036}
5037#[derive(Clone, PartialEq, ::prost::Message)]
5038pub struct QueryPoints {
5039    /// Name of the collection
5040    #[prost(string, tag = "1")]
5041    pub collection_name: ::prost::alloc::string::String,
5042    /// Sub-requests to perform first.
5043    /// If present, the query will be performed on the results of the prefetches.
5044    #[prost(message, repeated, tag = "2")]
5045    pub prefetch: ::prost::alloc::vec::Vec<PrefetchQuery>,
5046    /// Query to perform. If missing, returns points ordered by their IDs.
5047    #[prost(message, optional, tag = "3")]
5048    pub query: ::core::option::Option<Query>,
5049    /// Define which vector to use for querying.
5050    /// If missing, the default vector is used.
5051    #[prost(string, optional, tag = "4")]
5052    pub using: ::core::option::Option<::prost::alloc::string::String>,
5053    /// Filter conditions - return only those points that satisfy the specified conditions.
5054    #[prost(message, optional, tag = "5")]
5055    pub filter: ::core::option::Option<Filter>,
5056    /// Search params for when there is no prefetch.
5057    #[prost(message, optional, tag = "6")]
5058    pub params: ::core::option::Option<SearchParams>,
5059    /// Return points with scores better than this threshold.
5060    #[prost(float, optional, tag = "7")]
5061    pub score_threshold: ::core::option::Option<f32>,
5062    /// Max number of points. Default is 10.
5063    #[prost(uint64, optional, tag = "8")]
5064    pub limit: ::core::option::Option<u64>,
5065    /// Offset of the result. Skip this many points. Default is 0.
5066    #[prost(uint64, optional, tag = "9")]
5067    pub offset: ::core::option::Option<u64>,
5068    /// Options for specifying which vectors to include into the response.
5069    #[prost(message, optional, tag = "10")]
5070    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
5071    /// Options for specifying which payload to include or not.
5072    #[prost(message, optional, tag = "11")]
5073    pub with_payload: ::core::option::Option<WithPayloadSelector>,
5074    /// Options for specifying read consistency guarantees.
5075    #[prost(message, optional, tag = "12")]
5076    pub read_consistency: ::core::option::Option<ReadConsistency>,
5077    /// Specify in which shards to look for the points.
5078    /// If not specified - look in all shards.
5079    #[prost(message, optional, tag = "13")]
5080    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
5081    /// The location to use for IDs lookup.
5082    /// If not specified - use the current collection and the 'using' vector.
5083    #[prost(message, optional, tag = "14")]
5084    pub lookup_from: ::core::option::Option<LookupLocation>,
5085    /// If set, overrides global timeout setting for this request. Unit is seconds.
5086    #[prost(uint64, optional, tag = "15")]
5087    pub timeout: ::core::option::Option<u64>,
5088}
5089#[derive(Clone, PartialEq, ::prost::Message)]
5090pub struct QueryBatchPoints {
5091    #[prost(string, tag = "1")]
5092    pub collection_name: ::prost::alloc::string::String,
5093    #[prost(message, repeated, tag = "2")]
5094    pub query_points: ::prost::alloc::vec::Vec<QueryPoints>,
5095    /// Options for specifying read consistency guarantees
5096    #[prost(message, optional, tag = "3")]
5097    pub read_consistency: ::core::option::Option<ReadConsistency>,
5098    /// If set, overrides global timeout setting for this request. Unit is seconds.
5099    #[prost(uint64, optional, tag = "4")]
5100    pub timeout: ::core::option::Option<u64>,
5101}
5102#[derive(Clone, PartialEq, ::prost::Message)]
5103pub struct QueryPointGroups {
5104    /// Name of the collection
5105    #[prost(string, tag = "1")]
5106    pub collection_name: ::prost::alloc::string::String,
5107    /// Sub-requests to perform first.
5108    /// If present, the query will be performed on the results of the prefetches.
5109    #[prost(message, repeated, tag = "2")]
5110    pub prefetch: ::prost::alloc::vec::Vec<PrefetchQuery>,
5111    /// Query to perform. If missing, returns points ordered by their IDs.
5112    #[prost(message, optional, tag = "3")]
5113    pub query: ::core::option::Option<Query>,
5114    /// Define which vector to use for querying.
5115    /// If missing, the default vector is used.
5116    #[prost(string, optional, tag = "4")]
5117    pub using: ::core::option::Option<::prost::alloc::string::String>,
5118    /// Filter conditions - return only those points that satisfy the specified conditions.
5119    #[prost(message, optional, tag = "5")]
5120    pub filter: ::core::option::Option<Filter>,
5121    /// Search params for when there is no prefetch.
5122    #[prost(message, optional, tag = "6")]
5123    pub params: ::core::option::Option<SearchParams>,
5124    /// Return points with scores better than this threshold.
5125    #[prost(float, optional, tag = "7")]
5126    pub score_threshold: ::core::option::Option<f32>,
5127    /// Options for specifying which payload to include or not
5128    #[prost(message, optional, tag = "8")]
5129    pub with_payload: ::core::option::Option<WithPayloadSelector>,
5130    /// Options for specifying which vectors to include into response
5131    #[prost(message, optional, tag = "9")]
5132    pub with_vectors: ::core::option::Option<WithVectorsSelector>,
5133    /// The location to use for IDs lookup.
5134    /// If not specified - use the current collection and the 'using' vector.
5135    #[prost(message, optional, tag = "10")]
5136    pub lookup_from: ::core::option::Option<LookupLocation>,
5137    /// Max number of points. Default is 3.
5138    #[prost(uint64, optional, tag = "11")]
5139    pub limit: ::core::option::Option<u64>,
5140    /// Maximum amount of points to return per group. Defaults to 10.
5141    #[prost(uint64, optional, tag = "12")]
5142    pub group_size: ::core::option::Option<u64>,
5143    /// Payload field to group by, must be a string or number field.
5144    /// If there are multiple values for the field, all of them will be used.
5145    /// One point can be in multiple groups.
5146    #[prost(string, tag = "13")]
5147    pub group_by: ::prost::alloc::string::String,
5148    /// Options for specifying read consistency guarantees
5149    #[prost(message, optional, tag = "14")]
5150    pub read_consistency: ::core::option::Option<ReadConsistency>,
5151    /// Options for specifying how to use the group id to lookup points in another collection
5152    #[prost(message, optional, tag = "15")]
5153    pub with_lookup: ::core::option::Option<WithLookup>,
5154    /// If set, overrides global timeout setting for this request. Unit is seconds.
5155    #[prost(uint64, optional, tag = "16")]
5156    pub timeout: ::core::option::Option<u64>,
5157    /// Specify in which shards to look for the points, if not specified - look in all shards
5158    #[prost(message, optional, tag = "17")]
5159    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
5160}
5161#[derive(Clone, PartialEq, ::prost::Message)]
5162pub struct FacetCounts {
5163    /// Name of the collection
5164    #[prost(string, tag = "1")]
5165    pub collection_name: ::prost::alloc::string::String,
5166    /// Payload key of the facet
5167    #[prost(string, tag = "2")]
5168    pub key: ::prost::alloc::string::String,
5169    /// Filter conditions - return only those points that satisfy the specified conditions.
5170    #[prost(message, optional, tag = "3")]
5171    pub filter: ::core::option::Option<Filter>,
5172    /// Max number of facets. Default is 10.
5173    #[prost(uint64, optional, tag = "4")]
5174    pub limit: ::core::option::Option<u64>,
5175    /// If true, return exact counts, slower but useful for debugging purposes. Default is false.
5176    #[prost(bool, optional, tag = "5")]
5177    pub exact: ::core::option::Option<bool>,
5178    /// If set, overrides global timeout setting for this request. Unit is seconds.
5179    #[prost(uint64, optional, tag = "6")]
5180    pub timeout: ::core::option::Option<u64>,
5181    /// Options for specifying read consistency guarantees
5182    #[prost(message, optional, tag = "7")]
5183    pub read_consistency: ::core::option::Option<ReadConsistency>,
5184    /// Specify in which shards to look for the points, if not specified - look in all shards
5185    #[prost(message, optional, tag = "8")]
5186    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
5187}
5188#[derive(Clone, PartialEq, ::prost::Message)]
5189pub struct FacetValue {
5190    #[prost(oneof = "facet_value::Variant", tags = "1, 2, 3")]
5191    pub variant: ::core::option::Option<facet_value::Variant>,
5192}
5193/// Nested message and enum types in `FacetValue`.
5194pub mod facet_value {
5195    #[derive(Clone, PartialEq, ::prost::Oneof)]
5196    pub enum Variant {
5197        /// String value from the facet
5198        #[prost(string, tag = "1")]
5199        StringValue(::prost::alloc::string::String),
5200        /// Integer value from the facet
5201        #[prost(int64, tag = "2")]
5202        IntegerValue(i64),
5203        /// Boolean value from the facet
5204        #[prost(bool, tag = "3")]
5205        BoolValue(bool),
5206    }
5207}
5208#[derive(Clone, PartialEq, ::prost::Message)]
5209pub struct FacetHit {
5210    /// Value from the facet
5211    #[prost(message, optional, tag = "1")]
5212    pub value: ::core::option::Option<FacetValue>,
5213    /// Number of points with this value
5214    #[prost(uint64, tag = "2")]
5215    pub count: u64,
5216}
5217#[derive(Clone, PartialEq, ::prost::Message)]
5218pub struct SearchMatrixPoints {
5219    /// Name of the collection
5220    #[prost(string, tag = "1")]
5221    pub collection_name: ::prost::alloc::string::String,
5222    /// Filter conditions - return only those points that satisfy the specified conditions.
5223    #[prost(message, optional, tag = "2")]
5224    pub filter: ::core::option::Option<Filter>,
5225    /// How many points to select and search within. Default is 10.
5226    #[prost(uint64, optional, tag = "3")]
5227    pub sample: ::core::option::Option<u64>,
5228    /// How many neighbours per sample to find. Default is 3.
5229    #[prost(uint64, optional, tag = "4")]
5230    pub limit: ::core::option::Option<u64>,
5231    /// Define which vector to use for querying. If missing, the default vector is used.
5232    #[prost(string, optional, tag = "5")]
5233    pub using: ::core::option::Option<::prost::alloc::string::String>,
5234    /// If set, overrides global timeout setting for this request. Unit is seconds.
5235    #[prost(uint64, optional, tag = "6")]
5236    pub timeout: ::core::option::Option<u64>,
5237    /// Options for specifying read consistency guarantees
5238    #[prost(message, optional, tag = "7")]
5239    pub read_consistency: ::core::option::Option<ReadConsistency>,
5240    /// Specify in which shards to look for the points, if not specified - look in all shards
5241    #[prost(message, optional, tag = "8")]
5242    pub shard_key_selector: ::core::option::Option<ShardKeySelector>,
5243}
5244#[derive(Clone, PartialEq, ::prost::Message)]
5245pub struct SearchMatrixPairs {
5246    /// List of pairs of points with scores
5247    #[prost(message, repeated, tag = "1")]
5248    pub pairs: ::prost::alloc::vec::Vec<SearchMatrixPair>,
5249}
5250#[derive(Clone, PartialEq, ::prost::Message)]
5251pub struct SearchMatrixPair {
5252    /// first id of the pair
5253    #[prost(message, optional, tag = "1")]
5254    pub a: ::core::option::Option<PointId>,
5255    /// second id of the pair
5256    #[prost(message, optional, tag = "2")]
5257    pub b: ::core::option::Option<PointId>,
5258    /// score of the pair
5259    #[prost(float, tag = "3")]
5260    pub score: f32,
5261}
5262#[derive(Clone, PartialEq, ::prost::Message)]
5263pub struct SearchMatrixOffsets {
5264    /// Row indices of the matrix
5265    #[prost(uint64, repeated, tag = "1")]
5266    pub offsets_row: ::prost::alloc::vec::Vec<u64>,
5267    /// Column indices of the matrix
5268    #[prost(uint64, repeated, tag = "2")]
5269    pub offsets_col: ::prost::alloc::vec::Vec<u64>,
5270    /// Scores associated with matrix coordinates
5271    #[prost(float, repeated, tag = "3")]
5272    pub scores: ::prost::alloc::vec::Vec<f32>,
5273    /// Ids of the points in order
5274    #[prost(message, repeated, tag = "4")]
5275    pub ids: ::prost::alloc::vec::Vec<PointId>,
5276}
5277#[derive(Clone, PartialEq, ::prost::Message)]
5278pub struct PointsUpdateOperation {
5279    #[prost(
5280        oneof = "points_update_operation::Operation",
5281        tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
5282    )]
5283    pub operation: ::core::option::Option<points_update_operation::Operation>,
5284}
5285/// Nested message and enum types in `PointsUpdateOperation`.
5286pub mod points_update_operation {
5287    #[derive(Clone, PartialEq, ::prost::Message)]
5288    pub struct PointStructList {
5289        #[prost(message, repeated, tag = "1")]
5290        pub points: ::prost::alloc::vec::Vec<super::PointStruct>,
5291        /// Option for custom sharding to specify used shard keys
5292        #[prost(message, optional, tag = "2")]
5293        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5294        /// Filter to apply when updating existing points. Only points matching this filter will be updated.
5295        /// Points that don't match will keep their current state. New points will be inserted regardless of the filter.
5296        #[prost(message, optional, tag = "3")]
5297        pub update_filter: ::core::option::Option<super::Filter>,
5298        /// Mode of the upsert operation: insert_only, upsert (default), update_only
5299        #[prost(enumeration = "super::UpdateMode", optional, tag = "4")]
5300        pub update_mode: ::core::option::Option<i32>,
5301    }
5302    #[derive(Clone, PartialEq, ::prost::Message)]
5303    pub struct SetPayload {
5304        #[prost(map = "string, message", tag = "1")]
5305        pub payload: ::std::collections::HashMap<
5306            ::prost::alloc::string::String,
5307            super::Value,
5308        >,
5309        /// Affected points
5310        #[prost(message, optional, tag = "2")]
5311        pub points_selector: ::core::option::Option<super::PointsSelector>,
5312        /// Option for custom sharding to specify used shard keys
5313        #[prost(message, optional, tag = "3")]
5314        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5315        /// Option for indicate property of payload
5316        #[prost(string, optional, tag = "4")]
5317        pub key: ::core::option::Option<::prost::alloc::string::String>,
5318    }
5319    #[derive(Clone, PartialEq, ::prost::Message)]
5320    pub struct OverwritePayload {
5321        #[prost(map = "string, message", tag = "1")]
5322        pub payload: ::std::collections::HashMap<
5323            ::prost::alloc::string::String,
5324            super::Value,
5325        >,
5326        /// Affected points
5327        #[prost(message, optional, tag = "2")]
5328        pub points_selector: ::core::option::Option<super::PointsSelector>,
5329        /// Option for custom sharding to specify used shard keys
5330        #[prost(message, optional, tag = "3")]
5331        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5332        /// Option for indicate property of payload
5333        #[prost(string, optional, tag = "4")]
5334        pub key: ::core::option::Option<::prost::alloc::string::String>,
5335    }
5336    #[derive(Clone, PartialEq, ::prost::Message)]
5337    pub struct DeletePayload {
5338        #[prost(string, repeated, tag = "1")]
5339        pub keys: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5340        /// Affected points
5341        #[prost(message, optional, tag = "2")]
5342        pub points_selector: ::core::option::Option<super::PointsSelector>,
5343        /// Option for custom sharding to specify used shard keys
5344        #[prost(message, optional, tag = "3")]
5345        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5346    }
5347    #[derive(Clone, PartialEq, ::prost::Message)]
5348    pub struct UpdateVectors {
5349        /// List of points and vectors to update
5350        #[prost(message, repeated, tag = "1")]
5351        pub points: ::prost::alloc::vec::Vec<super::PointVectors>,
5352        /// Option for custom sharding to specify used shard keys
5353        #[prost(message, optional, tag = "2")]
5354        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5355        /// If specified, only points that match this filter will be updated
5356        #[prost(message, optional, tag = "3")]
5357        pub update_filter: ::core::option::Option<super::Filter>,
5358    }
5359    #[derive(Clone, PartialEq, ::prost::Message)]
5360    pub struct DeleteVectors {
5361        /// Affected points
5362        #[prost(message, optional, tag = "1")]
5363        pub points_selector: ::core::option::Option<super::PointsSelector>,
5364        /// List of vector names to delete
5365        #[prost(message, optional, tag = "2")]
5366        pub vectors: ::core::option::Option<super::VectorsSelector>,
5367        /// Option for custom sharding to specify used shard keys
5368        #[prost(message, optional, tag = "3")]
5369        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5370    }
5371    #[derive(Clone, PartialEq, ::prost::Message)]
5372    pub struct DeletePoints {
5373        /// Affected points
5374        #[prost(message, optional, tag = "1")]
5375        pub points: ::core::option::Option<super::PointsSelector>,
5376        /// Option for custom sharding to specify used shard keys
5377        #[prost(message, optional, tag = "2")]
5378        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5379    }
5380    #[derive(Clone, PartialEq, ::prost::Message)]
5381    pub struct ClearPayload {
5382        /// Affected points
5383        #[prost(message, optional, tag = "1")]
5384        pub points: ::core::option::Option<super::PointsSelector>,
5385        /// Option for custom sharding to specify used shard keys
5386        #[prost(message, optional, tag = "2")]
5387        pub shard_key_selector: ::core::option::Option<super::ShardKeySelector>,
5388    }
5389    #[derive(Clone, PartialEq, ::prost::Oneof)]
5390    pub enum Operation {
5391        #[prost(message, tag = "1")]
5392        Upsert(PointStructList),
5393        #[prost(message, tag = "2")]
5394        #[deprecated(since = "1.7.0", note = "use `DeletePoints` instead")]
5395        DeleteDeprecated(super::PointsSelector),
5396        #[prost(message, tag = "3")]
5397        SetPayload(SetPayload),
5398        #[prost(message, tag = "4")]
5399        OverwritePayload(OverwritePayload),
5400        #[prost(message, tag = "5")]
5401        DeletePayload(DeletePayload),
5402        #[prost(message, tag = "6")]
5403        #[deprecated(since = "1.7.0", note = "use `ClearPayload` instead")]
5404        ClearPayloadDeprecated(super::PointsSelector),
5405        #[prost(message, tag = "7")]
5406        UpdateVectors(UpdateVectors),
5407        #[prost(message, tag = "8")]
5408        DeleteVectors(DeleteVectors),
5409        #[prost(message, tag = "9")]
5410        DeletePoints(DeletePoints),
5411        #[prost(message, tag = "10")]
5412        ClearPayload(ClearPayload),
5413    }
5414}
5415#[derive(Clone, PartialEq, ::prost::Message)]
5416pub struct UpdateBatchPoints {
5417    /// name of the collection
5418    #[prost(string, tag = "1")]
5419    pub collection_name: ::prost::alloc::string::String,
5420    /// Wait until the changes have been applied?
5421    #[prost(bool, optional, tag = "2")]
5422    pub wait: ::core::option::Option<bool>,
5423    #[prost(message, repeated, tag = "3")]
5424    pub operations: ::prost::alloc::vec::Vec<PointsUpdateOperation>,
5425    /// Write ordering guarantees
5426    #[prost(message, optional, tag = "4")]
5427    pub ordering: ::core::option::Option<WriteOrdering>,
5428    /// Timeout for the operation in seconds
5429    #[prost(uint64, optional, tag = "5")]
5430    pub timeout: ::core::option::Option<u64>,
5431}
5432#[derive(Clone, PartialEq, ::prost::Message)]
5433pub struct PointsOperationResponse {
5434    #[prost(message, optional, tag = "1")]
5435    pub result: ::core::option::Option<UpdateResult>,
5436    /// Time spent to process
5437    #[prost(double, tag = "2")]
5438    pub time: f64,
5439    #[prost(message, optional, tag = "3")]
5440    pub usage: ::core::option::Option<Usage>,
5441}
5442#[derive(Clone, Copy, PartialEq, ::prost::Message)]
5443pub struct UpdateResult {
5444    /// Number of operation
5445    #[prost(uint64, optional, tag = "1")]
5446    pub operation_id: ::core::option::Option<u64>,
5447    /// Operation status
5448    #[prost(enumeration = "UpdateStatus", tag = "2")]
5449    pub status: i32,
5450}
5451#[derive(Clone, Copy, PartialEq, ::prost::Message)]
5452pub struct OrderValue {
5453    #[prost(oneof = "order_value::Variant", tags = "1, 2")]
5454    pub variant: ::core::option::Option<order_value::Variant>,
5455}
5456/// Nested message and enum types in `OrderValue`.
5457pub mod order_value {
5458    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
5459    pub enum Variant {
5460        #[prost(int64, tag = "1")]
5461        Int(i64),
5462        #[prost(double, tag = "2")]
5463        Float(f64),
5464    }
5465}
5466#[derive(Clone, PartialEq, ::prost::Message)]
5467pub struct ScoredPoint {
5468    /// Point id
5469    #[prost(message, optional, tag = "1")]
5470    pub id: ::core::option::Option<PointId>,
5471    /// Payload
5472    #[prost(map = "string, message", tag = "2")]
5473    pub payload: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
5474    /// Similarity score
5475    #[prost(float, tag = "3")]
5476    pub score: f32,
5477    /// Last update operation applied to this point
5478    #[prost(uint64, tag = "5")]
5479    pub version: u64,
5480    /// Vectors to search
5481    #[prost(message, optional, tag = "6")]
5482    pub vectors: ::core::option::Option<VectorsOutput>,
5483    /// Shard key
5484    #[prost(message, optional, tag = "7")]
5485    pub shard_key: ::core::option::Option<ShardKey>,
5486    /// Order by value
5487    #[prost(message, optional, tag = "8")]
5488    pub order_value: ::core::option::Option<OrderValue>,
5489}
5490#[derive(Clone, PartialEq, ::prost::Message)]
5491pub struct GroupId {
5492    #[prost(oneof = "group_id::Kind", tags = "1, 2, 3")]
5493    pub kind: ::core::option::Option<group_id::Kind>,
5494}
5495/// Nested message and enum types in `GroupId`.
5496pub mod group_id {
5497    #[derive(Clone, PartialEq, ::prost::Oneof)]
5498    pub enum Kind {
5499        /// Represents an unsigned integer value.
5500        #[prost(uint64, tag = "1")]
5501        UnsignedValue(u64),
5502        /// Represents an integer value
5503        #[prost(int64, tag = "2")]
5504        IntegerValue(i64),
5505        /// Represents a string value.
5506        #[prost(string, tag = "3")]
5507        StringValue(::prost::alloc::string::String),
5508    }
5509}
5510#[derive(Clone, PartialEq, ::prost::Message)]
5511pub struct PointGroup {
5512    /// Group id
5513    #[prost(message, optional, tag = "1")]
5514    pub id: ::core::option::Option<GroupId>,
5515    /// Points in the group
5516    #[prost(message, repeated, tag = "2")]
5517    pub hits: ::prost::alloc::vec::Vec<ScoredPoint>,
5518    /// Point(s) from the lookup collection that matches the group id
5519    #[prost(message, optional, tag = "3")]
5520    pub lookup: ::core::option::Option<RetrievedPoint>,
5521}
5522#[derive(Clone, PartialEq, ::prost::Message)]
5523pub struct GroupsResult {
5524    /// Groups
5525    #[prost(message, repeated, tag = "1")]
5526    pub groups: ::prost::alloc::vec::Vec<PointGroup>,
5527}
5528#[derive(Clone, PartialEq, ::prost::Message)]
5529pub struct SearchResponse {
5530    #[prost(message, repeated, tag = "1")]
5531    pub result: ::prost::alloc::vec::Vec<ScoredPoint>,
5532    /// Time spent to process
5533    #[prost(double, tag = "2")]
5534    pub time: f64,
5535    #[prost(message, optional, tag = "3")]
5536    pub usage: ::core::option::Option<Usage>,
5537}
5538#[derive(Clone, PartialEq, ::prost::Message)]
5539pub struct QueryResponse {
5540    #[prost(message, repeated, tag = "1")]
5541    pub result: ::prost::alloc::vec::Vec<ScoredPoint>,
5542    /// Time spent to process
5543    #[prost(double, tag = "2")]
5544    pub time: f64,
5545    #[prost(message, optional, tag = "3")]
5546    pub usage: ::core::option::Option<Usage>,
5547}
5548#[derive(Clone, PartialEq, ::prost::Message)]
5549pub struct QueryBatchResponse {
5550    #[prost(message, repeated, tag = "1")]
5551    pub result: ::prost::alloc::vec::Vec<BatchResult>,
5552    /// Time spent to process
5553    #[prost(double, tag = "2")]
5554    pub time: f64,
5555    #[prost(message, optional, tag = "3")]
5556    pub usage: ::core::option::Option<Usage>,
5557}
5558#[derive(Clone, PartialEq, ::prost::Message)]
5559pub struct QueryGroupsResponse {
5560    #[prost(message, optional, tag = "1")]
5561    pub result: ::core::option::Option<GroupsResult>,
5562    /// Time spent to process
5563    #[prost(double, tag = "2")]
5564    pub time: f64,
5565    #[prost(message, optional, tag = "3")]
5566    pub usage: ::core::option::Option<Usage>,
5567}
5568#[derive(Clone, PartialEq, ::prost::Message)]
5569pub struct BatchResult {
5570    #[prost(message, repeated, tag = "1")]
5571    pub result: ::prost::alloc::vec::Vec<ScoredPoint>,
5572}
5573#[derive(Clone, PartialEq, ::prost::Message)]
5574pub struct SearchBatchResponse {
5575    #[prost(message, repeated, tag = "1")]
5576    pub result: ::prost::alloc::vec::Vec<BatchResult>,
5577    /// Time spent to process
5578    #[prost(double, tag = "2")]
5579    pub time: f64,
5580    #[prost(message, optional, tag = "3")]
5581    pub usage: ::core::option::Option<Usage>,
5582}
5583#[derive(Clone, PartialEq, ::prost::Message)]
5584pub struct SearchGroupsResponse {
5585    #[prost(message, optional, tag = "1")]
5586    pub result: ::core::option::Option<GroupsResult>,
5587    /// Time spent to process
5588    #[prost(double, tag = "2")]
5589    pub time: f64,
5590    #[prost(message, optional, tag = "3")]
5591    pub usage: ::core::option::Option<Usage>,
5592}
5593#[derive(Clone, PartialEq, ::prost::Message)]
5594pub struct CountResponse {
5595    #[prost(message, optional, tag = "1")]
5596    pub result: ::core::option::Option<CountResult>,
5597    /// Time spent to process
5598    #[prost(double, tag = "2")]
5599    pub time: f64,
5600    #[prost(message, optional, tag = "3")]
5601    pub usage: ::core::option::Option<Usage>,
5602}
5603#[derive(Clone, PartialEq, ::prost::Message)]
5604pub struct ScrollResponse {
5605    /// Use this offset for the next query
5606    #[prost(message, optional, tag = "1")]
5607    pub next_page_offset: ::core::option::Option<PointId>,
5608    #[prost(message, repeated, tag = "2")]
5609    pub result: ::prost::alloc::vec::Vec<RetrievedPoint>,
5610    /// Time spent to process
5611    #[prost(double, tag = "3")]
5612    pub time: f64,
5613    #[prost(message, optional, tag = "4")]
5614    pub usage: ::core::option::Option<Usage>,
5615}
5616#[derive(Clone, Copy, PartialEq, ::prost::Message)]
5617pub struct CountResult {
5618    #[prost(uint64, tag = "1")]
5619    pub count: u64,
5620}
5621#[derive(Clone, PartialEq, ::prost::Message)]
5622pub struct RetrievedPoint {
5623    #[prost(message, optional, tag = "1")]
5624    pub id: ::core::option::Option<PointId>,
5625    #[prost(map = "string, message", tag = "2")]
5626    pub payload: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
5627    #[prost(message, optional, tag = "4")]
5628    pub vectors: ::core::option::Option<VectorsOutput>,
5629    /// Shard key
5630    #[prost(message, optional, tag = "5")]
5631    pub shard_key: ::core::option::Option<ShardKey>,
5632    /// Order-by value
5633    #[prost(message, optional, tag = "6")]
5634    pub order_value: ::core::option::Option<OrderValue>,
5635}
5636#[derive(Clone, PartialEq, ::prost::Message)]
5637pub struct GetResponse {
5638    #[prost(message, repeated, tag = "1")]
5639    pub result: ::prost::alloc::vec::Vec<RetrievedPoint>,
5640    /// Time spent to process
5641    #[prost(double, tag = "2")]
5642    pub time: f64,
5643    #[prost(message, optional, tag = "3")]
5644    pub usage: ::core::option::Option<Usage>,
5645}
5646#[derive(Clone, PartialEq, ::prost::Message)]
5647pub struct RecommendResponse {
5648    #[prost(message, repeated, tag = "1")]
5649    pub result: ::prost::alloc::vec::Vec<ScoredPoint>,
5650    /// Time spent to process
5651    #[prost(double, tag = "2")]
5652    pub time: f64,
5653    #[prost(message, optional, tag = "3")]
5654    pub usage: ::core::option::Option<Usage>,
5655}
5656#[derive(Clone, PartialEq, ::prost::Message)]
5657pub struct RecommendBatchResponse {
5658    #[prost(message, repeated, tag = "1")]
5659    pub result: ::prost::alloc::vec::Vec<BatchResult>,
5660    /// Time spent to process
5661    #[prost(double, tag = "2")]
5662    pub time: f64,
5663    #[prost(message, optional, tag = "3")]
5664    pub usage: ::core::option::Option<Usage>,
5665}
5666#[derive(Clone, PartialEq, ::prost::Message)]
5667pub struct DiscoverResponse {
5668    #[prost(message, repeated, tag = "1")]
5669    pub result: ::prost::alloc::vec::Vec<ScoredPoint>,
5670    /// Time spent to process
5671    #[prost(double, tag = "2")]
5672    pub time: f64,
5673    #[prost(message, optional, tag = "3")]
5674    pub usage: ::core::option::Option<Usage>,
5675}
5676#[derive(Clone, PartialEq, ::prost::Message)]
5677pub struct DiscoverBatchResponse {
5678    #[prost(message, repeated, tag = "1")]
5679    pub result: ::prost::alloc::vec::Vec<BatchResult>,
5680    /// Time spent to process
5681    #[prost(double, tag = "2")]
5682    pub time: f64,
5683    #[prost(message, optional, tag = "3")]
5684    pub usage: ::core::option::Option<Usage>,
5685}
5686#[derive(Clone, PartialEq, ::prost::Message)]
5687pub struct RecommendGroupsResponse {
5688    #[prost(message, optional, tag = "1")]
5689    pub result: ::core::option::Option<GroupsResult>,
5690    /// Time spent to process
5691    #[prost(double, tag = "2")]
5692    pub time: f64,
5693    #[prost(message, optional, tag = "3")]
5694    pub usage: ::core::option::Option<Usage>,
5695}
5696#[derive(Clone, PartialEq, ::prost::Message)]
5697pub struct UpdateBatchResponse {
5698    #[prost(message, repeated, tag = "1")]
5699    pub result: ::prost::alloc::vec::Vec<UpdateResult>,
5700    /// Time spent to process
5701    #[prost(double, tag = "2")]
5702    pub time: f64,
5703    #[prost(message, optional, tag = "3")]
5704    pub usage: ::core::option::Option<Usage>,
5705}
5706#[derive(Clone, PartialEq, ::prost::Message)]
5707pub struct FacetResponse {
5708    #[prost(message, repeated, tag = "1")]
5709    pub hits: ::prost::alloc::vec::Vec<FacetHit>,
5710    /// Time spent to process
5711    #[prost(double, tag = "2")]
5712    pub time: f64,
5713    #[prost(message, optional, tag = "3")]
5714    pub usage: ::core::option::Option<Usage>,
5715}
5716#[derive(Clone, PartialEq, ::prost::Message)]
5717pub struct SearchMatrixPairsResponse {
5718    #[prost(message, optional, tag = "1")]
5719    pub result: ::core::option::Option<SearchMatrixPairs>,
5720    /// Time spent to process
5721    #[prost(double, tag = "2")]
5722    pub time: f64,
5723    #[prost(message, optional, tag = "3")]
5724    pub usage: ::core::option::Option<Usage>,
5725}
5726#[derive(Clone, PartialEq, ::prost::Message)]
5727pub struct SearchMatrixOffsetsResponse {
5728    #[prost(message, optional, tag = "1")]
5729    pub result: ::core::option::Option<SearchMatrixOffsets>,
5730    /// Time spent to process
5731    #[prost(double, tag = "2")]
5732    pub time: f64,
5733    #[prost(message, optional, tag = "3")]
5734    pub usage: ::core::option::Option<Usage>,
5735}
5736#[derive(Clone, PartialEq, ::prost::Message)]
5737pub struct PointsSelector {
5738    #[prost(oneof = "points_selector::PointsSelectorOneOf", tags = "1, 2")]
5739    pub points_selector_one_of: ::core::option::Option<
5740        points_selector::PointsSelectorOneOf,
5741    >,
5742}
5743/// Nested message and enum types in `PointsSelector`.
5744pub mod points_selector {
5745    #[derive(Clone, PartialEq, ::prost::Oneof)]
5746    pub enum PointsSelectorOneOf {
5747        #[prost(message, tag = "1")]
5748        Points(super::PointsIdsList),
5749        #[prost(message, tag = "2")]
5750        Filter(super::Filter),
5751    }
5752}
5753#[derive(Clone, PartialEq, ::prost::Message)]
5754pub struct PointsIdsList {
5755    #[prost(message, repeated, tag = "1")]
5756    pub ids: ::prost::alloc::vec::Vec<PointId>,
5757}
5758#[derive(Clone, PartialEq, ::prost::Message)]
5759pub struct PointStruct {
5760    #[prost(message, optional, tag = "1")]
5761    pub id: ::core::option::Option<PointId>,
5762    #[prost(map = "string, message", tag = "3")]
5763    pub payload: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
5764    #[prost(message, optional, tag = "4")]
5765    pub vectors: ::core::option::Option<Vectors>,
5766}
5767/// ---------------------------------------------
5768/// ----------- Measurements collector ----------
5769/// ---------------------------------------------
5770#[derive(Clone, PartialEq, ::prost::Message)]
5771pub struct Usage {
5772    #[prost(message, optional, tag = "1")]
5773    pub hardware: ::core::option::Option<HardwareUsage>,
5774    #[prost(message, optional, tag = "2")]
5775    pub inference: ::core::option::Option<InferenceUsage>,
5776}
5777#[derive(Clone, PartialEq, ::prost::Message)]
5778pub struct InferenceUsage {
5779    #[prost(map = "string, message", tag = "1")]
5780    pub models: ::std::collections::HashMap<::prost::alloc::string::String, ModelUsage>,
5781}
5782#[derive(Clone, Copy, PartialEq, ::prost::Message)]
5783pub struct ModelUsage {
5784    #[prost(uint64, tag = "1")]
5785    pub tokens: u64,
5786}
5787#[derive(Clone, Copy, PartialEq, ::prost::Message)]
5788pub struct HardwareUsage {
5789    #[prost(uint64, tag = "1")]
5790    pub cpu: u64,
5791    #[prost(uint64, tag = "2")]
5792    pub payload_io_read: u64,
5793    #[prost(uint64, tag = "3")]
5794    pub payload_io_write: u64,
5795    #[prost(uint64, tag = "4")]
5796    pub payload_index_io_read: u64,
5797    #[prost(uint64, tag = "5")]
5798    pub payload_index_io_write: u64,
5799    #[prost(uint64, tag = "6")]
5800    pub vector_io_read: u64,
5801    #[prost(uint64, tag = "7")]
5802    pub vector_io_write: u64,
5803}
5804#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5805#[repr(i32)]
5806pub enum WriteOrderingType {
5807    /// Write operations may be reordered, works faster, default
5808    Weak = 0,
5809    /// Write operations go through dynamically selected leader,
5810    /// may be inconsistent for a short period of time in case of leader change
5811    Medium = 1,
5812    /// Write operations go through the permanent leader, consistent,
5813    /// but may be unavailable if leader is down
5814    Strong = 2,
5815}
5816impl WriteOrderingType {
5817    /// String value of the enum field names used in the ProtoBuf definition.
5818    ///
5819    /// The values are not transformed in any way and thus are considered stable
5820    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5821    pub fn as_str_name(&self) -> &'static str {
5822        match self {
5823            Self::Weak => "Weak",
5824            Self::Medium => "Medium",
5825            Self::Strong => "Strong",
5826        }
5827    }
5828    /// Creates an enum from field names used in the ProtoBuf definition.
5829    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5830        match value {
5831            "Weak" => Some(Self::Weak),
5832            "Medium" => Some(Self::Medium),
5833            "Strong" => Some(Self::Strong),
5834            _ => None,
5835        }
5836    }
5837}
5838/// Defines the mode of the upsert operation
5839#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5840#[repr(i32)]
5841pub enum UpdateMode {
5842    /// Default mode - insert new points, update existing points
5843    Upsert = 0,
5844    /// Only insert new points, do not update existing points
5845    InsertOnly = 1,
5846    /// Only update existing points, do not insert new points
5847    UpdateOnly = 2,
5848}
5849impl UpdateMode {
5850    /// String value of the enum field names used in the ProtoBuf definition.
5851    ///
5852    /// The values are not transformed in any way and thus are considered stable
5853    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5854    pub fn as_str_name(&self) -> &'static str {
5855        match self {
5856            Self::Upsert => "Upsert",
5857            Self::InsertOnly => "InsertOnly",
5858            Self::UpdateOnly => "UpdateOnly",
5859        }
5860    }
5861    /// Creates an enum from field names used in the ProtoBuf definition.
5862    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5863        match value {
5864            "Upsert" => Some(Self::Upsert),
5865            "InsertOnly" => Some(Self::InsertOnly),
5866            "UpdateOnly" => Some(Self::UpdateOnly),
5867            _ => None,
5868        }
5869    }
5870}
5871#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5872#[repr(i32)]
5873pub enum ReadConsistencyType {
5874    /// Send request to all nodes and return points which are present on all of them
5875    All = 0,
5876    /// Send requests to all nodes and return points which are present on majority of them
5877    Majority = 1,
5878    /// Send requests to half + 1 nodes, return points which are present on all of them
5879    Quorum = 2,
5880}
5881impl ReadConsistencyType {
5882    /// String value of the enum field names used in the ProtoBuf definition.
5883    ///
5884    /// The values are not transformed in any way and thus are considered stable
5885    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5886    pub fn as_str_name(&self) -> &'static str {
5887        match self {
5888            Self::All => "All",
5889            Self::Majority => "Majority",
5890            Self::Quorum => "Quorum",
5891        }
5892    }
5893    /// Creates an enum from field names used in the ProtoBuf definition.
5894    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5895        match value {
5896            "All" => Some(Self::All),
5897            "Majority" => Some(Self::Majority),
5898            "Quorum" => Some(Self::Quorum),
5899            _ => None,
5900        }
5901    }
5902}
5903#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5904#[repr(i32)]
5905pub enum FieldType {
5906    Keyword = 0,
5907    Integer = 1,
5908    Float = 2,
5909    Geo = 3,
5910    Text = 4,
5911    Bool = 5,
5912    Datetime = 6,
5913    Uuid = 7,
5914}
5915impl FieldType {
5916    /// String value of the enum field names used in the ProtoBuf definition.
5917    ///
5918    /// The values are not transformed in any way and thus are considered stable
5919    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5920    pub fn as_str_name(&self) -> &'static str {
5921        match self {
5922            Self::Keyword => "FieldTypeKeyword",
5923            Self::Integer => "FieldTypeInteger",
5924            Self::Float => "FieldTypeFloat",
5925            Self::Geo => "FieldTypeGeo",
5926            Self::Text => "FieldTypeText",
5927            Self::Bool => "FieldTypeBool",
5928            Self::Datetime => "FieldTypeDatetime",
5929            Self::Uuid => "FieldTypeUuid",
5930        }
5931    }
5932    /// Creates an enum from field names used in the ProtoBuf definition.
5933    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5934        match value {
5935            "FieldTypeKeyword" => Some(Self::Keyword),
5936            "FieldTypeInteger" => Some(Self::Integer),
5937            "FieldTypeFloat" => Some(Self::Float),
5938            "FieldTypeGeo" => Some(Self::Geo),
5939            "FieldTypeText" => Some(Self::Text),
5940            "FieldTypeBool" => Some(Self::Bool),
5941            "FieldTypeDatetime" => Some(Self::Datetime),
5942            "FieldTypeUuid" => Some(Self::Uuid),
5943            _ => None,
5944        }
5945    }
5946}
5947#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5948#[repr(i32)]
5949pub enum Direction {
5950    Asc = 0,
5951    Desc = 1,
5952}
5953impl Direction {
5954    /// String value of the enum field names used in the ProtoBuf definition.
5955    ///
5956    /// The values are not transformed in any way and thus are considered stable
5957    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5958    pub fn as_str_name(&self) -> &'static str {
5959        match self {
5960            Self::Asc => "Asc",
5961            Self::Desc => "Desc",
5962        }
5963    }
5964    /// Creates an enum from field names used in the ProtoBuf definition.
5965    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5966        match value {
5967            "Asc" => Some(Self::Asc),
5968            "Desc" => Some(Self::Desc),
5969            _ => None,
5970        }
5971    }
5972}
5973/// How to use positive and negative vectors to find the results, default is `AverageVector`.
5974#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5975#[repr(i32)]
5976pub enum RecommendStrategy {
5977    /// Average positive and negative vectors and create a single query with the formula
5978    /// `query = avg_pos + avg_pos - avg_neg`. Then performs normal search.
5979    AverageVector = 0,
5980    /// Uses custom search objective. Each candidate is compared against all
5981    /// examples, its score is then chosen from the `max(max_pos_score, max_neg_score)`.
5982    /// If the `max_neg_score` is chosen then it is squared and negated.
5983    BestScore = 1,
5984    /// Uses custom search objective. Compares against all inputs, sums all the scores.
5985    /// Scores against positive vectors are added, against negatives are subtracted.
5986    SumScores = 2,
5987}
5988impl RecommendStrategy {
5989    /// String value of the enum field names used in the ProtoBuf definition.
5990    ///
5991    /// The values are not transformed in any way and thus are considered stable
5992    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5993    pub fn as_str_name(&self) -> &'static str {
5994        match self {
5995            Self::AverageVector => "AverageVector",
5996            Self::BestScore => "BestScore",
5997            Self::SumScores => "SumScores",
5998        }
5999    }
6000    /// Creates an enum from field names used in the ProtoBuf definition.
6001    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6002        match value {
6003            "AverageVector" => Some(Self::AverageVector),
6004            "BestScore" => Some(Self::BestScore),
6005            "SumScores" => Some(Self::SumScores),
6006            _ => None,
6007        }
6008    }
6009}
6010#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6011#[repr(i32)]
6012pub enum Fusion {
6013    /// Reciprocal Rank Fusion (with default parameters)
6014    Rrf = 0,
6015    /// Distribution-Based Score Fusion
6016    Dbsf = 1,
6017}
6018impl Fusion {
6019    /// String value of the enum field names used in the ProtoBuf definition.
6020    ///
6021    /// The values are not transformed in any way and thus are considered stable
6022    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6023    pub fn as_str_name(&self) -> &'static str {
6024        match self {
6025            Self::Rrf => "RRF",
6026            Self::Dbsf => "DBSF",
6027        }
6028    }
6029    /// Creates an enum from field names used in the ProtoBuf definition.
6030    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6031        match value {
6032            "RRF" => Some(Self::Rrf),
6033            "DBSF" => Some(Self::Dbsf),
6034            _ => None,
6035        }
6036    }
6037}
6038/// Sample points from the collection
6039///
6040/// Available sampling methods:
6041///
6042/// * `random` - Random sampling
6043#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6044#[repr(i32)]
6045pub enum Sample {
6046    Random = 0,
6047}
6048impl Sample {
6049    /// String value of the enum field names used in the ProtoBuf definition.
6050    ///
6051    /// The values are not transformed in any way and thus are considered stable
6052    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6053    pub fn as_str_name(&self) -> &'static str {
6054        match self {
6055            Self::Random => "Random",
6056        }
6057    }
6058    /// Creates an enum from field names used in the ProtoBuf definition.
6059    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6060        match value {
6061            "Random" => Some(Self::Random),
6062            _ => None,
6063        }
6064    }
6065}
6066#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6067#[repr(i32)]
6068pub enum UpdateStatus {
6069    UnknownUpdateStatus = 0,
6070    /// Update is received, but not processed yet
6071    Acknowledged = 1,
6072    /// Update is applied and ready for search
6073    Completed = 2,
6074    /// Internal: update is rejected due to an outdated clock
6075    ClockRejected = 3,
6076    /// Timeout of awaited operations
6077    WaitTimeout = 4,
6078}
6079impl UpdateStatus {
6080    /// String value of the enum field names used in the ProtoBuf definition.
6081    ///
6082    /// The values are not transformed in any way and thus are considered stable
6083    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6084    pub fn as_str_name(&self) -> &'static str {
6085        match self {
6086            Self::UnknownUpdateStatus => "UnknownUpdateStatus",
6087            Self::Acknowledged => "Acknowledged",
6088            Self::Completed => "Completed",
6089            Self::ClockRejected => "ClockRejected",
6090            Self::WaitTimeout => "WaitTimeout",
6091        }
6092    }
6093    /// Creates an enum from field names used in the ProtoBuf definition.
6094    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6095        match value {
6096            "UnknownUpdateStatus" => Some(Self::UnknownUpdateStatus),
6097            "Acknowledged" => Some(Self::Acknowledged),
6098            "Completed" => Some(Self::Completed),
6099            "ClockRejected" => Some(Self::ClockRejected),
6100            "WaitTimeout" => Some(Self::WaitTimeout),
6101            _ => None,
6102        }
6103    }
6104}
6105/// Generated client implementations.
6106pub mod points_client {
6107    #![allow(
6108        unused_variables,
6109        dead_code,
6110        missing_docs,
6111        clippy::wildcard_imports,
6112        clippy::let_unit_value,
6113    )]
6114    use tonic::codegen::*;
6115    use tonic::codegen::http::Uri;
6116    #[derive(Debug, Clone)]
6117    pub struct PointsClient<T> {
6118        inner: tonic::client::Grpc<T>,
6119    }
6120    impl PointsClient<tonic::transport::Channel> {
6121        /// Attempt to create a new client by connecting to a given endpoint.
6122        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
6123        where
6124            D: TryInto<tonic::transport::Endpoint>,
6125            D::Error: Into<StdError>,
6126        {
6127            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
6128            Ok(Self::new(conn))
6129        }
6130    }
6131    impl<T> PointsClient<T>
6132    where
6133        T: tonic::client::GrpcService<tonic::body::BoxBody>,
6134        T::Error: Into<StdError>,
6135        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
6136        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
6137    {
6138        pub fn new(inner: T) -> Self {
6139            let inner = tonic::client::Grpc::new(inner);
6140            Self { inner }
6141        }
6142        pub fn with_origin(inner: T, origin: Uri) -> Self {
6143            let inner = tonic::client::Grpc::with_origin(inner, origin);
6144            Self { inner }
6145        }
6146        pub fn with_interceptor<F>(
6147            inner: T,
6148            interceptor: F,
6149        ) -> PointsClient<InterceptedService<T, F>>
6150        where
6151            F: tonic::service::Interceptor,
6152            T::ResponseBody: Default,
6153            T: tonic::codegen::Service<
6154                http::Request<tonic::body::BoxBody>,
6155                Response = http::Response<
6156                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
6157                >,
6158            >,
6159            <T as tonic::codegen::Service<
6160                http::Request<tonic::body::BoxBody>,
6161            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
6162        {
6163            PointsClient::new(InterceptedService::new(inner, interceptor))
6164        }
6165        /// Compress requests with the given encoding.
6166        ///
6167        /// This requires the server to support it otherwise it might respond with an
6168        /// error.
6169        #[must_use]
6170        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
6171            self.inner = self.inner.send_compressed(encoding);
6172            self
6173        }
6174        /// Enable decompressing responses.
6175        #[must_use]
6176        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
6177            self.inner = self.inner.accept_compressed(encoding);
6178            self
6179        }
6180        /// Limits the maximum size of a decoded message.
6181        ///
6182        /// Default: `4MB`
6183        #[must_use]
6184        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
6185            self.inner = self.inner.max_decoding_message_size(limit);
6186            self
6187        }
6188        /// Limits the maximum size of an encoded message.
6189        ///
6190        /// Default: `usize::MAX`
6191        #[must_use]
6192        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
6193            self.inner = self.inner.max_encoding_message_size(limit);
6194            self
6195        }
6196        /// Perform insert + updates on points.
6197        /// If a point with a given ID already exists - it will be overwritten.
6198        pub async fn upsert(
6199            &mut self,
6200            request: impl tonic::IntoRequest<super::UpsertPoints>,
6201        ) -> std::result::Result<
6202            tonic::Response<super::PointsOperationResponse>,
6203            tonic::Status,
6204        > {
6205            self.inner
6206                .ready()
6207                .await
6208                .map_err(|e| {
6209                    tonic::Status::unknown(
6210                        format!("Service was not ready: {}", e.into()),
6211                    )
6212                })?;
6213            let codec = tonic::codec::ProstCodec::default();
6214            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Upsert");
6215            let mut req = request.into_request();
6216            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Upsert"));
6217            self.inner.unary(req, path, codec).await
6218        }
6219        /// Delete points
6220        pub async fn delete(
6221            &mut self,
6222            request: impl tonic::IntoRequest<super::DeletePoints>,
6223        ) -> std::result::Result<
6224            tonic::Response<super::PointsOperationResponse>,
6225            tonic::Status,
6226        > {
6227            self.inner
6228                .ready()
6229                .await
6230                .map_err(|e| {
6231                    tonic::Status::unknown(
6232                        format!("Service was not ready: {}", e.into()),
6233                    )
6234                })?;
6235            let codec = tonic::codec::ProstCodec::default();
6236            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Delete");
6237            let mut req = request.into_request();
6238            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Delete"));
6239            self.inner.unary(req, path, codec).await
6240        }
6241        /// Retrieve points
6242        pub async fn get(
6243            &mut self,
6244            request: impl tonic::IntoRequest<super::GetPoints>,
6245        ) -> std::result::Result<tonic::Response<super::GetResponse>, tonic::Status> {
6246            self.inner
6247                .ready()
6248                .await
6249                .map_err(|e| {
6250                    tonic::Status::unknown(
6251                        format!("Service was not ready: {}", e.into()),
6252                    )
6253                })?;
6254            let codec = tonic::codec::ProstCodec::default();
6255            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Get");
6256            let mut req = request.into_request();
6257            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Get"));
6258            self.inner.unary(req, path, codec).await
6259        }
6260        /// Update named vectors for point
6261        pub async fn update_vectors(
6262            &mut self,
6263            request: impl tonic::IntoRequest<super::UpdatePointVectors>,
6264        ) -> std::result::Result<
6265            tonic::Response<super::PointsOperationResponse>,
6266            tonic::Status,
6267        > {
6268            self.inner
6269                .ready()
6270                .await
6271                .map_err(|e| {
6272                    tonic::Status::unknown(
6273                        format!("Service was not ready: {}", e.into()),
6274                    )
6275                })?;
6276            let codec = tonic::codec::ProstCodec::default();
6277            let path = http::uri::PathAndQuery::from_static(
6278                "/qdrant.Points/UpdateVectors",
6279            );
6280            let mut req = request.into_request();
6281            req.extensions_mut()
6282                .insert(GrpcMethod::new("qdrant.Points", "UpdateVectors"));
6283            self.inner.unary(req, path, codec).await
6284        }
6285        /// Delete named vectors for points
6286        pub async fn delete_vectors(
6287            &mut self,
6288            request: impl tonic::IntoRequest<super::DeletePointVectors>,
6289        ) -> std::result::Result<
6290            tonic::Response<super::PointsOperationResponse>,
6291            tonic::Status,
6292        > {
6293            self.inner
6294                .ready()
6295                .await
6296                .map_err(|e| {
6297                    tonic::Status::unknown(
6298                        format!("Service was not ready: {}", e.into()),
6299                    )
6300                })?;
6301            let codec = tonic::codec::ProstCodec::default();
6302            let path = http::uri::PathAndQuery::from_static(
6303                "/qdrant.Points/DeleteVectors",
6304            );
6305            let mut req = request.into_request();
6306            req.extensions_mut()
6307                .insert(GrpcMethod::new("qdrant.Points", "DeleteVectors"));
6308            self.inner.unary(req, path, codec).await
6309        }
6310        /// Set payload for points
6311        pub async fn set_payload(
6312            &mut self,
6313            request: impl tonic::IntoRequest<super::SetPayloadPoints>,
6314        ) -> std::result::Result<
6315            tonic::Response<super::PointsOperationResponse>,
6316            tonic::Status,
6317        > {
6318            self.inner
6319                .ready()
6320                .await
6321                .map_err(|e| {
6322                    tonic::Status::unknown(
6323                        format!("Service was not ready: {}", e.into()),
6324                    )
6325                })?;
6326            let codec = tonic::codec::ProstCodec::default();
6327            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/SetPayload");
6328            let mut req = request.into_request();
6329            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "SetPayload"));
6330            self.inner.unary(req, path, codec).await
6331        }
6332        /// Overwrite payload for points
6333        pub async fn overwrite_payload(
6334            &mut self,
6335            request: impl tonic::IntoRequest<super::SetPayloadPoints>,
6336        ) -> std::result::Result<
6337            tonic::Response<super::PointsOperationResponse>,
6338            tonic::Status,
6339        > {
6340            self.inner
6341                .ready()
6342                .await
6343                .map_err(|e| {
6344                    tonic::Status::unknown(
6345                        format!("Service was not ready: {}", e.into()),
6346                    )
6347                })?;
6348            let codec = tonic::codec::ProstCodec::default();
6349            let path = http::uri::PathAndQuery::from_static(
6350                "/qdrant.Points/OverwritePayload",
6351            );
6352            let mut req = request.into_request();
6353            req.extensions_mut()
6354                .insert(GrpcMethod::new("qdrant.Points", "OverwritePayload"));
6355            self.inner.unary(req, path, codec).await
6356        }
6357        /// Delete specified key payload for points
6358        pub async fn delete_payload(
6359            &mut self,
6360            request: impl tonic::IntoRequest<super::DeletePayloadPoints>,
6361        ) -> std::result::Result<
6362            tonic::Response<super::PointsOperationResponse>,
6363            tonic::Status,
6364        > {
6365            self.inner
6366                .ready()
6367                .await
6368                .map_err(|e| {
6369                    tonic::Status::unknown(
6370                        format!("Service was not ready: {}", e.into()),
6371                    )
6372                })?;
6373            let codec = tonic::codec::ProstCodec::default();
6374            let path = http::uri::PathAndQuery::from_static(
6375                "/qdrant.Points/DeletePayload",
6376            );
6377            let mut req = request.into_request();
6378            req.extensions_mut()
6379                .insert(GrpcMethod::new("qdrant.Points", "DeletePayload"));
6380            self.inner.unary(req, path, codec).await
6381        }
6382        /// Remove all payload for specified points
6383        pub async fn clear_payload(
6384            &mut self,
6385            request: impl tonic::IntoRequest<super::ClearPayloadPoints>,
6386        ) -> std::result::Result<
6387            tonic::Response<super::PointsOperationResponse>,
6388            tonic::Status,
6389        > {
6390            self.inner
6391                .ready()
6392                .await
6393                .map_err(|e| {
6394                    tonic::Status::unknown(
6395                        format!("Service was not ready: {}", e.into()),
6396                    )
6397                })?;
6398            let codec = tonic::codec::ProstCodec::default();
6399            let path = http::uri::PathAndQuery::from_static(
6400                "/qdrant.Points/ClearPayload",
6401            );
6402            let mut req = request.into_request();
6403            req.extensions_mut()
6404                .insert(GrpcMethod::new("qdrant.Points", "ClearPayload"));
6405            self.inner.unary(req, path, codec).await
6406        }
6407        /// Create index for field in collection
6408        pub async fn create_field_index(
6409            &mut self,
6410            request: impl tonic::IntoRequest<super::CreateFieldIndexCollection>,
6411        ) -> std::result::Result<
6412            tonic::Response<super::PointsOperationResponse>,
6413            tonic::Status,
6414        > {
6415            self.inner
6416                .ready()
6417                .await
6418                .map_err(|e| {
6419                    tonic::Status::unknown(
6420                        format!("Service was not ready: {}", e.into()),
6421                    )
6422                })?;
6423            let codec = tonic::codec::ProstCodec::default();
6424            let path = http::uri::PathAndQuery::from_static(
6425                "/qdrant.Points/CreateFieldIndex",
6426            );
6427            let mut req = request.into_request();
6428            req.extensions_mut()
6429                .insert(GrpcMethod::new("qdrant.Points", "CreateFieldIndex"));
6430            self.inner.unary(req, path, codec).await
6431        }
6432        /// Delete field index for collection
6433        pub async fn delete_field_index(
6434            &mut self,
6435            request: impl tonic::IntoRequest<super::DeleteFieldIndexCollection>,
6436        ) -> std::result::Result<
6437            tonic::Response<super::PointsOperationResponse>,
6438            tonic::Status,
6439        > {
6440            self.inner
6441                .ready()
6442                .await
6443                .map_err(|e| {
6444                    tonic::Status::unknown(
6445                        format!("Service was not ready: {}", e.into()),
6446                    )
6447                })?;
6448            let codec = tonic::codec::ProstCodec::default();
6449            let path = http::uri::PathAndQuery::from_static(
6450                "/qdrant.Points/DeleteFieldIndex",
6451            );
6452            let mut req = request.into_request();
6453            req.extensions_mut()
6454                .insert(GrpcMethod::new("qdrant.Points", "DeleteFieldIndex"));
6455            self.inner.unary(req, path, codec).await
6456        }
6457        /// Create a new named vector on the collection
6458        pub async fn create_vector_name(
6459            &mut self,
6460            request: impl tonic::IntoRequest<super::CreateVectorNameRequest>,
6461        ) -> std::result::Result<
6462            tonic::Response<super::PointsOperationResponse>,
6463            tonic::Status,
6464        > {
6465            self.inner
6466                .ready()
6467                .await
6468                .map_err(|e| {
6469                    tonic::Status::unknown(
6470                        format!("Service was not ready: {}", e.into()),
6471                    )
6472                })?;
6473            let codec = tonic::codec::ProstCodec::default();
6474            let path = http::uri::PathAndQuery::from_static(
6475                "/qdrant.Points/CreateVectorName",
6476            );
6477            let mut req = request.into_request();
6478            req.extensions_mut()
6479                .insert(GrpcMethod::new("qdrant.Points", "CreateVectorName"));
6480            self.inner.unary(req, path, codec).await
6481        }
6482        /// Delete a named vector from the collection
6483        pub async fn delete_vector_name(
6484            &mut self,
6485            request: impl tonic::IntoRequest<super::DeleteVectorNameRequest>,
6486        ) -> std::result::Result<
6487            tonic::Response<super::PointsOperationResponse>,
6488            tonic::Status,
6489        > {
6490            self.inner
6491                .ready()
6492                .await
6493                .map_err(|e| {
6494                    tonic::Status::unknown(
6495                        format!("Service was not ready: {}", e.into()),
6496                    )
6497                })?;
6498            let codec = tonic::codec::ProstCodec::default();
6499            let path = http::uri::PathAndQuery::from_static(
6500                "/qdrant.Points/DeleteVectorName",
6501            );
6502            let mut req = request.into_request();
6503            req.extensions_mut()
6504                .insert(GrpcMethod::new("qdrant.Points", "DeleteVectorName"));
6505            self.inner.unary(req, path, codec).await
6506        }
6507        /// Retrieve closest points based on vector similarity and given filtering
6508        /// conditions
6509        pub async fn search(
6510            &mut self,
6511            request: impl tonic::IntoRequest<super::SearchPoints>,
6512        ) -> std::result::Result<tonic::Response<super::SearchResponse>, tonic::Status> {
6513            self.inner
6514                .ready()
6515                .await
6516                .map_err(|e| {
6517                    tonic::Status::unknown(
6518                        format!("Service was not ready: {}", e.into()),
6519                    )
6520                })?;
6521            let codec = tonic::codec::ProstCodec::default();
6522            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Search");
6523            let mut req = request.into_request();
6524            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Search"));
6525            self.inner.unary(req, path, codec).await
6526        }
6527        /// Retrieve closest points based on vector similarity and given filtering
6528        /// conditions
6529        pub async fn search_batch(
6530            &mut self,
6531            request: impl tonic::IntoRequest<super::SearchBatchPoints>,
6532        ) -> std::result::Result<
6533            tonic::Response<super::SearchBatchResponse>,
6534            tonic::Status,
6535        > {
6536            self.inner
6537                .ready()
6538                .await
6539                .map_err(|e| {
6540                    tonic::Status::unknown(
6541                        format!("Service was not ready: {}", e.into()),
6542                    )
6543                })?;
6544            let codec = tonic::codec::ProstCodec::default();
6545            let path = http::uri::PathAndQuery::from_static(
6546                "/qdrant.Points/SearchBatch",
6547            );
6548            let mut req = request.into_request();
6549            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "SearchBatch"));
6550            self.inner.unary(req, path, codec).await
6551        }
6552        /// Retrieve closest points based on vector similarity and given filtering
6553        /// conditions, grouped by a given field
6554        pub async fn search_groups(
6555            &mut self,
6556            request: impl tonic::IntoRequest<super::SearchPointGroups>,
6557        ) -> std::result::Result<
6558            tonic::Response<super::SearchGroupsResponse>,
6559            tonic::Status,
6560        > {
6561            self.inner
6562                .ready()
6563                .await
6564                .map_err(|e| {
6565                    tonic::Status::unknown(
6566                        format!("Service was not ready: {}", e.into()),
6567                    )
6568                })?;
6569            let codec = tonic::codec::ProstCodec::default();
6570            let path = http::uri::PathAndQuery::from_static(
6571                "/qdrant.Points/SearchGroups",
6572            );
6573            let mut req = request.into_request();
6574            req.extensions_mut()
6575                .insert(GrpcMethod::new("qdrant.Points", "SearchGroups"));
6576            self.inner.unary(req, path, codec).await
6577        }
6578        /// Iterate over all or filtered points
6579        pub async fn scroll(
6580            &mut self,
6581            request: impl tonic::IntoRequest<super::ScrollPoints>,
6582        ) -> std::result::Result<tonic::Response<super::ScrollResponse>, tonic::Status> {
6583            self.inner
6584                .ready()
6585                .await
6586                .map_err(|e| {
6587                    tonic::Status::unknown(
6588                        format!("Service was not ready: {}", e.into()),
6589                    )
6590                })?;
6591            let codec = tonic::codec::ProstCodec::default();
6592            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Scroll");
6593            let mut req = request.into_request();
6594            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Scroll"));
6595            self.inner.unary(req, path, codec).await
6596        }
6597        /// Look for the points which are closer to stored positive examples and at
6598        /// the same time further to negative examples.
6599        pub async fn recommend(
6600            &mut self,
6601            request: impl tonic::IntoRequest<super::RecommendPoints>,
6602        ) -> std::result::Result<
6603            tonic::Response<super::RecommendResponse>,
6604            tonic::Status,
6605        > {
6606            self.inner
6607                .ready()
6608                .await
6609                .map_err(|e| {
6610                    tonic::Status::unknown(
6611                        format!("Service was not ready: {}", e.into()),
6612                    )
6613                })?;
6614            let codec = tonic::codec::ProstCodec::default();
6615            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Recommend");
6616            let mut req = request.into_request();
6617            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Recommend"));
6618            self.inner.unary(req, path, codec).await
6619        }
6620        /// Look for the points which are closer to stored positive examples and at
6621        /// the same time further to negative examples.
6622        pub async fn recommend_batch(
6623            &mut self,
6624            request: impl tonic::IntoRequest<super::RecommendBatchPoints>,
6625        ) -> std::result::Result<
6626            tonic::Response<super::RecommendBatchResponse>,
6627            tonic::Status,
6628        > {
6629            self.inner
6630                .ready()
6631                .await
6632                .map_err(|e| {
6633                    tonic::Status::unknown(
6634                        format!("Service was not ready: {}", e.into()),
6635                    )
6636                })?;
6637            let codec = tonic::codec::ProstCodec::default();
6638            let path = http::uri::PathAndQuery::from_static(
6639                "/qdrant.Points/RecommendBatch",
6640            );
6641            let mut req = request.into_request();
6642            req.extensions_mut()
6643                .insert(GrpcMethod::new("qdrant.Points", "RecommendBatch"));
6644            self.inner.unary(req, path, codec).await
6645        }
6646        /// Look for the points which are closer to stored positive examples and at
6647        /// the same time further to negative examples, grouped by a given field
6648        pub async fn recommend_groups(
6649            &mut self,
6650            request: impl tonic::IntoRequest<super::RecommendPointGroups>,
6651        ) -> std::result::Result<
6652            tonic::Response<super::RecommendGroupsResponse>,
6653            tonic::Status,
6654        > {
6655            self.inner
6656                .ready()
6657                .await
6658                .map_err(|e| {
6659                    tonic::Status::unknown(
6660                        format!("Service was not ready: {}", e.into()),
6661                    )
6662                })?;
6663            let codec = tonic::codec::ProstCodec::default();
6664            let path = http::uri::PathAndQuery::from_static(
6665                "/qdrant.Points/RecommendGroups",
6666            );
6667            let mut req = request.into_request();
6668            req.extensions_mut()
6669                .insert(GrpcMethod::new("qdrant.Points", "RecommendGroups"));
6670            self.inner.unary(req, path, codec).await
6671        }
6672        /// Use context and a target to find the most similar points to the target,
6673        /// constrained by the context.
6674        ///
6675        /// When using only the context (without a target), a special search - called
6676        /// context search - is performed where pairs of points are used to generate a
6677        /// loss that guides the search towards the zone where most positive examples
6678        /// overlap. This means that the score minimizes the scenario of finding a
6679        /// point closer to a negative than to a positive part of a pair.
6680        ///
6681        /// Since the score of a context relates to loss, the maximum score a point
6682        /// can get is 0.0, and it becomes normal that many points can have a score of
6683        /// 0.0.
6684        ///
6685        /// When using target (with or without context), the score behaves a little
6686        /// different: The integer part of the score represents the rank with respect
6687        /// to the context, while the decimal part of the score relates to the
6688        /// distance to the target. The context part of the score for each pair is
6689        /// calculated +1 if the point is closer to a positive than to a negative part
6690        /// of a pair, and -1 otherwise.
6691        pub async fn discover(
6692            &mut self,
6693            request: impl tonic::IntoRequest<super::DiscoverPoints>,
6694        ) -> std::result::Result<
6695            tonic::Response<super::DiscoverResponse>,
6696            tonic::Status,
6697        > {
6698            self.inner
6699                .ready()
6700                .await
6701                .map_err(|e| {
6702                    tonic::Status::unknown(
6703                        format!("Service was not ready: {}", e.into()),
6704                    )
6705                })?;
6706            let codec = tonic::codec::ProstCodec::default();
6707            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Discover");
6708            let mut req = request.into_request();
6709            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Discover"));
6710            self.inner.unary(req, path, codec).await
6711        }
6712        /// Batch request points based on { positive, negative } pairs of examples, and/or a target
6713        pub async fn discover_batch(
6714            &mut self,
6715            request: impl tonic::IntoRequest<super::DiscoverBatchPoints>,
6716        ) -> std::result::Result<
6717            tonic::Response<super::DiscoverBatchResponse>,
6718            tonic::Status,
6719        > {
6720            self.inner
6721                .ready()
6722                .await
6723                .map_err(|e| {
6724                    tonic::Status::unknown(
6725                        format!("Service was not ready: {}", e.into()),
6726                    )
6727                })?;
6728            let codec = tonic::codec::ProstCodec::default();
6729            let path = http::uri::PathAndQuery::from_static(
6730                "/qdrant.Points/DiscoverBatch",
6731            );
6732            let mut req = request.into_request();
6733            req.extensions_mut()
6734                .insert(GrpcMethod::new("qdrant.Points", "DiscoverBatch"));
6735            self.inner.unary(req, path, codec).await
6736        }
6737        /// Count points in collection with given filtering conditions
6738        pub async fn count(
6739            &mut self,
6740            request: impl tonic::IntoRequest<super::CountPoints>,
6741        ) -> std::result::Result<tonic::Response<super::CountResponse>, tonic::Status> {
6742            self.inner
6743                .ready()
6744                .await
6745                .map_err(|e| {
6746                    tonic::Status::unknown(
6747                        format!("Service was not ready: {}", e.into()),
6748                    )
6749                })?;
6750            let codec = tonic::codec::ProstCodec::default();
6751            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Count");
6752            let mut req = request.into_request();
6753            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Count"));
6754            self.inner.unary(req, path, codec).await
6755        }
6756        /// Perform multiple update operations in one request
6757        pub async fn update_batch(
6758            &mut self,
6759            request: impl tonic::IntoRequest<super::UpdateBatchPoints>,
6760        ) -> std::result::Result<
6761            tonic::Response<super::UpdateBatchResponse>,
6762            tonic::Status,
6763        > {
6764            self.inner
6765                .ready()
6766                .await
6767                .map_err(|e| {
6768                    tonic::Status::unknown(
6769                        format!("Service was not ready: {}", e.into()),
6770                    )
6771                })?;
6772            let codec = tonic::codec::ProstCodec::default();
6773            let path = http::uri::PathAndQuery::from_static(
6774                "/qdrant.Points/UpdateBatch",
6775            );
6776            let mut req = request.into_request();
6777            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "UpdateBatch"));
6778            self.inner.unary(req, path, codec).await
6779        }
6780        /// Universally query points.
6781        /// This endpoint covers all capabilities of search, recommend, discover, filters.
6782        /// But also enables hybrid and multi-stage queries.
6783        pub async fn query(
6784            &mut self,
6785            request: impl tonic::IntoRequest<super::QueryPoints>,
6786        ) -> std::result::Result<tonic::Response<super::QueryResponse>, tonic::Status> {
6787            self.inner
6788                .ready()
6789                .await
6790                .map_err(|e| {
6791                    tonic::Status::unknown(
6792                        format!("Service was not ready: {}", e.into()),
6793                    )
6794                })?;
6795            let codec = tonic::codec::ProstCodec::default();
6796            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Query");
6797            let mut req = request.into_request();
6798            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Query"));
6799            self.inner.unary(req, path, codec).await
6800        }
6801        /// Universally query points in a batch fashion.
6802        /// This endpoint covers all capabilities of search, recommend, discover, filters.
6803        /// But also enables hybrid and multi-stage queries.
6804        pub async fn query_batch(
6805            &mut self,
6806            request: impl tonic::IntoRequest<super::QueryBatchPoints>,
6807        ) -> std::result::Result<
6808            tonic::Response<super::QueryBatchResponse>,
6809            tonic::Status,
6810        > {
6811            self.inner
6812                .ready()
6813                .await
6814                .map_err(|e| {
6815                    tonic::Status::unknown(
6816                        format!("Service was not ready: {}", e.into()),
6817                    )
6818                })?;
6819            let codec = tonic::codec::ProstCodec::default();
6820            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/QueryBatch");
6821            let mut req = request.into_request();
6822            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "QueryBatch"));
6823            self.inner.unary(req, path, codec).await
6824        }
6825        /// Universally query points in a group fashion.
6826        /// This endpoint covers all capabilities of search, recommend, discover, filters.
6827        /// But also enables hybrid and multi-stage queries.
6828        pub async fn query_groups(
6829            &mut self,
6830            request: impl tonic::IntoRequest<super::QueryPointGroups>,
6831        ) -> std::result::Result<
6832            tonic::Response<super::QueryGroupsResponse>,
6833            tonic::Status,
6834        > {
6835            self.inner
6836                .ready()
6837                .await
6838                .map_err(|e| {
6839                    tonic::Status::unknown(
6840                        format!("Service was not ready: {}", e.into()),
6841                    )
6842                })?;
6843            let codec = tonic::codec::ProstCodec::default();
6844            let path = http::uri::PathAndQuery::from_static(
6845                "/qdrant.Points/QueryGroups",
6846            );
6847            let mut req = request.into_request();
6848            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "QueryGroups"));
6849            self.inner.unary(req, path, codec).await
6850        }
6851        /// Perform facet counts.
6852        /// For each value in the field, count the number of points that have this
6853        /// value and match the conditions.
6854        pub async fn facet(
6855            &mut self,
6856            request: impl tonic::IntoRequest<super::FacetCounts>,
6857        ) -> std::result::Result<tonic::Response<super::FacetResponse>, tonic::Status> {
6858            self.inner
6859                .ready()
6860                .await
6861                .map_err(|e| {
6862                    tonic::Status::unknown(
6863                        format!("Service was not ready: {}", e.into()),
6864                    )
6865                })?;
6866            let codec = tonic::codec::ProstCodec::default();
6867            let path = http::uri::PathAndQuery::from_static("/qdrant.Points/Facet");
6868            let mut req = request.into_request();
6869            req.extensions_mut().insert(GrpcMethod::new("qdrant.Points", "Facet"));
6870            self.inner.unary(req, path, codec).await
6871        }
6872        /// Compute distance matrix for sampled points with a pair based output format
6873        pub async fn search_matrix_pairs(
6874            &mut self,
6875            request: impl tonic::IntoRequest<super::SearchMatrixPoints>,
6876        ) -> std::result::Result<
6877            tonic::Response<super::SearchMatrixPairsResponse>,
6878            tonic::Status,
6879        > {
6880            self.inner
6881                .ready()
6882                .await
6883                .map_err(|e| {
6884                    tonic::Status::unknown(
6885                        format!("Service was not ready: {}", e.into()),
6886                    )
6887                })?;
6888            let codec = tonic::codec::ProstCodec::default();
6889            let path = http::uri::PathAndQuery::from_static(
6890                "/qdrant.Points/SearchMatrixPairs",
6891            );
6892            let mut req = request.into_request();
6893            req.extensions_mut()
6894                .insert(GrpcMethod::new("qdrant.Points", "SearchMatrixPairs"));
6895            self.inner.unary(req, path, codec).await
6896        }
6897        /// Compute distance matrix for sampled points with an offset based output format
6898        pub async fn search_matrix_offsets(
6899            &mut self,
6900            request: impl tonic::IntoRequest<super::SearchMatrixPoints>,
6901        ) -> std::result::Result<
6902            tonic::Response<super::SearchMatrixOffsetsResponse>,
6903            tonic::Status,
6904        > {
6905            self.inner
6906                .ready()
6907                .await
6908                .map_err(|e| {
6909                    tonic::Status::unknown(
6910                        format!("Service was not ready: {}", e.into()),
6911                    )
6912                })?;
6913            let codec = tonic::codec::ProstCodec::default();
6914            let path = http::uri::PathAndQuery::from_static(
6915                "/qdrant.Points/SearchMatrixOffsets",
6916            );
6917            let mut req = request.into_request();
6918            req.extensions_mut()
6919                .insert(GrpcMethod::new("qdrant.Points", "SearchMatrixOffsets"));
6920            self.inner.unary(req, path, codec).await
6921        }
6922    }
6923}
6924/// Generated server implementations.
6925pub mod points_server {
6926    #![allow(
6927        unused_variables,
6928        dead_code,
6929        missing_docs,
6930        clippy::wildcard_imports,
6931        clippy::let_unit_value,
6932    )]
6933    use tonic::codegen::*;
6934    /// Generated trait containing gRPC methods that should be implemented for use with PointsServer.
6935    #[async_trait]
6936    pub trait Points: std::marker::Send + std::marker::Sync + 'static {
6937        /// Perform insert + updates on points.
6938        /// If a point with a given ID already exists - it will be overwritten.
6939        async fn upsert(
6940            &self,
6941            request: tonic::Request<super::UpsertPoints>,
6942        ) -> std::result::Result<
6943            tonic::Response<super::PointsOperationResponse>,
6944            tonic::Status,
6945        >;
6946        /// Delete points
6947        async fn delete(
6948            &self,
6949            request: tonic::Request<super::DeletePoints>,
6950        ) -> std::result::Result<
6951            tonic::Response<super::PointsOperationResponse>,
6952            tonic::Status,
6953        >;
6954        /// Retrieve points
6955        async fn get(
6956            &self,
6957            request: tonic::Request<super::GetPoints>,
6958        ) -> std::result::Result<tonic::Response<super::GetResponse>, tonic::Status>;
6959        /// Update named vectors for point
6960        async fn update_vectors(
6961            &self,
6962            request: tonic::Request<super::UpdatePointVectors>,
6963        ) -> std::result::Result<
6964            tonic::Response<super::PointsOperationResponse>,
6965            tonic::Status,
6966        >;
6967        /// Delete named vectors for points
6968        async fn delete_vectors(
6969            &self,
6970            request: tonic::Request<super::DeletePointVectors>,
6971        ) -> std::result::Result<
6972            tonic::Response<super::PointsOperationResponse>,
6973            tonic::Status,
6974        >;
6975        /// Set payload for points
6976        async fn set_payload(
6977            &self,
6978            request: tonic::Request<super::SetPayloadPoints>,
6979        ) -> std::result::Result<
6980            tonic::Response<super::PointsOperationResponse>,
6981            tonic::Status,
6982        >;
6983        /// Overwrite payload for points
6984        async fn overwrite_payload(
6985            &self,
6986            request: tonic::Request<super::SetPayloadPoints>,
6987        ) -> std::result::Result<
6988            tonic::Response<super::PointsOperationResponse>,
6989            tonic::Status,
6990        >;
6991        /// Delete specified key payload for points
6992        async fn delete_payload(
6993            &self,
6994            request: tonic::Request<super::DeletePayloadPoints>,
6995        ) -> std::result::Result<
6996            tonic::Response<super::PointsOperationResponse>,
6997            tonic::Status,
6998        >;
6999        /// Remove all payload for specified points
7000        async fn clear_payload(
7001            &self,
7002            request: tonic::Request<super::ClearPayloadPoints>,
7003        ) -> std::result::Result<
7004            tonic::Response<super::PointsOperationResponse>,
7005            tonic::Status,
7006        >;
7007        /// Create index for field in collection
7008        async fn create_field_index(
7009            &self,
7010            request: tonic::Request<super::CreateFieldIndexCollection>,
7011        ) -> std::result::Result<
7012            tonic::Response<super::PointsOperationResponse>,
7013            tonic::Status,
7014        >;
7015        /// Delete field index for collection
7016        async fn delete_field_index(
7017            &self,
7018            request: tonic::Request<super::DeleteFieldIndexCollection>,
7019        ) -> std::result::Result<
7020            tonic::Response<super::PointsOperationResponse>,
7021            tonic::Status,
7022        >;
7023        /// Create a new named vector on the collection
7024        async fn create_vector_name(
7025            &self,
7026            request: tonic::Request<super::CreateVectorNameRequest>,
7027        ) -> std::result::Result<
7028            tonic::Response<super::PointsOperationResponse>,
7029            tonic::Status,
7030        >;
7031        /// Delete a named vector from the collection
7032        async fn delete_vector_name(
7033            &self,
7034            request: tonic::Request<super::DeleteVectorNameRequest>,
7035        ) -> std::result::Result<
7036            tonic::Response<super::PointsOperationResponse>,
7037            tonic::Status,
7038        >;
7039        /// Retrieve closest points based on vector similarity and given filtering
7040        /// conditions
7041        async fn search(
7042            &self,
7043            request: tonic::Request<super::SearchPoints>,
7044        ) -> std::result::Result<tonic::Response<super::SearchResponse>, tonic::Status>;
7045        /// Retrieve closest points based on vector similarity and given filtering
7046        /// conditions
7047        async fn search_batch(
7048            &self,
7049            request: tonic::Request<super::SearchBatchPoints>,
7050        ) -> std::result::Result<
7051            tonic::Response<super::SearchBatchResponse>,
7052            tonic::Status,
7053        >;
7054        /// Retrieve closest points based on vector similarity and given filtering
7055        /// conditions, grouped by a given field
7056        async fn search_groups(
7057            &self,
7058            request: tonic::Request<super::SearchPointGroups>,
7059        ) -> std::result::Result<
7060            tonic::Response<super::SearchGroupsResponse>,
7061            tonic::Status,
7062        >;
7063        /// Iterate over all or filtered points
7064        async fn scroll(
7065            &self,
7066            request: tonic::Request<super::ScrollPoints>,
7067        ) -> std::result::Result<tonic::Response<super::ScrollResponse>, tonic::Status>;
7068        /// Look for the points which are closer to stored positive examples and at
7069        /// the same time further to negative examples.
7070        async fn recommend(
7071            &self,
7072            request: tonic::Request<super::RecommendPoints>,
7073        ) -> std::result::Result<
7074            tonic::Response<super::RecommendResponse>,
7075            tonic::Status,
7076        >;
7077        /// Look for the points which are closer to stored positive examples and at
7078        /// the same time further to negative examples.
7079        async fn recommend_batch(
7080            &self,
7081            request: tonic::Request<super::RecommendBatchPoints>,
7082        ) -> std::result::Result<
7083            tonic::Response<super::RecommendBatchResponse>,
7084            tonic::Status,
7085        >;
7086        /// Look for the points which are closer to stored positive examples and at
7087        /// the same time further to negative examples, grouped by a given field
7088        async fn recommend_groups(
7089            &self,
7090            request: tonic::Request<super::RecommendPointGroups>,
7091        ) -> std::result::Result<
7092            tonic::Response<super::RecommendGroupsResponse>,
7093            tonic::Status,
7094        >;
7095        /// Use context and a target to find the most similar points to the target,
7096        /// constrained by the context.
7097        ///
7098        /// When using only the context (without a target), a special search - called
7099        /// context search - is performed where pairs of points are used to generate a
7100        /// loss that guides the search towards the zone where most positive examples
7101        /// overlap. This means that the score minimizes the scenario of finding a
7102        /// point closer to a negative than to a positive part of a pair.
7103        ///
7104        /// Since the score of a context relates to loss, the maximum score a point
7105        /// can get is 0.0, and it becomes normal that many points can have a score of
7106        /// 0.0.
7107        ///
7108        /// When using target (with or without context), the score behaves a little
7109        /// different: The integer part of the score represents the rank with respect
7110        /// to the context, while the decimal part of the score relates to the
7111        /// distance to the target. The context part of the score for each pair is
7112        /// calculated +1 if the point is closer to a positive than to a negative part
7113        /// of a pair, and -1 otherwise.
7114        async fn discover(
7115            &self,
7116            request: tonic::Request<super::DiscoverPoints>,
7117        ) -> std::result::Result<
7118            tonic::Response<super::DiscoverResponse>,
7119            tonic::Status,
7120        >;
7121        /// Batch request points based on { positive, negative } pairs of examples, and/or a target
7122        async fn discover_batch(
7123            &self,
7124            request: tonic::Request<super::DiscoverBatchPoints>,
7125        ) -> std::result::Result<
7126            tonic::Response<super::DiscoverBatchResponse>,
7127            tonic::Status,
7128        >;
7129        /// Count points in collection with given filtering conditions
7130        async fn count(
7131            &self,
7132            request: tonic::Request<super::CountPoints>,
7133        ) -> std::result::Result<tonic::Response<super::CountResponse>, tonic::Status>;
7134        /// Perform multiple update operations in one request
7135        async fn update_batch(
7136            &self,
7137            request: tonic::Request<super::UpdateBatchPoints>,
7138        ) -> std::result::Result<
7139            tonic::Response<super::UpdateBatchResponse>,
7140            tonic::Status,
7141        >;
7142        /// Universally query points.
7143        /// This endpoint covers all capabilities of search, recommend, discover, filters.
7144        /// But also enables hybrid and multi-stage queries.
7145        async fn query(
7146            &self,
7147            request: tonic::Request<super::QueryPoints>,
7148        ) -> std::result::Result<tonic::Response<super::QueryResponse>, tonic::Status>;
7149        /// Universally query points in a batch fashion.
7150        /// This endpoint covers all capabilities of search, recommend, discover, filters.
7151        /// But also enables hybrid and multi-stage queries.
7152        async fn query_batch(
7153            &self,
7154            request: tonic::Request<super::QueryBatchPoints>,
7155        ) -> std::result::Result<
7156            tonic::Response<super::QueryBatchResponse>,
7157            tonic::Status,
7158        >;
7159        /// Universally query points in a group fashion.
7160        /// This endpoint covers all capabilities of search, recommend, discover, filters.
7161        /// But also enables hybrid and multi-stage queries.
7162        async fn query_groups(
7163            &self,
7164            request: tonic::Request<super::QueryPointGroups>,
7165        ) -> std::result::Result<
7166            tonic::Response<super::QueryGroupsResponse>,
7167            tonic::Status,
7168        >;
7169        /// Perform facet counts.
7170        /// For each value in the field, count the number of points that have this
7171        /// value and match the conditions.
7172        async fn facet(
7173            &self,
7174            request: tonic::Request<super::FacetCounts>,
7175        ) -> std::result::Result<tonic::Response<super::FacetResponse>, tonic::Status>;
7176        /// Compute distance matrix for sampled points with a pair based output format
7177        async fn search_matrix_pairs(
7178            &self,
7179            request: tonic::Request<super::SearchMatrixPoints>,
7180        ) -> std::result::Result<
7181            tonic::Response<super::SearchMatrixPairsResponse>,
7182            tonic::Status,
7183        >;
7184        /// Compute distance matrix for sampled points with an offset based output format
7185        async fn search_matrix_offsets(
7186            &self,
7187            request: tonic::Request<super::SearchMatrixPoints>,
7188        ) -> std::result::Result<
7189            tonic::Response<super::SearchMatrixOffsetsResponse>,
7190            tonic::Status,
7191        >;
7192    }
7193    #[derive(Debug)]
7194    pub struct PointsServer<T> {
7195        inner: Arc<T>,
7196        accept_compression_encodings: EnabledCompressionEncodings,
7197        send_compression_encodings: EnabledCompressionEncodings,
7198        max_decoding_message_size: Option<usize>,
7199        max_encoding_message_size: Option<usize>,
7200    }
7201    impl<T> PointsServer<T> {
7202        pub fn new(inner: T) -> Self {
7203            Self::from_arc(Arc::new(inner))
7204        }
7205        pub fn from_arc(inner: Arc<T>) -> Self {
7206            Self {
7207                inner,
7208                accept_compression_encodings: Default::default(),
7209                send_compression_encodings: Default::default(),
7210                max_decoding_message_size: None,
7211                max_encoding_message_size: None,
7212            }
7213        }
7214        pub fn with_interceptor<F>(
7215            inner: T,
7216            interceptor: F,
7217        ) -> InterceptedService<Self, F>
7218        where
7219            F: tonic::service::Interceptor,
7220        {
7221            InterceptedService::new(Self::new(inner), interceptor)
7222        }
7223        /// Enable decompressing requests with the given encoding.
7224        #[must_use]
7225        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
7226            self.accept_compression_encodings.enable(encoding);
7227            self
7228        }
7229        /// Compress responses with the given encoding, if the client supports it.
7230        #[must_use]
7231        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
7232            self.send_compression_encodings.enable(encoding);
7233            self
7234        }
7235        /// Limits the maximum size of a decoded message.
7236        ///
7237        /// Default: `4MB`
7238        #[must_use]
7239        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
7240            self.max_decoding_message_size = Some(limit);
7241            self
7242        }
7243        /// Limits the maximum size of an encoded message.
7244        ///
7245        /// Default: `usize::MAX`
7246        #[must_use]
7247        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
7248            self.max_encoding_message_size = Some(limit);
7249            self
7250        }
7251    }
7252    impl<T, B> tonic::codegen::Service<http::Request<B>> for PointsServer<T>
7253    where
7254        T: Points,
7255        B: Body + std::marker::Send + 'static,
7256        B::Error: Into<StdError> + std::marker::Send + 'static,
7257    {
7258        type Response = http::Response<tonic::body::BoxBody>;
7259        type Error = std::convert::Infallible;
7260        type Future = BoxFuture<Self::Response, Self::Error>;
7261        fn poll_ready(
7262            &mut self,
7263            _cx: &mut Context<'_>,
7264        ) -> Poll<std::result::Result<(), Self::Error>> {
7265            Poll::Ready(Ok(()))
7266        }
7267        fn call(&mut self, req: http::Request<B>) -> Self::Future {
7268            match req.uri().path() {
7269                "/qdrant.Points/Upsert" => {
7270                    #[allow(non_camel_case_types)]
7271                    struct UpsertSvc<T: Points>(pub Arc<T>);
7272                    impl<T: Points> tonic::server::UnaryService<super::UpsertPoints>
7273                    for UpsertSvc<T> {
7274                        type Response = super::PointsOperationResponse;
7275                        type Future = BoxFuture<
7276                            tonic::Response<Self::Response>,
7277                            tonic::Status,
7278                        >;
7279                        fn call(
7280                            &mut self,
7281                            request: tonic::Request<super::UpsertPoints>,
7282                        ) -> Self::Future {
7283                            let inner = Arc::clone(&self.0);
7284                            let fut = async move {
7285                                <T as Points>::upsert(&inner, request).await
7286                            };
7287                            Box::pin(fut)
7288                        }
7289                    }
7290                    let accept_compression_encodings = self.accept_compression_encodings;
7291                    let send_compression_encodings = self.send_compression_encodings;
7292                    let max_decoding_message_size = self.max_decoding_message_size;
7293                    let max_encoding_message_size = self.max_encoding_message_size;
7294                    let inner = self.inner.clone();
7295                    let fut = async move {
7296                        let method = UpsertSvc(inner);
7297                        let codec = tonic::codec::ProstCodec::default();
7298                        let mut grpc = tonic::server::Grpc::new(codec)
7299                            .apply_compression_config(
7300                                accept_compression_encodings,
7301                                send_compression_encodings,
7302                            )
7303                            .apply_max_message_size_config(
7304                                max_decoding_message_size,
7305                                max_encoding_message_size,
7306                            );
7307                        let res = grpc.unary(method, req).await;
7308                        Ok(res)
7309                    };
7310                    Box::pin(fut)
7311                }
7312                "/qdrant.Points/Delete" => {
7313                    #[allow(non_camel_case_types)]
7314                    struct DeleteSvc<T: Points>(pub Arc<T>);
7315                    impl<T: Points> tonic::server::UnaryService<super::DeletePoints>
7316                    for DeleteSvc<T> {
7317                        type Response = super::PointsOperationResponse;
7318                        type Future = BoxFuture<
7319                            tonic::Response<Self::Response>,
7320                            tonic::Status,
7321                        >;
7322                        fn call(
7323                            &mut self,
7324                            request: tonic::Request<super::DeletePoints>,
7325                        ) -> Self::Future {
7326                            let inner = Arc::clone(&self.0);
7327                            let fut = async move {
7328                                <T as Points>::delete(&inner, request).await
7329                            };
7330                            Box::pin(fut)
7331                        }
7332                    }
7333                    let accept_compression_encodings = self.accept_compression_encodings;
7334                    let send_compression_encodings = self.send_compression_encodings;
7335                    let max_decoding_message_size = self.max_decoding_message_size;
7336                    let max_encoding_message_size = self.max_encoding_message_size;
7337                    let inner = self.inner.clone();
7338                    let fut = async move {
7339                        let method = DeleteSvc(inner);
7340                        let codec = tonic::codec::ProstCodec::default();
7341                        let mut grpc = tonic::server::Grpc::new(codec)
7342                            .apply_compression_config(
7343                                accept_compression_encodings,
7344                                send_compression_encodings,
7345                            )
7346                            .apply_max_message_size_config(
7347                                max_decoding_message_size,
7348                                max_encoding_message_size,
7349                            );
7350                        let res = grpc.unary(method, req).await;
7351                        Ok(res)
7352                    };
7353                    Box::pin(fut)
7354                }
7355                "/qdrant.Points/Get" => {
7356                    #[allow(non_camel_case_types)]
7357                    struct GetSvc<T: Points>(pub Arc<T>);
7358                    impl<T: Points> tonic::server::UnaryService<super::GetPoints>
7359                    for GetSvc<T> {
7360                        type Response = super::GetResponse;
7361                        type Future = BoxFuture<
7362                            tonic::Response<Self::Response>,
7363                            tonic::Status,
7364                        >;
7365                        fn call(
7366                            &mut self,
7367                            request: tonic::Request<super::GetPoints>,
7368                        ) -> Self::Future {
7369                            let inner = Arc::clone(&self.0);
7370                            let fut = async move {
7371                                <T as Points>::get(&inner, request).await
7372                            };
7373                            Box::pin(fut)
7374                        }
7375                    }
7376                    let accept_compression_encodings = self.accept_compression_encodings;
7377                    let send_compression_encodings = self.send_compression_encodings;
7378                    let max_decoding_message_size = self.max_decoding_message_size;
7379                    let max_encoding_message_size = self.max_encoding_message_size;
7380                    let inner = self.inner.clone();
7381                    let fut = async move {
7382                        let method = GetSvc(inner);
7383                        let codec = tonic::codec::ProstCodec::default();
7384                        let mut grpc = tonic::server::Grpc::new(codec)
7385                            .apply_compression_config(
7386                                accept_compression_encodings,
7387                                send_compression_encodings,
7388                            )
7389                            .apply_max_message_size_config(
7390                                max_decoding_message_size,
7391                                max_encoding_message_size,
7392                            );
7393                        let res = grpc.unary(method, req).await;
7394                        Ok(res)
7395                    };
7396                    Box::pin(fut)
7397                }
7398                "/qdrant.Points/UpdateVectors" => {
7399                    #[allow(non_camel_case_types)]
7400                    struct UpdateVectorsSvc<T: Points>(pub Arc<T>);
7401                    impl<
7402                        T: Points,
7403                    > tonic::server::UnaryService<super::UpdatePointVectors>
7404                    for UpdateVectorsSvc<T> {
7405                        type Response = super::PointsOperationResponse;
7406                        type Future = BoxFuture<
7407                            tonic::Response<Self::Response>,
7408                            tonic::Status,
7409                        >;
7410                        fn call(
7411                            &mut self,
7412                            request: tonic::Request<super::UpdatePointVectors>,
7413                        ) -> Self::Future {
7414                            let inner = Arc::clone(&self.0);
7415                            let fut = async move {
7416                                <T as Points>::update_vectors(&inner, request).await
7417                            };
7418                            Box::pin(fut)
7419                        }
7420                    }
7421                    let accept_compression_encodings = self.accept_compression_encodings;
7422                    let send_compression_encodings = self.send_compression_encodings;
7423                    let max_decoding_message_size = self.max_decoding_message_size;
7424                    let max_encoding_message_size = self.max_encoding_message_size;
7425                    let inner = self.inner.clone();
7426                    let fut = async move {
7427                        let method = UpdateVectorsSvc(inner);
7428                        let codec = tonic::codec::ProstCodec::default();
7429                        let mut grpc = tonic::server::Grpc::new(codec)
7430                            .apply_compression_config(
7431                                accept_compression_encodings,
7432                                send_compression_encodings,
7433                            )
7434                            .apply_max_message_size_config(
7435                                max_decoding_message_size,
7436                                max_encoding_message_size,
7437                            );
7438                        let res = grpc.unary(method, req).await;
7439                        Ok(res)
7440                    };
7441                    Box::pin(fut)
7442                }
7443                "/qdrant.Points/DeleteVectors" => {
7444                    #[allow(non_camel_case_types)]
7445                    struct DeleteVectorsSvc<T: Points>(pub Arc<T>);
7446                    impl<
7447                        T: Points,
7448                    > tonic::server::UnaryService<super::DeletePointVectors>
7449                    for DeleteVectorsSvc<T> {
7450                        type Response = super::PointsOperationResponse;
7451                        type Future = BoxFuture<
7452                            tonic::Response<Self::Response>,
7453                            tonic::Status,
7454                        >;
7455                        fn call(
7456                            &mut self,
7457                            request: tonic::Request<super::DeletePointVectors>,
7458                        ) -> Self::Future {
7459                            let inner = Arc::clone(&self.0);
7460                            let fut = async move {
7461                                <T as Points>::delete_vectors(&inner, request).await
7462                            };
7463                            Box::pin(fut)
7464                        }
7465                    }
7466                    let accept_compression_encodings = self.accept_compression_encodings;
7467                    let send_compression_encodings = self.send_compression_encodings;
7468                    let max_decoding_message_size = self.max_decoding_message_size;
7469                    let max_encoding_message_size = self.max_encoding_message_size;
7470                    let inner = self.inner.clone();
7471                    let fut = async move {
7472                        let method = DeleteVectorsSvc(inner);
7473                        let codec = tonic::codec::ProstCodec::default();
7474                        let mut grpc = tonic::server::Grpc::new(codec)
7475                            .apply_compression_config(
7476                                accept_compression_encodings,
7477                                send_compression_encodings,
7478                            )
7479                            .apply_max_message_size_config(
7480                                max_decoding_message_size,
7481                                max_encoding_message_size,
7482                            );
7483                        let res = grpc.unary(method, req).await;
7484                        Ok(res)
7485                    };
7486                    Box::pin(fut)
7487                }
7488                "/qdrant.Points/SetPayload" => {
7489                    #[allow(non_camel_case_types)]
7490                    struct SetPayloadSvc<T: Points>(pub Arc<T>);
7491                    impl<T: Points> tonic::server::UnaryService<super::SetPayloadPoints>
7492                    for SetPayloadSvc<T> {
7493                        type Response = super::PointsOperationResponse;
7494                        type Future = BoxFuture<
7495                            tonic::Response<Self::Response>,
7496                            tonic::Status,
7497                        >;
7498                        fn call(
7499                            &mut self,
7500                            request: tonic::Request<super::SetPayloadPoints>,
7501                        ) -> Self::Future {
7502                            let inner = Arc::clone(&self.0);
7503                            let fut = async move {
7504                                <T as Points>::set_payload(&inner, request).await
7505                            };
7506                            Box::pin(fut)
7507                        }
7508                    }
7509                    let accept_compression_encodings = self.accept_compression_encodings;
7510                    let send_compression_encodings = self.send_compression_encodings;
7511                    let max_decoding_message_size = self.max_decoding_message_size;
7512                    let max_encoding_message_size = self.max_encoding_message_size;
7513                    let inner = self.inner.clone();
7514                    let fut = async move {
7515                        let method = SetPayloadSvc(inner);
7516                        let codec = tonic::codec::ProstCodec::default();
7517                        let mut grpc = tonic::server::Grpc::new(codec)
7518                            .apply_compression_config(
7519                                accept_compression_encodings,
7520                                send_compression_encodings,
7521                            )
7522                            .apply_max_message_size_config(
7523                                max_decoding_message_size,
7524                                max_encoding_message_size,
7525                            );
7526                        let res = grpc.unary(method, req).await;
7527                        Ok(res)
7528                    };
7529                    Box::pin(fut)
7530                }
7531                "/qdrant.Points/OverwritePayload" => {
7532                    #[allow(non_camel_case_types)]
7533                    struct OverwritePayloadSvc<T: Points>(pub Arc<T>);
7534                    impl<T: Points> tonic::server::UnaryService<super::SetPayloadPoints>
7535                    for OverwritePayloadSvc<T> {
7536                        type Response = super::PointsOperationResponse;
7537                        type Future = BoxFuture<
7538                            tonic::Response<Self::Response>,
7539                            tonic::Status,
7540                        >;
7541                        fn call(
7542                            &mut self,
7543                            request: tonic::Request<super::SetPayloadPoints>,
7544                        ) -> Self::Future {
7545                            let inner = Arc::clone(&self.0);
7546                            let fut = async move {
7547                                <T as Points>::overwrite_payload(&inner, request).await
7548                            };
7549                            Box::pin(fut)
7550                        }
7551                    }
7552                    let accept_compression_encodings = self.accept_compression_encodings;
7553                    let send_compression_encodings = self.send_compression_encodings;
7554                    let max_decoding_message_size = self.max_decoding_message_size;
7555                    let max_encoding_message_size = self.max_encoding_message_size;
7556                    let inner = self.inner.clone();
7557                    let fut = async move {
7558                        let method = OverwritePayloadSvc(inner);
7559                        let codec = tonic::codec::ProstCodec::default();
7560                        let mut grpc = tonic::server::Grpc::new(codec)
7561                            .apply_compression_config(
7562                                accept_compression_encodings,
7563                                send_compression_encodings,
7564                            )
7565                            .apply_max_message_size_config(
7566                                max_decoding_message_size,
7567                                max_encoding_message_size,
7568                            );
7569                        let res = grpc.unary(method, req).await;
7570                        Ok(res)
7571                    };
7572                    Box::pin(fut)
7573                }
7574                "/qdrant.Points/DeletePayload" => {
7575                    #[allow(non_camel_case_types)]
7576                    struct DeletePayloadSvc<T: Points>(pub Arc<T>);
7577                    impl<
7578                        T: Points,
7579                    > tonic::server::UnaryService<super::DeletePayloadPoints>
7580                    for DeletePayloadSvc<T> {
7581                        type Response = super::PointsOperationResponse;
7582                        type Future = BoxFuture<
7583                            tonic::Response<Self::Response>,
7584                            tonic::Status,
7585                        >;
7586                        fn call(
7587                            &mut self,
7588                            request: tonic::Request<super::DeletePayloadPoints>,
7589                        ) -> Self::Future {
7590                            let inner = Arc::clone(&self.0);
7591                            let fut = async move {
7592                                <T as Points>::delete_payload(&inner, request).await
7593                            };
7594                            Box::pin(fut)
7595                        }
7596                    }
7597                    let accept_compression_encodings = self.accept_compression_encodings;
7598                    let send_compression_encodings = self.send_compression_encodings;
7599                    let max_decoding_message_size = self.max_decoding_message_size;
7600                    let max_encoding_message_size = self.max_encoding_message_size;
7601                    let inner = self.inner.clone();
7602                    let fut = async move {
7603                        let method = DeletePayloadSvc(inner);
7604                        let codec = tonic::codec::ProstCodec::default();
7605                        let mut grpc = tonic::server::Grpc::new(codec)
7606                            .apply_compression_config(
7607                                accept_compression_encodings,
7608                                send_compression_encodings,
7609                            )
7610                            .apply_max_message_size_config(
7611                                max_decoding_message_size,
7612                                max_encoding_message_size,
7613                            );
7614                        let res = grpc.unary(method, req).await;
7615                        Ok(res)
7616                    };
7617                    Box::pin(fut)
7618                }
7619                "/qdrant.Points/ClearPayload" => {
7620                    #[allow(non_camel_case_types)]
7621                    struct ClearPayloadSvc<T: Points>(pub Arc<T>);
7622                    impl<
7623                        T: Points,
7624                    > tonic::server::UnaryService<super::ClearPayloadPoints>
7625                    for ClearPayloadSvc<T> {
7626                        type Response = super::PointsOperationResponse;
7627                        type Future = BoxFuture<
7628                            tonic::Response<Self::Response>,
7629                            tonic::Status,
7630                        >;
7631                        fn call(
7632                            &mut self,
7633                            request: tonic::Request<super::ClearPayloadPoints>,
7634                        ) -> Self::Future {
7635                            let inner = Arc::clone(&self.0);
7636                            let fut = async move {
7637                                <T as Points>::clear_payload(&inner, request).await
7638                            };
7639                            Box::pin(fut)
7640                        }
7641                    }
7642                    let accept_compression_encodings = self.accept_compression_encodings;
7643                    let send_compression_encodings = self.send_compression_encodings;
7644                    let max_decoding_message_size = self.max_decoding_message_size;
7645                    let max_encoding_message_size = self.max_encoding_message_size;
7646                    let inner = self.inner.clone();
7647                    let fut = async move {
7648                        let method = ClearPayloadSvc(inner);
7649                        let codec = tonic::codec::ProstCodec::default();
7650                        let mut grpc = tonic::server::Grpc::new(codec)
7651                            .apply_compression_config(
7652                                accept_compression_encodings,
7653                                send_compression_encodings,
7654                            )
7655                            .apply_max_message_size_config(
7656                                max_decoding_message_size,
7657                                max_encoding_message_size,
7658                            );
7659                        let res = grpc.unary(method, req).await;
7660                        Ok(res)
7661                    };
7662                    Box::pin(fut)
7663                }
7664                "/qdrant.Points/CreateFieldIndex" => {
7665                    #[allow(non_camel_case_types)]
7666                    struct CreateFieldIndexSvc<T: Points>(pub Arc<T>);
7667                    impl<
7668                        T: Points,
7669                    > tonic::server::UnaryService<super::CreateFieldIndexCollection>
7670                    for CreateFieldIndexSvc<T> {
7671                        type Response = super::PointsOperationResponse;
7672                        type Future = BoxFuture<
7673                            tonic::Response<Self::Response>,
7674                            tonic::Status,
7675                        >;
7676                        fn call(
7677                            &mut self,
7678                            request: tonic::Request<super::CreateFieldIndexCollection>,
7679                        ) -> Self::Future {
7680                            let inner = Arc::clone(&self.0);
7681                            let fut = async move {
7682                                <T as Points>::create_field_index(&inner, request).await
7683                            };
7684                            Box::pin(fut)
7685                        }
7686                    }
7687                    let accept_compression_encodings = self.accept_compression_encodings;
7688                    let send_compression_encodings = self.send_compression_encodings;
7689                    let max_decoding_message_size = self.max_decoding_message_size;
7690                    let max_encoding_message_size = self.max_encoding_message_size;
7691                    let inner = self.inner.clone();
7692                    let fut = async move {
7693                        let method = CreateFieldIndexSvc(inner);
7694                        let codec = tonic::codec::ProstCodec::default();
7695                        let mut grpc = tonic::server::Grpc::new(codec)
7696                            .apply_compression_config(
7697                                accept_compression_encodings,
7698                                send_compression_encodings,
7699                            )
7700                            .apply_max_message_size_config(
7701                                max_decoding_message_size,
7702                                max_encoding_message_size,
7703                            );
7704                        let res = grpc.unary(method, req).await;
7705                        Ok(res)
7706                    };
7707                    Box::pin(fut)
7708                }
7709                "/qdrant.Points/DeleteFieldIndex" => {
7710                    #[allow(non_camel_case_types)]
7711                    struct DeleteFieldIndexSvc<T: Points>(pub Arc<T>);
7712                    impl<
7713                        T: Points,
7714                    > tonic::server::UnaryService<super::DeleteFieldIndexCollection>
7715                    for DeleteFieldIndexSvc<T> {
7716                        type Response = super::PointsOperationResponse;
7717                        type Future = BoxFuture<
7718                            tonic::Response<Self::Response>,
7719                            tonic::Status,
7720                        >;
7721                        fn call(
7722                            &mut self,
7723                            request: tonic::Request<super::DeleteFieldIndexCollection>,
7724                        ) -> Self::Future {
7725                            let inner = Arc::clone(&self.0);
7726                            let fut = async move {
7727                                <T as Points>::delete_field_index(&inner, request).await
7728                            };
7729                            Box::pin(fut)
7730                        }
7731                    }
7732                    let accept_compression_encodings = self.accept_compression_encodings;
7733                    let send_compression_encodings = self.send_compression_encodings;
7734                    let max_decoding_message_size = self.max_decoding_message_size;
7735                    let max_encoding_message_size = self.max_encoding_message_size;
7736                    let inner = self.inner.clone();
7737                    let fut = async move {
7738                        let method = DeleteFieldIndexSvc(inner);
7739                        let codec = tonic::codec::ProstCodec::default();
7740                        let mut grpc = tonic::server::Grpc::new(codec)
7741                            .apply_compression_config(
7742                                accept_compression_encodings,
7743                                send_compression_encodings,
7744                            )
7745                            .apply_max_message_size_config(
7746                                max_decoding_message_size,
7747                                max_encoding_message_size,
7748                            );
7749                        let res = grpc.unary(method, req).await;
7750                        Ok(res)
7751                    };
7752                    Box::pin(fut)
7753                }
7754                "/qdrant.Points/CreateVectorName" => {
7755                    #[allow(non_camel_case_types)]
7756                    struct CreateVectorNameSvc<T: Points>(pub Arc<T>);
7757                    impl<
7758                        T: Points,
7759                    > tonic::server::UnaryService<super::CreateVectorNameRequest>
7760                    for CreateVectorNameSvc<T> {
7761                        type Response = super::PointsOperationResponse;
7762                        type Future = BoxFuture<
7763                            tonic::Response<Self::Response>,
7764                            tonic::Status,
7765                        >;
7766                        fn call(
7767                            &mut self,
7768                            request: tonic::Request<super::CreateVectorNameRequest>,
7769                        ) -> Self::Future {
7770                            let inner = Arc::clone(&self.0);
7771                            let fut = async move {
7772                                <T as Points>::create_vector_name(&inner, request).await
7773                            };
7774                            Box::pin(fut)
7775                        }
7776                    }
7777                    let accept_compression_encodings = self.accept_compression_encodings;
7778                    let send_compression_encodings = self.send_compression_encodings;
7779                    let max_decoding_message_size = self.max_decoding_message_size;
7780                    let max_encoding_message_size = self.max_encoding_message_size;
7781                    let inner = self.inner.clone();
7782                    let fut = async move {
7783                        let method = CreateVectorNameSvc(inner);
7784                        let codec = tonic::codec::ProstCodec::default();
7785                        let mut grpc = tonic::server::Grpc::new(codec)
7786                            .apply_compression_config(
7787                                accept_compression_encodings,
7788                                send_compression_encodings,
7789                            )
7790                            .apply_max_message_size_config(
7791                                max_decoding_message_size,
7792                                max_encoding_message_size,
7793                            );
7794                        let res = grpc.unary(method, req).await;
7795                        Ok(res)
7796                    };
7797                    Box::pin(fut)
7798                }
7799                "/qdrant.Points/DeleteVectorName" => {
7800                    #[allow(non_camel_case_types)]
7801                    struct DeleteVectorNameSvc<T: Points>(pub Arc<T>);
7802                    impl<
7803                        T: Points,
7804                    > tonic::server::UnaryService<super::DeleteVectorNameRequest>
7805                    for DeleteVectorNameSvc<T> {
7806                        type Response = super::PointsOperationResponse;
7807                        type Future = BoxFuture<
7808                            tonic::Response<Self::Response>,
7809                            tonic::Status,
7810                        >;
7811                        fn call(
7812                            &mut self,
7813                            request: tonic::Request<super::DeleteVectorNameRequest>,
7814                        ) -> Self::Future {
7815                            let inner = Arc::clone(&self.0);
7816                            let fut = async move {
7817                                <T as Points>::delete_vector_name(&inner, request).await
7818                            };
7819                            Box::pin(fut)
7820                        }
7821                    }
7822                    let accept_compression_encodings = self.accept_compression_encodings;
7823                    let send_compression_encodings = self.send_compression_encodings;
7824                    let max_decoding_message_size = self.max_decoding_message_size;
7825                    let max_encoding_message_size = self.max_encoding_message_size;
7826                    let inner = self.inner.clone();
7827                    let fut = async move {
7828                        let method = DeleteVectorNameSvc(inner);
7829                        let codec = tonic::codec::ProstCodec::default();
7830                        let mut grpc = tonic::server::Grpc::new(codec)
7831                            .apply_compression_config(
7832                                accept_compression_encodings,
7833                                send_compression_encodings,
7834                            )
7835                            .apply_max_message_size_config(
7836                                max_decoding_message_size,
7837                                max_encoding_message_size,
7838                            );
7839                        let res = grpc.unary(method, req).await;
7840                        Ok(res)
7841                    };
7842                    Box::pin(fut)
7843                }
7844                "/qdrant.Points/Search" => {
7845                    #[allow(non_camel_case_types)]
7846                    struct SearchSvc<T: Points>(pub Arc<T>);
7847                    impl<T: Points> tonic::server::UnaryService<super::SearchPoints>
7848                    for SearchSvc<T> {
7849                        type Response = super::SearchResponse;
7850                        type Future = BoxFuture<
7851                            tonic::Response<Self::Response>,
7852                            tonic::Status,
7853                        >;
7854                        fn call(
7855                            &mut self,
7856                            request: tonic::Request<super::SearchPoints>,
7857                        ) -> Self::Future {
7858                            let inner = Arc::clone(&self.0);
7859                            let fut = async move {
7860                                <T as Points>::search(&inner, request).await
7861                            };
7862                            Box::pin(fut)
7863                        }
7864                    }
7865                    let accept_compression_encodings = self.accept_compression_encodings;
7866                    let send_compression_encodings = self.send_compression_encodings;
7867                    let max_decoding_message_size = self.max_decoding_message_size;
7868                    let max_encoding_message_size = self.max_encoding_message_size;
7869                    let inner = self.inner.clone();
7870                    let fut = async move {
7871                        let method = SearchSvc(inner);
7872                        let codec = tonic::codec::ProstCodec::default();
7873                        let mut grpc = tonic::server::Grpc::new(codec)
7874                            .apply_compression_config(
7875                                accept_compression_encodings,
7876                                send_compression_encodings,
7877                            )
7878                            .apply_max_message_size_config(
7879                                max_decoding_message_size,
7880                                max_encoding_message_size,
7881                            );
7882                        let res = grpc.unary(method, req).await;
7883                        Ok(res)
7884                    };
7885                    Box::pin(fut)
7886                }
7887                "/qdrant.Points/SearchBatch" => {
7888                    #[allow(non_camel_case_types)]
7889                    struct SearchBatchSvc<T: Points>(pub Arc<T>);
7890                    impl<T: Points> tonic::server::UnaryService<super::SearchBatchPoints>
7891                    for SearchBatchSvc<T> {
7892                        type Response = super::SearchBatchResponse;
7893                        type Future = BoxFuture<
7894                            tonic::Response<Self::Response>,
7895                            tonic::Status,
7896                        >;
7897                        fn call(
7898                            &mut self,
7899                            request: tonic::Request<super::SearchBatchPoints>,
7900                        ) -> Self::Future {
7901                            let inner = Arc::clone(&self.0);
7902                            let fut = async move {
7903                                <T as Points>::search_batch(&inner, request).await
7904                            };
7905                            Box::pin(fut)
7906                        }
7907                    }
7908                    let accept_compression_encodings = self.accept_compression_encodings;
7909                    let send_compression_encodings = self.send_compression_encodings;
7910                    let max_decoding_message_size = self.max_decoding_message_size;
7911                    let max_encoding_message_size = self.max_encoding_message_size;
7912                    let inner = self.inner.clone();
7913                    let fut = async move {
7914                        let method = SearchBatchSvc(inner);
7915                        let codec = tonic::codec::ProstCodec::default();
7916                        let mut grpc = tonic::server::Grpc::new(codec)
7917                            .apply_compression_config(
7918                                accept_compression_encodings,
7919                                send_compression_encodings,
7920                            )
7921                            .apply_max_message_size_config(
7922                                max_decoding_message_size,
7923                                max_encoding_message_size,
7924                            );
7925                        let res = grpc.unary(method, req).await;
7926                        Ok(res)
7927                    };
7928                    Box::pin(fut)
7929                }
7930                "/qdrant.Points/SearchGroups" => {
7931                    #[allow(non_camel_case_types)]
7932                    struct SearchGroupsSvc<T: Points>(pub Arc<T>);
7933                    impl<T: Points> tonic::server::UnaryService<super::SearchPointGroups>
7934                    for SearchGroupsSvc<T> {
7935                        type Response = super::SearchGroupsResponse;
7936                        type Future = BoxFuture<
7937                            tonic::Response<Self::Response>,
7938                            tonic::Status,
7939                        >;
7940                        fn call(
7941                            &mut self,
7942                            request: tonic::Request<super::SearchPointGroups>,
7943                        ) -> Self::Future {
7944                            let inner = Arc::clone(&self.0);
7945                            let fut = async move {
7946                                <T as Points>::search_groups(&inner, request).await
7947                            };
7948                            Box::pin(fut)
7949                        }
7950                    }
7951                    let accept_compression_encodings = self.accept_compression_encodings;
7952                    let send_compression_encodings = self.send_compression_encodings;
7953                    let max_decoding_message_size = self.max_decoding_message_size;
7954                    let max_encoding_message_size = self.max_encoding_message_size;
7955                    let inner = self.inner.clone();
7956                    let fut = async move {
7957                        let method = SearchGroupsSvc(inner);
7958                        let codec = tonic::codec::ProstCodec::default();
7959                        let mut grpc = tonic::server::Grpc::new(codec)
7960                            .apply_compression_config(
7961                                accept_compression_encodings,
7962                                send_compression_encodings,
7963                            )
7964                            .apply_max_message_size_config(
7965                                max_decoding_message_size,
7966                                max_encoding_message_size,
7967                            );
7968                        let res = grpc.unary(method, req).await;
7969                        Ok(res)
7970                    };
7971                    Box::pin(fut)
7972                }
7973                "/qdrant.Points/Scroll" => {
7974                    #[allow(non_camel_case_types)]
7975                    struct ScrollSvc<T: Points>(pub Arc<T>);
7976                    impl<T: Points> tonic::server::UnaryService<super::ScrollPoints>
7977                    for ScrollSvc<T> {
7978                        type Response = super::ScrollResponse;
7979                        type Future = BoxFuture<
7980                            tonic::Response<Self::Response>,
7981                            tonic::Status,
7982                        >;
7983                        fn call(
7984                            &mut self,
7985                            request: tonic::Request<super::ScrollPoints>,
7986                        ) -> Self::Future {
7987                            let inner = Arc::clone(&self.0);
7988                            let fut = async move {
7989                                <T as Points>::scroll(&inner, request).await
7990                            };
7991                            Box::pin(fut)
7992                        }
7993                    }
7994                    let accept_compression_encodings = self.accept_compression_encodings;
7995                    let send_compression_encodings = self.send_compression_encodings;
7996                    let max_decoding_message_size = self.max_decoding_message_size;
7997                    let max_encoding_message_size = self.max_encoding_message_size;
7998                    let inner = self.inner.clone();
7999                    let fut = async move {
8000                        let method = ScrollSvc(inner);
8001                        let codec = tonic::codec::ProstCodec::default();
8002                        let mut grpc = tonic::server::Grpc::new(codec)
8003                            .apply_compression_config(
8004                                accept_compression_encodings,
8005                                send_compression_encodings,
8006                            )
8007                            .apply_max_message_size_config(
8008                                max_decoding_message_size,
8009                                max_encoding_message_size,
8010                            );
8011                        let res = grpc.unary(method, req).await;
8012                        Ok(res)
8013                    };
8014                    Box::pin(fut)
8015                }
8016                "/qdrant.Points/Recommend" => {
8017                    #[allow(non_camel_case_types)]
8018                    struct RecommendSvc<T: Points>(pub Arc<T>);
8019                    impl<T: Points> tonic::server::UnaryService<super::RecommendPoints>
8020                    for RecommendSvc<T> {
8021                        type Response = super::RecommendResponse;
8022                        type Future = BoxFuture<
8023                            tonic::Response<Self::Response>,
8024                            tonic::Status,
8025                        >;
8026                        fn call(
8027                            &mut self,
8028                            request: tonic::Request<super::RecommendPoints>,
8029                        ) -> Self::Future {
8030                            let inner = Arc::clone(&self.0);
8031                            let fut = async move {
8032                                <T as Points>::recommend(&inner, request).await
8033                            };
8034                            Box::pin(fut)
8035                        }
8036                    }
8037                    let accept_compression_encodings = self.accept_compression_encodings;
8038                    let send_compression_encodings = self.send_compression_encodings;
8039                    let max_decoding_message_size = self.max_decoding_message_size;
8040                    let max_encoding_message_size = self.max_encoding_message_size;
8041                    let inner = self.inner.clone();
8042                    let fut = async move {
8043                        let method = RecommendSvc(inner);
8044                        let codec = tonic::codec::ProstCodec::default();
8045                        let mut grpc = tonic::server::Grpc::new(codec)
8046                            .apply_compression_config(
8047                                accept_compression_encodings,
8048                                send_compression_encodings,
8049                            )
8050                            .apply_max_message_size_config(
8051                                max_decoding_message_size,
8052                                max_encoding_message_size,
8053                            );
8054                        let res = grpc.unary(method, req).await;
8055                        Ok(res)
8056                    };
8057                    Box::pin(fut)
8058                }
8059                "/qdrant.Points/RecommendBatch" => {
8060                    #[allow(non_camel_case_types)]
8061                    struct RecommendBatchSvc<T: Points>(pub Arc<T>);
8062                    impl<
8063                        T: Points,
8064                    > tonic::server::UnaryService<super::RecommendBatchPoints>
8065                    for RecommendBatchSvc<T> {
8066                        type Response = super::RecommendBatchResponse;
8067                        type Future = BoxFuture<
8068                            tonic::Response<Self::Response>,
8069                            tonic::Status,
8070                        >;
8071                        fn call(
8072                            &mut self,
8073                            request: tonic::Request<super::RecommendBatchPoints>,
8074                        ) -> Self::Future {
8075                            let inner = Arc::clone(&self.0);
8076                            let fut = async move {
8077                                <T as Points>::recommend_batch(&inner, request).await
8078                            };
8079                            Box::pin(fut)
8080                        }
8081                    }
8082                    let accept_compression_encodings = self.accept_compression_encodings;
8083                    let send_compression_encodings = self.send_compression_encodings;
8084                    let max_decoding_message_size = self.max_decoding_message_size;
8085                    let max_encoding_message_size = self.max_encoding_message_size;
8086                    let inner = self.inner.clone();
8087                    let fut = async move {
8088                        let method = RecommendBatchSvc(inner);
8089                        let codec = tonic::codec::ProstCodec::default();
8090                        let mut grpc = tonic::server::Grpc::new(codec)
8091                            .apply_compression_config(
8092                                accept_compression_encodings,
8093                                send_compression_encodings,
8094                            )
8095                            .apply_max_message_size_config(
8096                                max_decoding_message_size,
8097                                max_encoding_message_size,
8098                            );
8099                        let res = grpc.unary(method, req).await;
8100                        Ok(res)
8101                    };
8102                    Box::pin(fut)
8103                }
8104                "/qdrant.Points/RecommendGroups" => {
8105                    #[allow(non_camel_case_types)]
8106                    struct RecommendGroupsSvc<T: Points>(pub Arc<T>);
8107                    impl<
8108                        T: Points,
8109                    > tonic::server::UnaryService<super::RecommendPointGroups>
8110                    for RecommendGroupsSvc<T> {
8111                        type Response = super::RecommendGroupsResponse;
8112                        type Future = BoxFuture<
8113                            tonic::Response<Self::Response>,
8114                            tonic::Status,
8115                        >;
8116                        fn call(
8117                            &mut self,
8118                            request: tonic::Request<super::RecommendPointGroups>,
8119                        ) -> Self::Future {
8120                            let inner = Arc::clone(&self.0);
8121                            let fut = async move {
8122                                <T as Points>::recommend_groups(&inner, request).await
8123                            };
8124                            Box::pin(fut)
8125                        }
8126                    }
8127                    let accept_compression_encodings = self.accept_compression_encodings;
8128                    let send_compression_encodings = self.send_compression_encodings;
8129                    let max_decoding_message_size = self.max_decoding_message_size;
8130                    let max_encoding_message_size = self.max_encoding_message_size;
8131                    let inner = self.inner.clone();
8132                    let fut = async move {
8133                        let method = RecommendGroupsSvc(inner);
8134                        let codec = tonic::codec::ProstCodec::default();
8135                        let mut grpc = tonic::server::Grpc::new(codec)
8136                            .apply_compression_config(
8137                                accept_compression_encodings,
8138                                send_compression_encodings,
8139                            )
8140                            .apply_max_message_size_config(
8141                                max_decoding_message_size,
8142                                max_encoding_message_size,
8143                            );
8144                        let res = grpc.unary(method, req).await;
8145                        Ok(res)
8146                    };
8147                    Box::pin(fut)
8148                }
8149                "/qdrant.Points/Discover" => {
8150                    #[allow(non_camel_case_types)]
8151                    struct DiscoverSvc<T: Points>(pub Arc<T>);
8152                    impl<T: Points> tonic::server::UnaryService<super::DiscoverPoints>
8153                    for DiscoverSvc<T> {
8154                        type Response = super::DiscoverResponse;
8155                        type Future = BoxFuture<
8156                            tonic::Response<Self::Response>,
8157                            tonic::Status,
8158                        >;
8159                        fn call(
8160                            &mut self,
8161                            request: tonic::Request<super::DiscoverPoints>,
8162                        ) -> Self::Future {
8163                            let inner = Arc::clone(&self.0);
8164                            let fut = async move {
8165                                <T as Points>::discover(&inner, request).await
8166                            };
8167                            Box::pin(fut)
8168                        }
8169                    }
8170                    let accept_compression_encodings = self.accept_compression_encodings;
8171                    let send_compression_encodings = self.send_compression_encodings;
8172                    let max_decoding_message_size = self.max_decoding_message_size;
8173                    let max_encoding_message_size = self.max_encoding_message_size;
8174                    let inner = self.inner.clone();
8175                    let fut = async move {
8176                        let method = DiscoverSvc(inner);
8177                        let codec = tonic::codec::ProstCodec::default();
8178                        let mut grpc = tonic::server::Grpc::new(codec)
8179                            .apply_compression_config(
8180                                accept_compression_encodings,
8181                                send_compression_encodings,
8182                            )
8183                            .apply_max_message_size_config(
8184                                max_decoding_message_size,
8185                                max_encoding_message_size,
8186                            );
8187                        let res = grpc.unary(method, req).await;
8188                        Ok(res)
8189                    };
8190                    Box::pin(fut)
8191                }
8192                "/qdrant.Points/DiscoverBatch" => {
8193                    #[allow(non_camel_case_types)]
8194                    struct DiscoverBatchSvc<T: Points>(pub Arc<T>);
8195                    impl<
8196                        T: Points,
8197                    > tonic::server::UnaryService<super::DiscoverBatchPoints>
8198                    for DiscoverBatchSvc<T> {
8199                        type Response = super::DiscoverBatchResponse;
8200                        type Future = BoxFuture<
8201                            tonic::Response<Self::Response>,
8202                            tonic::Status,
8203                        >;
8204                        fn call(
8205                            &mut self,
8206                            request: tonic::Request<super::DiscoverBatchPoints>,
8207                        ) -> Self::Future {
8208                            let inner = Arc::clone(&self.0);
8209                            let fut = async move {
8210                                <T as Points>::discover_batch(&inner, request).await
8211                            };
8212                            Box::pin(fut)
8213                        }
8214                    }
8215                    let accept_compression_encodings = self.accept_compression_encodings;
8216                    let send_compression_encodings = self.send_compression_encodings;
8217                    let max_decoding_message_size = self.max_decoding_message_size;
8218                    let max_encoding_message_size = self.max_encoding_message_size;
8219                    let inner = self.inner.clone();
8220                    let fut = async move {
8221                        let method = DiscoverBatchSvc(inner);
8222                        let codec = tonic::codec::ProstCodec::default();
8223                        let mut grpc = tonic::server::Grpc::new(codec)
8224                            .apply_compression_config(
8225                                accept_compression_encodings,
8226                                send_compression_encodings,
8227                            )
8228                            .apply_max_message_size_config(
8229                                max_decoding_message_size,
8230                                max_encoding_message_size,
8231                            );
8232                        let res = grpc.unary(method, req).await;
8233                        Ok(res)
8234                    };
8235                    Box::pin(fut)
8236                }
8237                "/qdrant.Points/Count" => {
8238                    #[allow(non_camel_case_types)]
8239                    struct CountSvc<T: Points>(pub Arc<T>);
8240                    impl<T: Points> tonic::server::UnaryService<super::CountPoints>
8241                    for CountSvc<T> {
8242                        type Response = super::CountResponse;
8243                        type Future = BoxFuture<
8244                            tonic::Response<Self::Response>,
8245                            tonic::Status,
8246                        >;
8247                        fn call(
8248                            &mut self,
8249                            request: tonic::Request<super::CountPoints>,
8250                        ) -> Self::Future {
8251                            let inner = Arc::clone(&self.0);
8252                            let fut = async move {
8253                                <T as Points>::count(&inner, request).await
8254                            };
8255                            Box::pin(fut)
8256                        }
8257                    }
8258                    let accept_compression_encodings = self.accept_compression_encodings;
8259                    let send_compression_encodings = self.send_compression_encodings;
8260                    let max_decoding_message_size = self.max_decoding_message_size;
8261                    let max_encoding_message_size = self.max_encoding_message_size;
8262                    let inner = self.inner.clone();
8263                    let fut = async move {
8264                        let method = CountSvc(inner);
8265                        let codec = tonic::codec::ProstCodec::default();
8266                        let mut grpc = tonic::server::Grpc::new(codec)
8267                            .apply_compression_config(
8268                                accept_compression_encodings,
8269                                send_compression_encodings,
8270                            )
8271                            .apply_max_message_size_config(
8272                                max_decoding_message_size,
8273                                max_encoding_message_size,
8274                            );
8275                        let res = grpc.unary(method, req).await;
8276                        Ok(res)
8277                    };
8278                    Box::pin(fut)
8279                }
8280                "/qdrant.Points/UpdateBatch" => {
8281                    #[allow(non_camel_case_types)]
8282                    struct UpdateBatchSvc<T: Points>(pub Arc<T>);
8283                    impl<T: Points> tonic::server::UnaryService<super::UpdateBatchPoints>
8284                    for UpdateBatchSvc<T> {
8285                        type Response = super::UpdateBatchResponse;
8286                        type Future = BoxFuture<
8287                            tonic::Response<Self::Response>,
8288                            tonic::Status,
8289                        >;
8290                        fn call(
8291                            &mut self,
8292                            request: tonic::Request<super::UpdateBatchPoints>,
8293                        ) -> Self::Future {
8294                            let inner = Arc::clone(&self.0);
8295                            let fut = async move {
8296                                <T as Points>::update_batch(&inner, request).await
8297                            };
8298                            Box::pin(fut)
8299                        }
8300                    }
8301                    let accept_compression_encodings = self.accept_compression_encodings;
8302                    let send_compression_encodings = self.send_compression_encodings;
8303                    let max_decoding_message_size = self.max_decoding_message_size;
8304                    let max_encoding_message_size = self.max_encoding_message_size;
8305                    let inner = self.inner.clone();
8306                    let fut = async move {
8307                        let method = UpdateBatchSvc(inner);
8308                        let codec = tonic::codec::ProstCodec::default();
8309                        let mut grpc = tonic::server::Grpc::new(codec)
8310                            .apply_compression_config(
8311                                accept_compression_encodings,
8312                                send_compression_encodings,
8313                            )
8314                            .apply_max_message_size_config(
8315                                max_decoding_message_size,
8316                                max_encoding_message_size,
8317                            );
8318                        let res = grpc.unary(method, req).await;
8319                        Ok(res)
8320                    };
8321                    Box::pin(fut)
8322                }
8323                "/qdrant.Points/Query" => {
8324                    #[allow(non_camel_case_types)]
8325                    struct QuerySvc<T: Points>(pub Arc<T>);
8326                    impl<T: Points> tonic::server::UnaryService<super::QueryPoints>
8327                    for QuerySvc<T> {
8328                        type Response = super::QueryResponse;
8329                        type Future = BoxFuture<
8330                            tonic::Response<Self::Response>,
8331                            tonic::Status,
8332                        >;
8333                        fn call(
8334                            &mut self,
8335                            request: tonic::Request<super::QueryPoints>,
8336                        ) -> Self::Future {
8337                            let inner = Arc::clone(&self.0);
8338                            let fut = async move {
8339                                <T as Points>::query(&inner, request).await
8340                            };
8341                            Box::pin(fut)
8342                        }
8343                    }
8344                    let accept_compression_encodings = self.accept_compression_encodings;
8345                    let send_compression_encodings = self.send_compression_encodings;
8346                    let max_decoding_message_size = self.max_decoding_message_size;
8347                    let max_encoding_message_size = self.max_encoding_message_size;
8348                    let inner = self.inner.clone();
8349                    let fut = async move {
8350                        let method = QuerySvc(inner);
8351                        let codec = tonic::codec::ProstCodec::default();
8352                        let mut grpc = tonic::server::Grpc::new(codec)
8353                            .apply_compression_config(
8354                                accept_compression_encodings,
8355                                send_compression_encodings,
8356                            )
8357                            .apply_max_message_size_config(
8358                                max_decoding_message_size,
8359                                max_encoding_message_size,
8360                            );
8361                        let res = grpc.unary(method, req).await;
8362                        Ok(res)
8363                    };
8364                    Box::pin(fut)
8365                }
8366                "/qdrant.Points/QueryBatch" => {
8367                    #[allow(non_camel_case_types)]
8368                    struct QueryBatchSvc<T: Points>(pub Arc<T>);
8369                    impl<T: Points> tonic::server::UnaryService<super::QueryBatchPoints>
8370                    for QueryBatchSvc<T> {
8371                        type Response = super::QueryBatchResponse;
8372                        type Future = BoxFuture<
8373                            tonic::Response<Self::Response>,
8374                            tonic::Status,
8375                        >;
8376                        fn call(
8377                            &mut self,
8378                            request: tonic::Request<super::QueryBatchPoints>,
8379                        ) -> Self::Future {
8380                            let inner = Arc::clone(&self.0);
8381                            let fut = async move {
8382                                <T as Points>::query_batch(&inner, request).await
8383                            };
8384                            Box::pin(fut)
8385                        }
8386                    }
8387                    let accept_compression_encodings = self.accept_compression_encodings;
8388                    let send_compression_encodings = self.send_compression_encodings;
8389                    let max_decoding_message_size = self.max_decoding_message_size;
8390                    let max_encoding_message_size = self.max_encoding_message_size;
8391                    let inner = self.inner.clone();
8392                    let fut = async move {
8393                        let method = QueryBatchSvc(inner);
8394                        let codec = tonic::codec::ProstCodec::default();
8395                        let mut grpc = tonic::server::Grpc::new(codec)
8396                            .apply_compression_config(
8397                                accept_compression_encodings,
8398                                send_compression_encodings,
8399                            )
8400                            .apply_max_message_size_config(
8401                                max_decoding_message_size,
8402                                max_encoding_message_size,
8403                            );
8404                        let res = grpc.unary(method, req).await;
8405                        Ok(res)
8406                    };
8407                    Box::pin(fut)
8408                }
8409                "/qdrant.Points/QueryGroups" => {
8410                    #[allow(non_camel_case_types)]
8411                    struct QueryGroupsSvc<T: Points>(pub Arc<T>);
8412                    impl<T: Points> tonic::server::UnaryService<super::QueryPointGroups>
8413                    for QueryGroupsSvc<T> {
8414                        type Response = super::QueryGroupsResponse;
8415                        type Future = BoxFuture<
8416                            tonic::Response<Self::Response>,
8417                            tonic::Status,
8418                        >;
8419                        fn call(
8420                            &mut self,
8421                            request: tonic::Request<super::QueryPointGroups>,
8422                        ) -> Self::Future {
8423                            let inner = Arc::clone(&self.0);
8424                            let fut = async move {
8425                                <T as Points>::query_groups(&inner, request).await
8426                            };
8427                            Box::pin(fut)
8428                        }
8429                    }
8430                    let accept_compression_encodings = self.accept_compression_encodings;
8431                    let send_compression_encodings = self.send_compression_encodings;
8432                    let max_decoding_message_size = self.max_decoding_message_size;
8433                    let max_encoding_message_size = self.max_encoding_message_size;
8434                    let inner = self.inner.clone();
8435                    let fut = async move {
8436                        let method = QueryGroupsSvc(inner);
8437                        let codec = tonic::codec::ProstCodec::default();
8438                        let mut grpc = tonic::server::Grpc::new(codec)
8439                            .apply_compression_config(
8440                                accept_compression_encodings,
8441                                send_compression_encodings,
8442                            )
8443                            .apply_max_message_size_config(
8444                                max_decoding_message_size,
8445                                max_encoding_message_size,
8446                            );
8447                        let res = grpc.unary(method, req).await;
8448                        Ok(res)
8449                    };
8450                    Box::pin(fut)
8451                }
8452                "/qdrant.Points/Facet" => {
8453                    #[allow(non_camel_case_types)]
8454                    struct FacetSvc<T: Points>(pub Arc<T>);
8455                    impl<T: Points> tonic::server::UnaryService<super::FacetCounts>
8456                    for FacetSvc<T> {
8457                        type Response = super::FacetResponse;
8458                        type Future = BoxFuture<
8459                            tonic::Response<Self::Response>,
8460                            tonic::Status,
8461                        >;
8462                        fn call(
8463                            &mut self,
8464                            request: tonic::Request<super::FacetCounts>,
8465                        ) -> Self::Future {
8466                            let inner = Arc::clone(&self.0);
8467                            let fut = async move {
8468                                <T as Points>::facet(&inner, request).await
8469                            };
8470                            Box::pin(fut)
8471                        }
8472                    }
8473                    let accept_compression_encodings = self.accept_compression_encodings;
8474                    let send_compression_encodings = self.send_compression_encodings;
8475                    let max_decoding_message_size = self.max_decoding_message_size;
8476                    let max_encoding_message_size = self.max_encoding_message_size;
8477                    let inner = self.inner.clone();
8478                    let fut = async move {
8479                        let method = FacetSvc(inner);
8480                        let codec = tonic::codec::ProstCodec::default();
8481                        let mut grpc = tonic::server::Grpc::new(codec)
8482                            .apply_compression_config(
8483                                accept_compression_encodings,
8484                                send_compression_encodings,
8485                            )
8486                            .apply_max_message_size_config(
8487                                max_decoding_message_size,
8488                                max_encoding_message_size,
8489                            );
8490                        let res = grpc.unary(method, req).await;
8491                        Ok(res)
8492                    };
8493                    Box::pin(fut)
8494                }
8495                "/qdrant.Points/SearchMatrixPairs" => {
8496                    #[allow(non_camel_case_types)]
8497                    struct SearchMatrixPairsSvc<T: Points>(pub Arc<T>);
8498                    impl<
8499                        T: Points,
8500                    > tonic::server::UnaryService<super::SearchMatrixPoints>
8501                    for SearchMatrixPairsSvc<T> {
8502                        type Response = super::SearchMatrixPairsResponse;
8503                        type Future = BoxFuture<
8504                            tonic::Response<Self::Response>,
8505                            tonic::Status,
8506                        >;
8507                        fn call(
8508                            &mut self,
8509                            request: tonic::Request<super::SearchMatrixPoints>,
8510                        ) -> Self::Future {
8511                            let inner = Arc::clone(&self.0);
8512                            let fut = async move {
8513                                <T as Points>::search_matrix_pairs(&inner, request).await
8514                            };
8515                            Box::pin(fut)
8516                        }
8517                    }
8518                    let accept_compression_encodings = self.accept_compression_encodings;
8519                    let send_compression_encodings = self.send_compression_encodings;
8520                    let max_decoding_message_size = self.max_decoding_message_size;
8521                    let max_encoding_message_size = self.max_encoding_message_size;
8522                    let inner = self.inner.clone();
8523                    let fut = async move {
8524                        let method = SearchMatrixPairsSvc(inner);
8525                        let codec = tonic::codec::ProstCodec::default();
8526                        let mut grpc = tonic::server::Grpc::new(codec)
8527                            .apply_compression_config(
8528                                accept_compression_encodings,
8529                                send_compression_encodings,
8530                            )
8531                            .apply_max_message_size_config(
8532                                max_decoding_message_size,
8533                                max_encoding_message_size,
8534                            );
8535                        let res = grpc.unary(method, req).await;
8536                        Ok(res)
8537                    };
8538                    Box::pin(fut)
8539                }
8540                "/qdrant.Points/SearchMatrixOffsets" => {
8541                    #[allow(non_camel_case_types)]
8542                    struct SearchMatrixOffsetsSvc<T: Points>(pub Arc<T>);
8543                    impl<
8544                        T: Points,
8545                    > tonic::server::UnaryService<super::SearchMatrixPoints>
8546                    for SearchMatrixOffsetsSvc<T> {
8547                        type Response = super::SearchMatrixOffsetsResponse;
8548                        type Future = BoxFuture<
8549                            tonic::Response<Self::Response>,
8550                            tonic::Status,
8551                        >;
8552                        fn call(
8553                            &mut self,
8554                            request: tonic::Request<super::SearchMatrixPoints>,
8555                        ) -> Self::Future {
8556                            let inner = Arc::clone(&self.0);
8557                            let fut = async move {
8558                                <T as Points>::search_matrix_offsets(&inner, request).await
8559                            };
8560                            Box::pin(fut)
8561                        }
8562                    }
8563                    let accept_compression_encodings = self.accept_compression_encodings;
8564                    let send_compression_encodings = self.send_compression_encodings;
8565                    let max_decoding_message_size = self.max_decoding_message_size;
8566                    let max_encoding_message_size = self.max_encoding_message_size;
8567                    let inner = self.inner.clone();
8568                    let fut = async move {
8569                        let method = SearchMatrixOffsetsSvc(inner);
8570                        let codec = tonic::codec::ProstCodec::default();
8571                        let mut grpc = tonic::server::Grpc::new(codec)
8572                            .apply_compression_config(
8573                                accept_compression_encodings,
8574                                send_compression_encodings,
8575                            )
8576                            .apply_max_message_size_config(
8577                                max_decoding_message_size,
8578                                max_encoding_message_size,
8579                            );
8580                        let res = grpc.unary(method, req).await;
8581                        Ok(res)
8582                    };
8583                    Box::pin(fut)
8584                }
8585                _ => {
8586                    Box::pin(async move {
8587                        let mut response = http::Response::new(empty_body());
8588                        let headers = response.headers_mut();
8589                        headers
8590                            .insert(
8591                                tonic::Status::GRPC_STATUS,
8592                                (tonic::Code::Unimplemented as i32).into(),
8593                            );
8594                        headers
8595                            .insert(
8596                                http::header::CONTENT_TYPE,
8597                                tonic::metadata::GRPC_CONTENT_TYPE,
8598                            );
8599                        Ok(response)
8600                    })
8601                }
8602            }
8603        }
8604    }
8605    impl<T> Clone for PointsServer<T> {
8606        fn clone(&self) -> Self {
8607            let inner = self.inner.clone();
8608            Self {
8609                inner,
8610                accept_compression_encodings: self.accept_compression_encodings,
8611                send_compression_encodings: self.send_compression_encodings,
8612                max_decoding_message_size: self.max_decoding_message_size,
8613                max_encoding_message_size: self.max_encoding_message_size,
8614            }
8615        }
8616    }
8617    /// Generated gRPC service name
8618    pub const SERVICE_NAME: &str = "qdrant.Points";
8619    impl<T> tonic::server::NamedService for PointsServer<T> {
8620        const NAME: &'static str = SERVICE_NAME;
8621    }
8622}
8623#[derive(Clone, Copy, PartialEq, ::prost::Message)]
8624pub struct CreateFullSnapshotRequest {}
8625#[derive(Clone, Copy, PartialEq, ::prost::Message)]
8626pub struct ListFullSnapshotsRequest {}
8627#[derive(Clone, PartialEq, ::prost::Message)]
8628pub struct DeleteFullSnapshotRequest {
8629    /// Name of the full snapshot
8630    #[prost(string, tag = "1")]
8631    pub snapshot_name: ::prost::alloc::string::String,
8632}
8633#[derive(Clone, PartialEq, ::prost::Message)]
8634pub struct CreateSnapshotRequest {
8635    /// Name of the collection
8636    #[prost(string, tag = "1")]
8637    pub collection_name: ::prost::alloc::string::String,
8638}
8639#[derive(Clone, PartialEq, ::prost::Message)]
8640pub struct ListSnapshotsRequest {
8641    /// Name of the collection
8642    #[prost(string, tag = "1")]
8643    pub collection_name: ::prost::alloc::string::String,
8644}
8645#[derive(Clone, PartialEq, ::prost::Message)]
8646pub struct DeleteSnapshotRequest {
8647    /// Name of the collection
8648    #[prost(string, tag = "1")]
8649    pub collection_name: ::prost::alloc::string::String,
8650    /// Name of the collection snapshot
8651    #[prost(string, tag = "2")]
8652    pub snapshot_name: ::prost::alloc::string::String,
8653}
8654#[derive(Clone, PartialEq, ::prost::Message)]
8655pub struct SnapshotDescription {
8656    /// Name of the snapshot
8657    #[prost(string, tag = "1")]
8658    pub name: ::prost::alloc::string::String,
8659    /// Creation time of the snapshot
8660    #[prost(message, optional, tag = "2")]
8661    pub creation_time: ::core::option::Option<::prost_types::Timestamp>,
8662    /// Size of the snapshot in bytes
8663    #[prost(int64, tag = "3")]
8664    pub size: i64,
8665    /// SHA256 digest of the snapshot file
8666    #[prost(string, optional, tag = "4")]
8667    pub checksum: ::core::option::Option<::prost::alloc::string::String>,
8668}
8669#[derive(Clone, PartialEq, ::prost::Message)]
8670pub struct CreateSnapshotResponse {
8671    #[prost(message, optional, tag = "1")]
8672    pub snapshot_description: ::core::option::Option<SnapshotDescription>,
8673    /// Time spent to process
8674    #[prost(double, tag = "2")]
8675    pub time: f64,
8676}
8677#[derive(Clone, PartialEq, ::prost::Message)]
8678pub struct ListSnapshotsResponse {
8679    #[prost(message, repeated, tag = "1")]
8680    pub snapshot_descriptions: ::prost::alloc::vec::Vec<SnapshotDescription>,
8681    /// Time spent to process
8682    #[prost(double, tag = "2")]
8683    pub time: f64,
8684}
8685#[derive(Clone, Copy, PartialEq, ::prost::Message)]
8686pub struct DeleteSnapshotResponse {
8687    /// Time spent to process
8688    #[prost(double, tag = "1")]
8689    pub time: f64,
8690}
8691/// Generated client implementations.
8692pub mod snapshots_client {
8693    #![allow(
8694        unused_variables,
8695        dead_code,
8696        missing_docs,
8697        clippy::wildcard_imports,
8698        clippy::let_unit_value,
8699    )]
8700    use tonic::codegen::*;
8701    use tonic::codegen::http::Uri;
8702    #[derive(Debug, Clone)]
8703    pub struct SnapshotsClient<T> {
8704        inner: tonic::client::Grpc<T>,
8705    }
8706    impl SnapshotsClient<tonic::transport::Channel> {
8707        /// Attempt to create a new client by connecting to a given endpoint.
8708        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
8709        where
8710            D: TryInto<tonic::transport::Endpoint>,
8711            D::Error: Into<StdError>,
8712        {
8713            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
8714            Ok(Self::new(conn))
8715        }
8716    }
8717    impl<T> SnapshotsClient<T>
8718    where
8719        T: tonic::client::GrpcService<tonic::body::BoxBody>,
8720        T::Error: Into<StdError>,
8721        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
8722        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
8723    {
8724        pub fn new(inner: T) -> Self {
8725            let inner = tonic::client::Grpc::new(inner);
8726            Self { inner }
8727        }
8728        pub fn with_origin(inner: T, origin: Uri) -> Self {
8729            let inner = tonic::client::Grpc::with_origin(inner, origin);
8730            Self { inner }
8731        }
8732        pub fn with_interceptor<F>(
8733            inner: T,
8734            interceptor: F,
8735        ) -> SnapshotsClient<InterceptedService<T, F>>
8736        where
8737            F: tonic::service::Interceptor,
8738            T::ResponseBody: Default,
8739            T: tonic::codegen::Service<
8740                http::Request<tonic::body::BoxBody>,
8741                Response = http::Response<
8742                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
8743                >,
8744            >,
8745            <T as tonic::codegen::Service<
8746                http::Request<tonic::body::BoxBody>,
8747            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
8748        {
8749            SnapshotsClient::new(InterceptedService::new(inner, interceptor))
8750        }
8751        /// Compress requests with the given encoding.
8752        ///
8753        /// This requires the server to support it otherwise it might respond with an
8754        /// error.
8755        #[must_use]
8756        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
8757            self.inner = self.inner.send_compressed(encoding);
8758            self
8759        }
8760        /// Enable decompressing responses.
8761        #[must_use]
8762        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
8763            self.inner = self.inner.accept_compressed(encoding);
8764            self
8765        }
8766        /// Limits the maximum size of a decoded message.
8767        ///
8768        /// Default: `4MB`
8769        #[must_use]
8770        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
8771            self.inner = self.inner.max_decoding_message_size(limit);
8772            self
8773        }
8774        /// Limits the maximum size of an encoded message.
8775        ///
8776        /// Default: `usize::MAX`
8777        #[must_use]
8778        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
8779            self.inner = self.inner.max_encoding_message_size(limit);
8780            self
8781        }
8782        /// Create collection snapshot
8783        pub async fn create(
8784            &mut self,
8785            request: impl tonic::IntoRequest<super::CreateSnapshotRequest>,
8786        ) -> std::result::Result<
8787            tonic::Response<super::CreateSnapshotResponse>,
8788            tonic::Status,
8789        > {
8790            self.inner
8791                .ready()
8792                .await
8793                .map_err(|e| {
8794                    tonic::Status::unknown(
8795                        format!("Service was not ready: {}", e.into()),
8796                    )
8797                })?;
8798            let codec = tonic::codec::ProstCodec::default();
8799            let path = http::uri::PathAndQuery::from_static("/qdrant.Snapshots/Create");
8800            let mut req = request.into_request();
8801            req.extensions_mut().insert(GrpcMethod::new("qdrant.Snapshots", "Create"));
8802            self.inner.unary(req, path, codec).await
8803        }
8804        /// List collection snapshots
8805        pub async fn list(
8806            &mut self,
8807            request: impl tonic::IntoRequest<super::ListSnapshotsRequest>,
8808        ) -> std::result::Result<
8809            tonic::Response<super::ListSnapshotsResponse>,
8810            tonic::Status,
8811        > {
8812            self.inner
8813                .ready()
8814                .await
8815                .map_err(|e| {
8816                    tonic::Status::unknown(
8817                        format!("Service was not ready: {}", e.into()),
8818                    )
8819                })?;
8820            let codec = tonic::codec::ProstCodec::default();
8821            let path = http::uri::PathAndQuery::from_static("/qdrant.Snapshots/List");
8822            let mut req = request.into_request();
8823            req.extensions_mut().insert(GrpcMethod::new("qdrant.Snapshots", "List"));
8824            self.inner.unary(req, path, codec).await
8825        }
8826        /// Delete collection snapshot
8827        pub async fn delete(
8828            &mut self,
8829            request: impl tonic::IntoRequest<super::DeleteSnapshotRequest>,
8830        ) -> std::result::Result<
8831            tonic::Response<super::DeleteSnapshotResponse>,
8832            tonic::Status,
8833        > {
8834            self.inner
8835                .ready()
8836                .await
8837                .map_err(|e| {
8838                    tonic::Status::unknown(
8839                        format!("Service was not ready: {}", e.into()),
8840                    )
8841                })?;
8842            let codec = tonic::codec::ProstCodec::default();
8843            let path = http::uri::PathAndQuery::from_static("/qdrant.Snapshots/Delete");
8844            let mut req = request.into_request();
8845            req.extensions_mut().insert(GrpcMethod::new("qdrant.Snapshots", "Delete"));
8846            self.inner.unary(req, path, codec).await
8847        }
8848        /// Create full storage snapshot
8849        pub async fn create_full(
8850            &mut self,
8851            request: impl tonic::IntoRequest<super::CreateFullSnapshotRequest>,
8852        ) -> std::result::Result<
8853            tonic::Response<super::CreateSnapshotResponse>,
8854            tonic::Status,
8855        > {
8856            self.inner
8857                .ready()
8858                .await
8859                .map_err(|e| {
8860                    tonic::Status::unknown(
8861                        format!("Service was not ready: {}", e.into()),
8862                    )
8863                })?;
8864            let codec = tonic::codec::ProstCodec::default();
8865            let path = http::uri::PathAndQuery::from_static(
8866                "/qdrant.Snapshots/CreateFull",
8867            );
8868            let mut req = request.into_request();
8869            req.extensions_mut()
8870                .insert(GrpcMethod::new("qdrant.Snapshots", "CreateFull"));
8871            self.inner.unary(req, path, codec).await
8872        }
8873        /// List full storage snapshots
8874        pub async fn list_full(
8875            &mut self,
8876            request: impl tonic::IntoRequest<super::ListFullSnapshotsRequest>,
8877        ) -> std::result::Result<
8878            tonic::Response<super::ListSnapshotsResponse>,
8879            tonic::Status,
8880        > {
8881            self.inner
8882                .ready()
8883                .await
8884                .map_err(|e| {
8885                    tonic::Status::unknown(
8886                        format!("Service was not ready: {}", e.into()),
8887                    )
8888                })?;
8889            let codec = tonic::codec::ProstCodec::default();
8890            let path = http::uri::PathAndQuery::from_static(
8891                "/qdrant.Snapshots/ListFull",
8892            );
8893            let mut req = request.into_request();
8894            req.extensions_mut().insert(GrpcMethod::new("qdrant.Snapshots", "ListFull"));
8895            self.inner.unary(req, path, codec).await
8896        }
8897        /// Delete full storage snapshot
8898        pub async fn delete_full(
8899            &mut self,
8900            request: impl tonic::IntoRequest<super::DeleteFullSnapshotRequest>,
8901        ) -> std::result::Result<
8902            tonic::Response<super::DeleteSnapshotResponse>,
8903            tonic::Status,
8904        > {
8905            self.inner
8906                .ready()
8907                .await
8908                .map_err(|e| {
8909                    tonic::Status::unknown(
8910                        format!("Service was not ready: {}", e.into()),
8911                    )
8912                })?;
8913            let codec = tonic::codec::ProstCodec::default();
8914            let path = http::uri::PathAndQuery::from_static(
8915                "/qdrant.Snapshots/DeleteFull",
8916            );
8917            let mut req = request.into_request();
8918            req.extensions_mut()
8919                .insert(GrpcMethod::new("qdrant.Snapshots", "DeleteFull"));
8920            self.inner.unary(req, path, codec).await
8921        }
8922    }
8923}
8924/// Generated server implementations.
8925pub mod snapshots_server {
8926    #![allow(
8927        unused_variables,
8928        dead_code,
8929        missing_docs,
8930        clippy::wildcard_imports,
8931        clippy::let_unit_value,
8932    )]
8933    use tonic::codegen::*;
8934    /// Generated trait containing gRPC methods that should be implemented for use with SnapshotsServer.
8935    #[async_trait]
8936    pub trait Snapshots: std::marker::Send + std::marker::Sync + 'static {
8937        /// Create collection snapshot
8938        async fn create(
8939            &self,
8940            request: tonic::Request<super::CreateSnapshotRequest>,
8941        ) -> std::result::Result<
8942            tonic::Response<super::CreateSnapshotResponse>,
8943            tonic::Status,
8944        >;
8945        /// List collection snapshots
8946        async fn list(
8947            &self,
8948            request: tonic::Request<super::ListSnapshotsRequest>,
8949        ) -> std::result::Result<
8950            tonic::Response<super::ListSnapshotsResponse>,
8951            tonic::Status,
8952        >;
8953        /// Delete collection snapshot
8954        async fn delete(
8955            &self,
8956            request: tonic::Request<super::DeleteSnapshotRequest>,
8957        ) -> std::result::Result<
8958            tonic::Response<super::DeleteSnapshotResponse>,
8959            tonic::Status,
8960        >;
8961        /// Create full storage snapshot
8962        async fn create_full(
8963            &self,
8964            request: tonic::Request<super::CreateFullSnapshotRequest>,
8965        ) -> std::result::Result<
8966            tonic::Response<super::CreateSnapshotResponse>,
8967            tonic::Status,
8968        >;
8969        /// List full storage snapshots
8970        async fn list_full(
8971            &self,
8972            request: tonic::Request<super::ListFullSnapshotsRequest>,
8973        ) -> std::result::Result<
8974            tonic::Response<super::ListSnapshotsResponse>,
8975            tonic::Status,
8976        >;
8977        /// Delete full storage snapshot
8978        async fn delete_full(
8979            &self,
8980            request: tonic::Request<super::DeleteFullSnapshotRequest>,
8981        ) -> std::result::Result<
8982            tonic::Response<super::DeleteSnapshotResponse>,
8983            tonic::Status,
8984        >;
8985    }
8986    #[derive(Debug)]
8987    pub struct SnapshotsServer<T> {
8988        inner: Arc<T>,
8989        accept_compression_encodings: EnabledCompressionEncodings,
8990        send_compression_encodings: EnabledCompressionEncodings,
8991        max_decoding_message_size: Option<usize>,
8992        max_encoding_message_size: Option<usize>,
8993    }
8994    impl<T> SnapshotsServer<T> {
8995        pub fn new(inner: T) -> Self {
8996            Self::from_arc(Arc::new(inner))
8997        }
8998        pub fn from_arc(inner: Arc<T>) -> Self {
8999            Self {
9000                inner,
9001                accept_compression_encodings: Default::default(),
9002                send_compression_encodings: Default::default(),
9003                max_decoding_message_size: None,
9004                max_encoding_message_size: None,
9005            }
9006        }
9007        pub fn with_interceptor<F>(
9008            inner: T,
9009            interceptor: F,
9010        ) -> InterceptedService<Self, F>
9011        where
9012            F: tonic::service::Interceptor,
9013        {
9014            InterceptedService::new(Self::new(inner), interceptor)
9015        }
9016        /// Enable decompressing requests with the given encoding.
9017        #[must_use]
9018        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
9019            self.accept_compression_encodings.enable(encoding);
9020            self
9021        }
9022        /// Compress responses with the given encoding, if the client supports it.
9023        #[must_use]
9024        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
9025            self.send_compression_encodings.enable(encoding);
9026            self
9027        }
9028        /// Limits the maximum size of a decoded message.
9029        ///
9030        /// Default: `4MB`
9031        #[must_use]
9032        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
9033            self.max_decoding_message_size = Some(limit);
9034            self
9035        }
9036        /// Limits the maximum size of an encoded message.
9037        ///
9038        /// Default: `usize::MAX`
9039        #[must_use]
9040        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
9041            self.max_encoding_message_size = Some(limit);
9042            self
9043        }
9044    }
9045    impl<T, B> tonic::codegen::Service<http::Request<B>> for SnapshotsServer<T>
9046    where
9047        T: Snapshots,
9048        B: Body + std::marker::Send + 'static,
9049        B::Error: Into<StdError> + std::marker::Send + 'static,
9050    {
9051        type Response = http::Response<tonic::body::BoxBody>;
9052        type Error = std::convert::Infallible;
9053        type Future = BoxFuture<Self::Response, Self::Error>;
9054        fn poll_ready(
9055            &mut self,
9056            _cx: &mut Context<'_>,
9057        ) -> Poll<std::result::Result<(), Self::Error>> {
9058            Poll::Ready(Ok(()))
9059        }
9060        fn call(&mut self, req: http::Request<B>) -> Self::Future {
9061            match req.uri().path() {
9062                "/qdrant.Snapshots/Create" => {
9063                    #[allow(non_camel_case_types)]
9064                    struct CreateSvc<T: Snapshots>(pub Arc<T>);
9065                    impl<
9066                        T: Snapshots,
9067                    > tonic::server::UnaryService<super::CreateSnapshotRequest>
9068                    for CreateSvc<T> {
9069                        type Response = super::CreateSnapshotResponse;
9070                        type Future = BoxFuture<
9071                            tonic::Response<Self::Response>,
9072                            tonic::Status,
9073                        >;
9074                        fn call(
9075                            &mut self,
9076                            request: tonic::Request<super::CreateSnapshotRequest>,
9077                        ) -> Self::Future {
9078                            let inner = Arc::clone(&self.0);
9079                            let fut = async move {
9080                                <T as Snapshots>::create(&inner, request).await
9081                            };
9082                            Box::pin(fut)
9083                        }
9084                    }
9085                    let accept_compression_encodings = self.accept_compression_encodings;
9086                    let send_compression_encodings = self.send_compression_encodings;
9087                    let max_decoding_message_size = self.max_decoding_message_size;
9088                    let max_encoding_message_size = self.max_encoding_message_size;
9089                    let inner = self.inner.clone();
9090                    let fut = async move {
9091                        let method = CreateSvc(inner);
9092                        let codec = tonic::codec::ProstCodec::default();
9093                        let mut grpc = tonic::server::Grpc::new(codec)
9094                            .apply_compression_config(
9095                                accept_compression_encodings,
9096                                send_compression_encodings,
9097                            )
9098                            .apply_max_message_size_config(
9099                                max_decoding_message_size,
9100                                max_encoding_message_size,
9101                            );
9102                        let res = grpc.unary(method, req).await;
9103                        Ok(res)
9104                    };
9105                    Box::pin(fut)
9106                }
9107                "/qdrant.Snapshots/List" => {
9108                    #[allow(non_camel_case_types)]
9109                    struct ListSvc<T: Snapshots>(pub Arc<T>);
9110                    impl<
9111                        T: Snapshots,
9112                    > tonic::server::UnaryService<super::ListSnapshotsRequest>
9113                    for ListSvc<T> {
9114                        type Response = super::ListSnapshotsResponse;
9115                        type Future = BoxFuture<
9116                            tonic::Response<Self::Response>,
9117                            tonic::Status,
9118                        >;
9119                        fn call(
9120                            &mut self,
9121                            request: tonic::Request<super::ListSnapshotsRequest>,
9122                        ) -> Self::Future {
9123                            let inner = Arc::clone(&self.0);
9124                            let fut = async move {
9125                                <T as Snapshots>::list(&inner, request).await
9126                            };
9127                            Box::pin(fut)
9128                        }
9129                    }
9130                    let accept_compression_encodings = self.accept_compression_encodings;
9131                    let send_compression_encodings = self.send_compression_encodings;
9132                    let max_decoding_message_size = self.max_decoding_message_size;
9133                    let max_encoding_message_size = self.max_encoding_message_size;
9134                    let inner = self.inner.clone();
9135                    let fut = async move {
9136                        let method = ListSvc(inner);
9137                        let codec = tonic::codec::ProstCodec::default();
9138                        let mut grpc = tonic::server::Grpc::new(codec)
9139                            .apply_compression_config(
9140                                accept_compression_encodings,
9141                                send_compression_encodings,
9142                            )
9143                            .apply_max_message_size_config(
9144                                max_decoding_message_size,
9145                                max_encoding_message_size,
9146                            );
9147                        let res = grpc.unary(method, req).await;
9148                        Ok(res)
9149                    };
9150                    Box::pin(fut)
9151                }
9152                "/qdrant.Snapshots/Delete" => {
9153                    #[allow(non_camel_case_types)]
9154                    struct DeleteSvc<T: Snapshots>(pub Arc<T>);
9155                    impl<
9156                        T: Snapshots,
9157                    > tonic::server::UnaryService<super::DeleteSnapshotRequest>
9158                    for DeleteSvc<T> {
9159                        type Response = super::DeleteSnapshotResponse;
9160                        type Future = BoxFuture<
9161                            tonic::Response<Self::Response>,
9162                            tonic::Status,
9163                        >;
9164                        fn call(
9165                            &mut self,
9166                            request: tonic::Request<super::DeleteSnapshotRequest>,
9167                        ) -> Self::Future {
9168                            let inner = Arc::clone(&self.0);
9169                            let fut = async move {
9170                                <T as Snapshots>::delete(&inner, request).await
9171                            };
9172                            Box::pin(fut)
9173                        }
9174                    }
9175                    let accept_compression_encodings = self.accept_compression_encodings;
9176                    let send_compression_encodings = self.send_compression_encodings;
9177                    let max_decoding_message_size = self.max_decoding_message_size;
9178                    let max_encoding_message_size = self.max_encoding_message_size;
9179                    let inner = self.inner.clone();
9180                    let fut = async move {
9181                        let method = DeleteSvc(inner);
9182                        let codec = tonic::codec::ProstCodec::default();
9183                        let mut grpc = tonic::server::Grpc::new(codec)
9184                            .apply_compression_config(
9185                                accept_compression_encodings,
9186                                send_compression_encodings,
9187                            )
9188                            .apply_max_message_size_config(
9189                                max_decoding_message_size,
9190                                max_encoding_message_size,
9191                            );
9192                        let res = grpc.unary(method, req).await;
9193                        Ok(res)
9194                    };
9195                    Box::pin(fut)
9196                }
9197                "/qdrant.Snapshots/CreateFull" => {
9198                    #[allow(non_camel_case_types)]
9199                    struct CreateFullSvc<T: Snapshots>(pub Arc<T>);
9200                    impl<
9201                        T: Snapshots,
9202                    > tonic::server::UnaryService<super::CreateFullSnapshotRequest>
9203                    for CreateFullSvc<T> {
9204                        type Response = super::CreateSnapshotResponse;
9205                        type Future = BoxFuture<
9206                            tonic::Response<Self::Response>,
9207                            tonic::Status,
9208                        >;
9209                        fn call(
9210                            &mut self,
9211                            request: tonic::Request<super::CreateFullSnapshotRequest>,
9212                        ) -> Self::Future {
9213                            let inner = Arc::clone(&self.0);
9214                            let fut = async move {
9215                                <T as Snapshots>::create_full(&inner, request).await
9216                            };
9217                            Box::pin(fut)
9218                        }
9219                    }
9220                    let accept_compression_encodings = self.accept_compression_encodings;
9221                    let send_compression_encodings = self.send_compression_encodings;
9222                    let max_decoding_message_size = self.max_decoding_message_size;
9223                    let max_encoding_message_size = self.max_encoding_message_size;
9224                    let inner = self.inner.clone();
9225                    let fut = async move {
9226                        let method = CreateFullSvc(inner);
9227                        let codec = tonic::codec::ProstCodec::default();
9228                        let mut grpc = tonic::server::Grpc::new(codec)
9229                            .apply_compression_config(
9230                                accept_compression_encodings,
9231                                send_compression_encodings,
9232                            )
9233                            .apply_max_message_size_config(
9234                                max_decoding_message_size,
9235                                max_encoding_message_size,
9236                            );
9237                        let res = grpc.unary(method, req).await;
9238                        Ok(res)
9239                    };
9240                    Box::pin(fut)
9241                }
9242                "/qdrant.Snapshots/ListFull" => {
9243                    #[allow(non_camel_case_types)]
9244                    struct ListFullSvc<T: Snapshots>(pub Arc<T>);
9245                    impl<
9246                        T: Snapshots,
9247                    > tonic::server::UnaryService<super::ListFullSnapshotsRequest>
9248                    for ListFullSvc<T> {
9249                        type Response = super::ListSnapshotsResponse;
9250                        type Future = BoxFuture<
9251                            tonic::Response<Self::Response>,
9252                            tonic::Status,
9253                        >;
9254                        fn call(
9255                            &mut self,
9256                            request: tonic::Request<super::ListFullSnapshotsRequest>,
9257                        ) -> Self::Future {
9258                            let inner = Arc::clone(&self.0);
9259                            let fut = async move {
9260                                <T as Snapshots>::list_full(&inner, request).await
9261                            };
9262                            Box::pin(fut)
9263                        }
9264                    }
9265                    let accept_compression_encodings = self.accept_compression_encodings;
9266                    let send_compression_encodings = self.send_compression_encodings;
9267                    let max_decoding_message_size = self.max_decoding_message_size;
9268                    let max_encoding_message_size = self.max_encoding_message_size;
9269                    let inner = self.inner.clone();
9270                    let fut = async move {
9271                        let method = ListFullSvc(inner);
9272                        let codec = tonic::codec::ProstCodec::default();
9273                        let mut grpc = tonic::server::Grpc::new(codec)
9274                            .apply_compression_config(
9275                                accept_compression_encodings,
9276                                send_compression_encodings,
9277                            )
9278                            .apply_max_message_size_config(
9279                                max_decoding_message_size,
9280                                max_encoding_message_size,
9281                            );
9282                        let res = grpc.unary(method, req).await;
9283                        Ok(res)
9284                    };
9285                    Box::pin(fut)
9286                }
9287                "/qdrant.Snapshots/DeleteFull" => {
9288                    #[allow(non_camel_case_types)]
9289                    struct DeleteFullSvc<T: Snapshots>(pub Arc<T>);
9290                    impl<
9291                        T: Snapshots,
9292                    > tonic::server::UnaryService<super::DeleteFullSnapshotRequest>
9293                    for DeleteFullSvc<T> {
9294                        type Response = super::DeleteSnapshotResponse;
9295                        type Future = BoxFuture<
9296                            tonic::Response<Self::Response>,
9297                            tonic::Status,
9298                        >;
9299                        fn call(
9300                            &mut self,
9301                            request: tonic::Request<super::DeleteFullSnapshotRequest>,
9302                        ) -> Self::Future {
9303                            let inner = Arc::clone(&self.0);
9304                            let fut = async move {
9305                                <T as Snapshots>::delete_full(&inner, request).await
9306                            };
9307                            Box::pin(fut)
9308                        }
9309                    }
9310                    let accept_compression_encodings = self.accept_compression_encodings;
9311                    let send_compression_encodings = self.send_compression_encodings;
9312                    let max_decoding_message_size = self.max_decoding_message_size;
9313                    let max_encoding_message_size = self.max_encoding_message_size;
9314                    let inner = self.inner.clone();
9315                    let fut = async move {
9316                        let method = DeleteFullSvc(inner);
9317                        let codec = tonic::codec::ProstCodec::default();
9318                        let mut grpc = tonic::server::Grpc::new(codec)
9319                            .apply_compression_config(
9320                                accept_compression_encodings,
9321                                send_compression_encodings,
9322                            )
9323                            .apply_max_message_size_config(
9324                                max_decoding_message_size,
9325                                max_encoding_message_size,
9326                            );
9327                        let res = grpc.unary(method, req).await;
9328                        Ok(res)
9329                    };
9330                    Box::pin(fut)
9331                }
9332                _ => {
9333                    Box::pin(async move {
9334                        let mut response = http::Response::new(empty_body());
9335                        let headers = response.headers_mut();
9336                        headers
9337                            .insert(
9338                                tonic::Status::GRPC_STATUS,
9339                                (tonic::Code::Unimplemented as i32).into(),
9340                            );
9341                        headers
9342                            .insert(
9343                                http::header::CONTENT_TYPE,
9344                                tonic::metadata::GRPC_CONTENT_TYPE,
9345                            );
9346                        Ok(response)
9347                    })
9348                }
9349            }
9350        }
9351    }
9352    impl<T> Clone for SnapshotsServer<T> {
9353        fn clone(&self) -> Self {
9354            let inner = self.inner.clone();
9355            Self {
9356                inner,
9357                accept_compression_encodings: self.accept_compression_encodings,
9358                send_compression_encodings: self.send_compression_encodings,
9359                max_decoding_message_size: self.max_decoding_message_size,
9360                max_encoding_message_size: self.max_encoding_message_size,
9361            }
9362        }
9363    }
9364    /// Generated gRPC service name
9365    pub const SERVICE_NAME: &str = "qdrant.Snapshots";
9366    impl<T> tonic::server::NamedService for SnapshotsServer<T> {
9367        const NAME: &'static str = SERVICE_NAME;
9368    }
9369}
9370#[derive(Clone, Copy, PartialEq, ::prost::Message)]
9371pub struct HealthCheckRequest {}
9372#[derive(Clone, PartialEq, ::prost::Message)]
9373pub struct HealthCheckReply {
9374    #[prost(string, tag = "1")]
9375    pub title: ::prost::alloc::string::String,
9376    #[prost(string, tag = "2")]
9377    pub version: ::prost::alloc::string::String,
9378    #[prost(string, optional, tag = "3")]
9379    pub commit: ::core::option::Option<::prost::alloc::string::String>,
9380}
9381/// Generated client implementations.
9382pub mod qdrant_client {
9383    #![allow(
9384        unused_variables,
9385        dead_code,
9386        missing_docs,
9387        clippy::wildcard_imports,
9388        clippy::let_unit_value,
9389    )]
9390    use tonic::codegen::*;
9391    use tonic::codegen::http::Uri;
9392    #[derive(Debug, Clone)]
9393    pub struct QdrantClient<T> {
9394        inner: tonic::client::Grpc<T>,
9395    }
9396    impl QdrantClient<tonic::transport::Channel> {
9397        /// Attempt to create a new client by connecting to a given endpoint.
9398        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
9399        where
9400            D: TryInto<tonic::transport::Endpoint>,
9401            D::Error: Into<StdError>,
9402        {
9403            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
9404            Ok(Self::new(conn))
9405        }
9406    }
9407    impl<T> QdrantClient<T>
9408    where
9409        T: tonic::client::GrpcService<tonic::body::BoxBody>,
9410        T::Error: Into<StdError>,
9411        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
9412        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
9413    {
9414        pub fn new(inner: T) -> Self {
9415            let inner = tonic::client::Grpc::new(inner);
9416            Self { inner }
9417        }
9418        pub fn with_origin(inner: T, origin: Uri) -> Self {
9419            let inner = tonic::client::Grpc::with_origin(inner, origin);
9420            Self { inner }
9421        }
9422        pub fn with_interceptor<F>(
9423            inner: T,
9424            interceptor: F,
9425        ) -> QdrantClient<InterceptedService<T, F>>
9426        where
9427            F: tonic::service::Interceptor,
9428            T::ResponseBody: Default,
9429            T: tonic::codegen::Service<
9430                http::Request<tonic::body::BoxBody>,
9431                Response = http::Response<
9432                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
9433                >,
9434            >,
9435            <T as tonic::codegen::Service<
9436                http::Request<tonic::body::BoxBody>,
9437            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
9438        {
9439            QdrantClient::new(InterceptedService::new(inner, interceptor))
9440        }
9441        /// Compress requests with the given encoding.
9442        ///
9443        /// This requires the server to support it otherwise it might respond with an
9444        /// error.
9445        #[must_use]
9446        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
9447            self.inner = self.inner.send_compressed(encoding);
9448            self
9449        }
9450        /// Enable decompressing responses.
9451        #[must_use]
9452        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
9453            self.inner = self.inner.accept_compressed(encoding);
9454            self
9455        }
9456        /// Limits the maximum size of a decoded message.
9457        ///
9458        /// Default: `4MB`
9459        #[must_use]
9460        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
9461            self.inner = self.inner.max_decoding_message_size(limit);
9462            self
9463        }
9464        /// Limits the maximum size of an encoded message.
9465        ///
9466        /// Default: `usize::MAX`
9467        #[must_use]
9468        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
9469            self.inner = self.inner.max_encoding_message_size(limit);
9470            self
9471        }
9472        pub async fn health_check(
9473            &mut self,
9474            request: impl tonic::IntoRequest<super::HealthCheckRequest>,
9475        ) -> std::result::Result<
9476            tonic::Response<super::HealthCheckReply>,
9477            tonic::Status,
9478        > {
9479            self.inner
9480                .ready()
9481                .await
9482                .map_err(|e| {
9483                    tonic::Status::unknown(
9484                        format!("Service was not ready: {}", e.into()),
9485                    )
9486                })?;
9487            let codec = tonic::codec::ProstCodec::default();
9488            let path = http::uri::PathAndQuery::from_static(
9489                "/qdrant.Qdrant/HealthCheck",
9490            );
9491            let mut req = request.into_request();
9492            req.extensions_mut().insert(GrpcMethod::new("qdrant.Qdrant", "HealthCheck"));
9493            self.inner.unary(req, path, codec).await
9494        }
9495    }
9496}
9497/// Generated server implementations.
9498pub mod qdrant_server {
9499    #![allow(
9500        unused_variables,
9501        dead_code,
9502        missing_docs,
9503        clippy::wildcard_imports,
9504        clippy::let_unit_value,
9505    )]
9506    use tonic::codegen::*;
9507    /// Generated trait containing gRPC methods that should be implemented for use with QdrantServer.
9508    #[async_trait]
9509    pub trait Qdrant: std::marker::Send + std::marker::Sync + 'static {
9510        async fn health_check(
9511            &self,
9512            request: tonic::Request<super::HealthCheckRequest>,
9513        ) -> std::result::Result<
9514            tonic::Response<super::HealthCheckReply>,
9515            tonic::Status,
9516        >;
9517    }
9518    #[derive(Debug)]
9519    pub struct QdrantServer<T> {
9520        inner: Arc<T>,
9521        accept_compression_encodings: EnabledCompressionEncodings,
9522        send_compression_encodings: EnabledCompressionEncodings,
9523        max_decoding_message_size: Option<usize>,
9524        max_encoding_message_size: Option<usize>,
9525    }
9526    impl<T> QdrantServer<T> {
9527        pub fn new(inner: T) -> Self {
9528            Self::from_arc(Arc::new(inner))
9529        }
9530        pub fn from_arc(inner: Arc<T>) -> Self {
9531            Self {
9532                inner,
9533                accept_compression_encodings: Default::default(),
9534                send_compression_encodings: Default::default(),
9535                max_decoding_message_size: None,
9536                max_encoding_message_size: None,
9537            }
9538        }
9539        pub fn with_interceptor<F>(
9540            inner: T,
9541            interceptor: F,
9542        ) -> InterceptedService<Self, F>
9543        where
9544            F: tonic::service::Interceptor,
9545        {
9546            InterceptedService::new(Self::new(inner), interceptor)
9547        }
9548        /// Enable decompressing requests with the given encoding.
9549        #[must_use]
9550        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
9551            self.accept_compression_encodings.enable(encoding);
9552            self
9553        }
9554        /// Compress responses with the given encoding, if the client supports it.
9555        #[must_use]
9556        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
9557            self.send_compression_encodings.enable(encoding);
9558            self
9559        }
9560        /// Limits the maximum size of a decoded message.
9561        ///
9562        /// Default: `4MB`
9563        #[must_use]
9564        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
9565            self.max_decoding_message_size = Some(limit);
9566            self
9567        }
9568        /// Limits the maximum size of an encoded message.
9569        ///
9570        /// Default: `usize::MAX`
9571        #[must_use]
9572        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
9573            self.max_encoding_message_size = Some(limit);
9574            self
9575        }
9576    }
9577    impl<T, B> tonic::codegen::Service<http::Request<B>> for QdrantServer<T>
9578    where
9579        T: Qdrant,
9580        B: Body + std::marker::Send + 'static,
9581        B::Error: Into<StdError> + std::marker::Send + 'static,
9582    {
9583        type Response = http::Response<tonic::body::BoxBody>;
9584        type Error = std::convert::Infallible;
9585        type Future = BoxFuture<Self::Response, Self::Error>;
9586        fn poll_ready(
9587            &mut self,
9588            _cx: &mut Context<'_>,
9589        ) -> Poll<std::result::Result<(), Self::Error>> {
9590            Poll::Ready(Ok(()))
9591        }
9592        fn call(&mut self, req: http::Request<B>) -> Self::Future {
9593            match req.uri().path() {
9594                "/qdrant.Qdrant/HealthCheck" => {
9595                    #[allow(non_camel_case_types)]
9596                    struct HealthCheckSvc<T: Qdrant>(pub Arc<T>);
9597                    impl<
9598                        T: Qdrant,
9599                    > tonic::server::UnaryService<super::HealthCheckRequest>
9600                    for HealthCheckSvc<T> {
9601                        type Response = super::HealthCheckReply;
9602                        type Future = BoxFuture<
9603                            tonic::Response<Self::Response>,
9604                            tonic::Status,
9605                        >;
9606                        fn call(
9607                            &mut self,
9608                            request: tonic::Request<super::HealthCheckRequest>,
9609                        ) -> Self::Future {
9610                            let inner = Arc::clone(&self.0);
9611                            let fut = async move {
9612                                <T as Qdrant>::health_check(&inner, request).await
9613                            };
9614                            Box::pin(fut)
9615                        }
9616                    }
9617                    let accept_compression_encodings = self.accept_compression_encodings;
9618                    let send_compression_encodings = self.send_compression_encodings;
9619                    let max_decoding_message_size = self.max_decoding_message_size;
9620                    let max_encoding_message_size = self.max_encoding_message_size;
9621                    let inner = self.inner.clone();
9622                    let fut = async move {
9623                        let method = HealthCheckSvc(inner);
9624                        let codec = tonic::codec::ProstCodec::default();
9625                        let mut grpc = tonic::server::Grpc::new(codec)
9626                            .apply_compression_config(
9627                                accept_compression_encodings,
9628                                send_compression_encodings,
9629                            )
9630                            .apply_max_message_size_config(
9631                                max_decoding_message_size,
9632                                max_encoding_message_size,
9633                            );
9634                        let res = grpc.unary(method, req).await;
9635                        Ok(res)
9636                    };
9637                    Box::pin(fut)
9638                }
9639                _ => {
9640                    Box::pin(async move {
9641                        let mut response = http::Response::new(empty_body());
9642                        let headers = response.headers_mut();
9643                        headers
9644                            .insert(
9645                                tonic::Status::GRPC_STATUS,
9646                                (tonic::Code::Unimplemented as i32).into(),
9647                            );
9648                        headers
9649                            .insert(
9650                                http::header::CONTENT_TYPE,
9651                                tonic::metadata::GRPC_CONTENT_TYPE,
9652                            );
9653                        Ok(response)
9654                    })
9655                }
9656            }
9657        }
9658    }
9659    impl<T> Clone for QdrantServer<T> {
9660        fn clone(&self) -> Self {
9661            let inner = self.inner.clone();
9662            Self {
9663                inner,
9664                accept_compression_encodings: self.accept_compression_encodings,
9665                send_compression_encodings: self.send_compression_encodings,
9666                max_decoding_message_size: self.max_decoding_message_size,
9667                max_encoding_message_size: self.max_encoding_message_size,
9668            }
9669        }
9670    }
9671    /// Generated gRPC service name
9672    pub const SERVICE_NAME: &str = "qdrant.Qdrant";
9673    impl<T> tonic::server::NamedService for QdrantServer<T> {
9674        const NAME: &'static str = SERVICE_NAME;
9675    }
9676}
9677pub use crate::manual_builder::*;
9678pub use crate::builder_types::*;
9679pub use crate::qdrant_client::builders::*;
9680pub use crate::builders::*;
9681pub use prost_types::Timestamp;