libmir-metal 0.1.0

Metal inference backend for libmir
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MetalProgressStage {
    LoadWeights,
    PrefillTokens,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MetalProgressUnit {
    Byte,
    Token,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MetalProgressEvent {
    pub stage: MetalProgressStage,
    pub current: u64,
    pub total: u64,
    pub unit: MetalProgressUnit,
    pub detail: String,
}

impl MetalProgressEvent {
    #[must_use]
    pub fn load_weights(current: u64, total: u64, detail: String) -> Self {
        Self {
            stage: MetalProgressStage::LoadWeights,
            current,
            total,
            unit: MetalProgressUnit::Byte,
            detail,
        }
    }

    #[must_use]
    pub fn prefill_tokens(current: usize, total: usize) -> Self {
        Self {
            stage: MetalProgressStage::PrefillTokens,
            current: current as u64,
            total: total as u64,
            unit: MetalProgressUnit::Token,
            detail: format!("token {current}/{total}"),
        }
    }
}