use serde::{Deserialize, Serialize};
pub use crate::models::LONG_CONTEXT_THRESHOLD;
pub const DEFAULT_WARNING_THRESHOLD: f64 = 0.80;
pub const DEFAULT_CRITICAL_THRESHOLD: f64 = 0.95;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PricingTier {
Standard,
Extended,
}
impl PricingTier {
pub fn for_context(context_tokens: u64) -> Self {
if context_tokens <= LONG_CONTEXT_THRESHOLD {
Self::Standard
} else {
Self::Extended
}
}
pub fn is_extended(&self) -> bool {
matches!(self, Self::Extended)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tier_standard() {
assert_eq!(PricingTier::for_context(100_000), PricingTier::Standard);
assert_eq!(PricingTier::for_context(200_000), PricingTier::Standard);
}
#[test]
fn test_tier_extended() {
assert_eq!(PricingTier::for_context(200_001), PricingTier::Extended);
assert_eq!(PricingTier::for_context(1_000_000), PricingTier::Extended);
}
}