qdrant_client/builders/mmr_builder.rs
1use crate::qdrant::Mmr;
2
3#[derive(Clone)]
4pub struct MmrBuilder {
5 /// Tunable parameter for the MMR algorithm.
6 /// Determines the balance between diversity and relevance.
7 ///
8 /// A higher value favors diversity (dissimilarity to selected results),
9 /// while a lower value favors relevance (similarity to the query vector).
10 ///
11 /// Must be in the range [0, 1].
12 /// Default value is 0.5.
13 pub(crate) diversity: Option<Option<f32>>,
14 /// The maximum number of candidates to consider for re-ranking.
15 ///
16 /// If not specified, the `limit` value is used.
17 pub(crate) candidates_limit: Option<Option<u32>>,
18}
19
20impl MmrBuilder {
21 /// Create a new MmrBuilder with default values.
22 pub fn new() -> Self {
23 Self::create_empty()
24 }
25
26 /// Create a new MmrBuilder with both diversity and candidates limit.
27 ///
28 /// # Arguments
29 ///
30 /// * `diversity` - Must be in the range [0, 1]. Higher values favor diversity.
31 /// * `candidates_limit` - Maximum number of candidates to consider for re-ranking.
32 ///
33 /// # Examples
34 ///
35 /// ```
36 /// use qdrant_client::qdrant::MmrBuilder;
37 ///
38 /// let mmr = MmrBuilder::with_params(0.6, 100).build();
39 /// ```
40 pub fn with_params(diversity: f32, candidates_limit: u32) -> Self {
41 Self::new()
42 .diversity(diversity)
43 .candidates_limit(candidates_limit)
44 }
45
46 /// Tunable parameter for the MMR algorithm.
47 /// Determines the balance between diversity and relevance.
48 ///
49 /// A higher value favors diversity (dissimilarity to selected results),
50 /// while a lower value favors relevance (similarity to the query vector).
51 ///
52 /// Must be in the range [0, 1].
53 /// Default value is 0.5.
54 pub fn diversity(self, value: f32) -> Self {
55 let mut new = self;
56 new.diversity = Option::Some(Option::Some(value));
57 new
58 }
59
60 /// The maximum number of candidates to consider for re-ranking.
61 ///
62 /// If not specified, the `limit` value is used.
63 pub fn candidates_limit(self, value: u32) -> Self {
64 let mut new = self;
65 new.candidates_limit = Option::Some(Option::Some(value));
66 new
67 }
68
69 pub fn build(self) -> Mmr {
70 Mmr {
71 diversity: self.diversity.unwrap_or_default(),
72 candidates_limit: self.candidates_limit.unwrap_or_default(),
73 }
74 }
75
76 /// Create an empty builder, with all fields set to `None` or `PhantomData`.
77 fn create_empty() -> Self {
78 Self {
79 diversity: core::default::Default::default(),
80 candidates_limit: core::default::Default::default(),
81 }
82 }
83}
84
85impl From<MmrBuilder> for Mmr {
86 fn from(value: MmrBuilder) -> Self {
87 value.build()
88 }
89}
90
91impl Default for MmrBuilder {
92 fn default() -> Self {
93 Self::create_empty()
94 }
95}