use crate::common::model_type::ModelTypeSpec;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum AssetKind {
ModelWeights,
Transform,
ModelConfig,
Tokenizer,
}
impl AssetKind {
pub const ORDERED: &'static [AssetKind] = &[
AssetKind::ModelWeights,
AssetKind::Transform,
AssetKind::ModelConfig,
AssetKind::Tokenizer,
];
}
pub trait AssetPolicySpec: ModelTypeSpec {
fn required_assets() -> &'static [AssetKind];
fn optional_assets() -> &'static [AssetKind];
}
macro_rules! asset_policy_spec {
(Encoder, $model_type:ident) => {
impl AssetPolicySpec for crate::common::model_type::$model_type {
fn required_assets() -> &'static [AssetKind] {
&[
AssetKind::ModelWeights,
AssetKind::ModelConfig,
AssetKind::Tokenizer,
]
}
fn optional_assets() -> &'static [AssetKind] {
&[AssetKind::Transform]
}
}
};
}
asset_policy_spec!(Encoder, Embedding);
asset_policy_spec!(Encoder, SequenceClassification);
asset_policy_spec!(Encoder, TokenClassification);
asset_policy_spec!(Encoder, SentenceEmbedding);