libmir-cuda 0.3.0

CUDA inference backend for libmir
use super::{
    ClampedMoeStorage, MoeProfileFormat, MoeProfileRequest, MxFp4MoeStorage, MxFp8MoeStorage,
};
use crate::{ExecutionPhase, GatedActivation, MoePlanRequest};

impl MoeProfileRequest {
    pub(in crate::backend) const fn nvfp4(
        plan: MoePlanRequest,
        activation: GatedActivation,
    ) -> Self {
        Self {
            phase: plan.phase,
            tokens: plan.tokens,
            experts: plan.experts,
            top_k: plan.top_k,
            hidden_features: plan.hidden_features,
            intermediate_features: plan.intermediate_features,
            format: MoeProfileFormat::NvFp4 { activation },
        }
    }

    #[allow(clippy::too_many_arguments)]
    pub(in crate::backend) const fn affine(
        phase: ExecutionPhase,
        tokens: usize,
        experts: usize,
        top_k: usize,
        hidden_features: usize,
        intermediate_features: usize,
        group_size: usize,
        bits: usize,
        activation: GatedActivation,
    ) -> Self {
        Self {
            phase,
            tokens,
            experts,
            top_k,
            hidden_features,
            intermediate_features,
            format: MoeProfileFormat::Affine { group_size, bits, activation },
        }
    }

    #[allow(clippy::too_many_arguments)]
    pub(in crate::backend) const fn clamped(
        phase: ExecutionPhase,
        tokens: usize,
        experts: usize,
        top_k: usize,
        hidden_features: usize,
        intermediate_features: usize,
        storage: ClampedMoeStorage,
    ) -> Self {
        Self {
            phase,
            tokens,
            experts,
            top_k,
            hidden_features,
            intermediate_features,
            format: MoeProfileFormat::Clamped { storage },
        }
    }

    #[allow(clippy::too_many_arguments)]
    pub(in crate::backend) const fn mxfp4(
        phase: ExecutionPhase,
        tokens: usize,
        experts: usize,
        top_k: usize,
        hidden_features: usize,
        intermediate_features: usize,
        storage: MxFp4MoeStorage,
        activation: GatedActivation,
    ) -> Self {
        Self::block(
            phase,
            tokens,
            experts,
            top_k,
            hidden_features,
            intermediate_features,
            MoeProfileFormat::MxFp4 { storage, activation },
        )
    }

    #[allow(clippy::too_many_arguments)]
    pub(in crate::backend) const fn mxfp8(
        phase: ExecutionPhase,
        tokens: usize,
        experts: usize,
        top_k: usize,
        hidden_features: usize,
        intermediate_features: usize,
        storage: MxFp8MoeStorage,
        bias: bool,
        activation: GatedActivation,
    ) -> Self {
        Self::block(
            phase,
            tokens,
            experts,
            top_k,
            hidden_features,
            intermediate_features,
            MoeProfileFormat::MxFp8 { storage, bias, activation },
        )
    }

    #[allow(clippy::too_many_arguments)]
    const fn block(
        phase: ExecutionPhase,
        tokens: usize,
        experts: usize,
        top_k: usize,
        hidden_features: usize,
        intermediate_features: usize,
        format: MoeProfileFormat,
    ) -> Self {
        Self {
            phase,
            tokens,
            experts,
            top_k,
            hidden_features,
            intermediate_features,
            format,
        }
    }
}