nodedb_types/config/tuning/
engines.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct VectorTuning {
10 #[serde(default = "default_flat_index_threshold")]
11 pub flat_index_threshold: usize,
12 #[serde(default = "default_seal_threshold")]
13 pub seal_threshold: usize,
14 #[serde(default = "default_pq_m")]
15 pub default_pq_m: usize,
16 #[serde(default = "default_ivf_cells")]
17 pub default_ivf_cells: usize,
18 #[serde(default = "default_ivf_nprobe")]
19 pub default_ivf_nprobe: usize,
20}
21
22impl Default for VectorTuning {
23 fn default() -> Self {
24 Self {
25 flat_index_threshold: default_flat_index_threshold(),
26 seal_threshold: default_seal_threshold(),
27 default_pq_m: default_pq_m(),
28 default_ivf_cells: default_ivf_cells(),
29 default_ivf_nprobe: default_ivf_nprobe(),
30 }
31 }
32}
33
34fn default_flat_index_threshold() -> usize {
35 10_000
36}
37fn default_seal_threshold() -> usize {
38 65_536
39}
40fn default_pq_m() -> usize {
41 8
42}
43fn default_ivf_cells() -> usize {
44 256
45}
46fn default_ivf_nprobe() -> usize {
47 16
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct SparseTuning {
53 #[serde(default = "default_bm25_k1")]
54 pub bm25_k1: f32,
55 #[serde(default = "default_bm25_b")]
56 pub bm25_b: f32,
57 #[serde(default = "default_max_gsis_per_collection")]
58 pub max_gsis_per_collection: usize,
59 #[serde(default = "default_hll_m")]
60 pub hll_registers: usize,
61 #[serde(default = "default_hll_p")]
62 pub hll_precision: u32,
63}
64
65impl Default for SparseTuning {
66 fn default() -> Self {
67 Self {
68 bm25_k1: default_bm25_k1(),
69 bm25_b: default_bm25_b(),
70 max_gsis_per_collection: default_max_gsis_per_collection(),
71 hll_registers: default_hll_m(),
72 hll_precision: default_hll_p(),
73 }
74 }
75}
76
77fn default_bm25_k1() -> f32 {
78 1.2
79}
80fn default_bm25_b() -> f32 {
81 0.75
82}
83fn default_max_gsis_per_collection() -> usize {
84 4
85}
86fn default_hll_m() -> usize {
87 256
88}
89fn default_hll_p() -> u32 {
90 8
91}
92
93pub const DEFAULT_MAX_VISITED: usize = 100_000;
96
97pub const DEFAULT_MAX_DEPTH: usize = 10;
99
100pub const DEFAULT_VARLEN_MAX_RESULTS: usize = 100_000;
103
104pub const DEFAULT_VARLEN_MAX_FRONTIER: usize = 100_000;
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct GraphTuning {
111 #[serde(default = "default_max_visited")]
112 pub max_visited: usize,
113 #[serde(default = "default_max_depth")]
114 pub max_depth: usize,
115 #[serde(default = "default_lcc_high_degree_threshold")]
116 pub lcc_high_degree_threshold: usize,
117 #[serde(default = "default_lcc_sample_pairs")]
118 pub lcc_sample_pairs: usize,
119 #[serde(default = "default_varlen_max_results")]
125 pub varlen_max_results: usize,
126 #[serde(default = "default_varlen_max_frontier")]
131 pub varlen_max_frontier: usize,
132}
133
134impl Default for GraphTuning {
135 fn default() -> Self {
136 Self {
137 max_visited: default_max_visited(),
138 max_depth: default_max_depth(),
139 lcc_high_degree_threshold: default_lcc_high_degree_threshold(),
140 lcc_sample_pairs: default_lcc_sample_pairs(),
141 varlen_max_results: default_varlen_max_results(),
142 varlen_max_frontier: default_varlen_max_frontier(),
143 }
144 }
145}
146
147fn default_max_visited() -> usize {
148 DEFAULT_MAX_VISITED
149}
150fn default_max_depth() -> usize {
151 DEFAULT_MAX_DEPTH
152}
153fn default_lcc_high_degree_threshold() -> usize {
154 2_000
155}
156fn default_lcc_sample_pairs() -> usize {
157 10_000
158}
159fn default_varlen_max_results() -> usize {
160 DEFAULT_VARLEN_MAX_RESULTS
161}
162fn default_varlen_max_frontier() -> usize {
163 DEFAULT_VARLEN_MAX_FRONTIER
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
168pub struct TimeseriesToning {
169 #[serde(default = "default_memtable_budget_bytes")]
172 pub memtable_budget_bytes: usize,
173 #[serde(default = "default_memtable_hard_limit_bytes")]
181 pub memtable_hard_limit_bytes: usize,
182 #[serde(default = "default_max_tag_cardinality")]
186 pub max_tag_cardinality: u32,
187 #[serde(default = "default_total_budget_bytes")]
188 pub total_budget_bytes: usize,
189 #[serde(default = "default_ts_block_size")]
190 pub block_size: usize,
191}
192
193impl Default for TimeseriesToning {
194 fn default() -> Self {
195 Self {
196 memtable_budget_bytes: default_memtable_budget_bytes(),
197 memtable_hard_limit_bytes: default_memtable_hard_limit_bytes(),
198 max_tag_cardinality: default_max_tag_cardinality(),
199 total_budget_bytes: default_total_budget_bytes(),
200 block_size: default_ts_block_size(),
201 }
202 }
203}
204
205fn default_memtable_budget_bytes() -> usize {
206 64 * 1024 * 1024
207}
208fn default_memtable_hard_limit_bytes() -> usize {
209 80 * 1024 * 1024
210}
211fn default_max_tag_cardinality() -> u32 {
212 100_000
213}
214fn default_total_budget_bytes() -> usize {
215 100 * 1024 * 1024
216}
217fn default_ts_block_size() -> usize {
218 1024
219}
220
221#[derive(Debug, Clone, Serialize, Deserialize)]
227pub struct KvTuning {
228 #[serde(default = "default_kv_capacity")]
232 pub default_capacity: usize,
233
234 #[serde(default = "default_kv_rehash_load_factor")]
238 pub rehash_load_factor: f32,
239
240 #[serde(default = "default_kv_rehash_batch_size")]
244 pub rehash_batch_size: usize,
245
246 #[serde(default = "default_kv_inline_threshold")]
250 pub default_inline_threshold: usize,
251
252 #[serde(default = "default_kv_expiry_reap_budget")]
257 pub expiry_reap_budget: usize,
258
259 #[serde(default = "default_kv_expiry_tick_ms")]
263 pub expiry_tick_ms: u64,
264}
265
266impl Default for KvTuning {
267 fn default() -> Self {
268 Self {
269 default_capacity: default_kv_capacity(),
270 rehash_load_factor: default_kv_rehash_load_factor(),
271 rehash_batch_size: default_kv_rehash_batch_size(),
272 default_inline_threshold: default_kv_inline_threshold(),
273 expiry_reap_budget: default_kv_expiry_reap_budget(),
274 expiry_tick_ms: default_kv_expiry_tick_ms(),
275 }
276 }
277}
278
279fn default_kv_capacity() -> usize {
280 16_384
281}
282fn default_kv_rehash_load_factor() -> f32 {
283 0.75
284}
285fn default_kv_rehash_batch_size() -> usize {
286 8
287}
288fn default_kv_inline_threshold() -> usize {
289 64
290}
291fn default_kv_expiry_reap_budget() -> usize {
292 1024
293}
294fn default_kv_expiry_tick_ms() -> u64 {
295 1000
296}