reinfer_client/resources/
validation.rs

1use crate::{LabelGroup, LabelName, ModelVersion};
2use ordered_float::NotNan;
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize)]
6pub struct LabelValidation {
7    pub thresholds: Vec<NotNan<f64>>,
8    pub precisions: Vec<NotNan<f64>>,
9    pub recalls: Vec<NotNan<f64>>,
10}
11
12#[derive(Serialize)]
13pub struct LabelValidationRequest {
14    pub label: LabelName,
15}
16
17#[derive(Deserialize)]
18pub struct LabelValidationResponse {
19    pub label_validation: LabelValidation,
20}
21
22#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
23pub struct ModelScore(pub f32);
24
25impl std::fmt::Display for ModelScore {
26    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27        write!(f, "{}", self.0)
28    }
29}
30
31#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
32#[serde(rename_all = "snake_case")]
33pub enum DatasetQuality {
34    None,
35    Poor,
36    Average,
37    Good,
38    Excellent,
39}
40
41impl std::fmt::Display for DatasetQuality {
42    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43        write!(
44            f,
45            "{}",
46            match self {
47                Self::None => "None",
48                Self::Poor => "Poor",
49                Self::Average => "Average",
50                Self::Good => "Good",
51                Self::Excellent => "Excellent",
52            }
53        )
54    }
55}
56
57#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
58pub struct ModelRating {
59    pub score: ModelScore,
60    pub quality: DatasetQuality,
61}
62
63#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
64pub struct ValidationSummary {
65    pub version: ModelVersion,
66    pub model_rating: ModelRating,
67    pub reviewed_size: usize,
68}
69
70#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
71pub struct ValidationResponse {
72    pub label_groups: Vec<LabelGroup>,
73    pub validation: ValidationSummary,
74}
75
76impl ValidationResponse {
77    pub fn get_default_label_group(&self) -> Option<&LabelGroup> {
78        self.label_groups
79            .iter()
80            .find(|group| group.name.0 == "default")
81    }
82}