reinfer-client 0.37.3

API client for Re:infer, the conversational data intelligence platform
Documentation
use crate::{LabelGroup, LabelName, ModelVersion};
use ordered_float::NotNan;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct LabelValidation {
    pub thresholds: Vec<NotNan<f64>>,
    pub precisions: Vec<NotNan<f64>>,
    pub recalls: Vec<NotNan<f64>>,
}

#[derive(Serialize)]
pub struct LabelValidationRequest {
    pub label: LabelName,
}

#[derive(Deserialize)]
pub struct LabelValidationResponse {
    pub label_validation: LabelValidation,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct ModelScore(pub f32);

impl std::fmt::Display for ModelScore {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.0)
    }
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum DatasetQuality {
    None,
    Poor,
    Average,
    Good,
    Excellent,
}

impl std::fmt::Display for DatasetQuality {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "{}",
            match self {
                Self::None => "None",
                Self::Poor => "Poor",
                Self::Average => "Average",
                Self::Good => "Good",
                Self::Excellent => "Excellent",
            }
        )
    }
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct ModelRating {
    pub score: ModelScore,
    pub quality: DatasetQuality,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct ValidationSummary {
    pub version: ModelVersion,
    pub model_rating: ModelRating,
    pub reviewed_size: usize,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct ValidationResponse {
    pub label_groups: Vec<LabelGroup>,
    pub validation: ValidationSummary,
}

impl ValidationResponse {
    pub fn get_default_label_group(&self) -> Option<&LabelGroup> {
        self.label_groups
            .iter()
            .find(|group| group.name.0 == "default")
    }
}