#[derive(Debug, Clone, Default)]
pub enum OffloadPolicy {
#[default]
None,
Budget {
ram_bytes: u64,
},
PinnedHotSet {
ram_bytes: u64,
pin_embeddings: bool,
pin_output_head: bool,
pin_last_n_layers: usize,
prefetch_n_ahead: usize,
},
}
impl OffloadPolicy {
pub fn ram_budget_bytes(&self) -> Option<u64> {
match self {
Self::None => None,
Self::Budget { ram_bytes } => Some(*ram_bytes),
Self::PinnedHotSet { ram_bytes, .. } => Some(*ram_bytes),
}
}
pub fn is_disabled(&self) -> bool {
matches!(self, Self::None)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_none() {
assert!(matches!(OffloadPolicy::default(), OffloadPolicy::None));
}
#[test]
fn none_has_no_budget() {
assert_eq!(OffloadPolicy::None.ram_budget_bytes(), None);
}
#[test]
fn budget_returns_bytes() {
let policy = OffloadPolicy::Budget {
ram_bytes: 1024 * 1024 * 1024,
};
assert_eq!(policy.ram_budget_bytes(), Some(1024 * 1024 * 1024));
}
#[test]
fn pinned_hot_set_returns_bytes() {
let policy = OffloadPolicy::PinnedHotSet {
ram_bytes: 512 * 1024 * 1024,
pin_embeddings: true,
pin_output_head: true,
pin_last_n_layers: 4,
prefetch_n_ahead: 2,
};
assert_eq!(policy.ram_budget_bytes(), Some(512 * 1024 * 1024));
}
#[test]
fn none_is_disabled() {
assert!(OffloadPolicy::None.is_disabled());
assert!(!OffloadPolicy::Budget { ram_bytes: 1 }.is_disabled());
}
#[test]
fn policy_clone_is_independent() {
let original = OffloadPolicy::PinnedHotSet {
ram_bytes: 100,
pin_embeddings: false,
pin_output_head: true,
pin_last_n_layers: 2,
prefetch_n_ahead: 1,
};
let cloned = original.clone();
let _ = format!("{original:?}");
let _ = format!("{cloned:?}");
}
}