use crate::tier::StorageTier;
use crate::write::PackedWeight;
use std::collections::HashSet;
#[derive(Debug, Clone)]
pub struct AutoTierOptions {
pub hot_names: HashSet<String>,
pub warm_substrings: Vec<String>,
pub warm_min_bytes: usize,
}
impl Default for AutoTierOptions {
fn default() -> Self {
Self {
hot_names: HashSet::new(),
warm_substrings: vec![
"expert".into(),
"experts".into(),
"lora".into(),
"ffn_gate_exps".into(),
"ffn_up_exps".into(),
"ffn_down_exps".into(),
],
warm_min_bytes: 16 << 20, }
}
}
pub fn apply_auto_tier(weights: &mut [PackedWeight], opts: &AutoTierOptions) {
for w in weights.iter_mut() {
if opts.hot_names.contains(&w.name) {
w.tier = StorageTier::Hot;
continue;
}
let lower = w.name.to_ascii_lowercase();
if opts
.warm_substrings
.iter()
.any(|s| lower.contains(&s.to_ascii_lowercase()))
{
w.tier = StorageTier::Warm;
continue;
}
if w.data.len() >= opts.warm_min_bytes && w.tier == StorageTier::Hot {
w.tier = StorageTier::Warm;
}
}
}