use crate::experiment::KeyValue;
use builder_pattern::Builder;
use serde::{Deserialize, Serialize};
use strum::Display;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum ModelVersionStatus {
PendingRegistration,
FailedRegistration,
Ready,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Builder)]
pub struct CreateModelVersion {
#[serde(rename = "name")]
#[into]
pub registered_model_name: String,
#[serde(rename = "source")]
#[into]
pub artifacts_url: String,
#[into]
pub run_id: String,
#[default(vec![])]
#[serde(default)]
pub tags: Vec<KeyValue>,
#[into]
pub description: String,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ModelVersion {
pub name: String,
pub version: String,
pub creation_timestamp: i64,
pub last_updated_timestamp: i64,
#[serde(default)]
pub user_id: String,
pub current_stage: String,
pub description: String,
#[serde(rename = "source")]
pub artifacts_url: String,
pub run_id: String,
#[serde(default)]
pub status_message: String,
#[serde(default)]
pub tags: Vec<KeyValue>,
pub run_link: String,
#[serde(default)]
pub aliases: Vec<String>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Display)]
pub enum ModelVersionStage {
None,
Production,
Staging,
Archived,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Builder)]
pub struct TransitionModelVersionStage {
#[into]
pub name: String,
#[into]
pub version: String,
pub stage: ModelVersionStage,
#[default(false)]
pub archive_existing_versions: bool,
}