linera_core/client/requests_scheduler/
scoring.rs

1// Copyright (c) Zefchain Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4/// Configurable weights for the scoring algorithm.
5///
6/// These weights determine the relative importance of different metrics
7/// when calculating a node's performance score. All weights should sum to 1.0.
8///
9/// # Examples
10///
11/// ```ignore
12/// // Prioritize response time and success rate equally
13/// let balanced_weights = ScoringWeights {
14///     latency: 0.4,
15///     success: 0.4,
16///     load: 0.2,
17/// };
18///
19/// // Prioritize low latency above all else
20/// let latency_focused = ScoringWeights {
21///     latency: 0.7,
22///     success: 0.2,
23///     load: 0.1,
24/// };
25/// ```
26#[derive(Debug, Clone, Copy)]
27pub struct ScoringWeights {
28    /// Weight for latency metric (lower latency = higher score)
29    pub latency: f64,
30    /// Weight for success rate metric (higher success = higher score)
31    pub success: f64,
32    /// Weight for load metric (lower load = higher score).
33    /// NOTE: Not yet used in scoring; reserved for future use.
34    pub load: f64,
35}
36
37impl Default for ScoringWeights {
38    fn default() -> Self {
39        Self {
40            latency: 0.4, // 40% weight on response time
41            success: 0.4, // 40% weight on success rate
42            load: 0.2,    // 20% weight on current load (reserved)
43        }
44    }
45}