use std::sync::OnceLock;
#[derive(Debug, Clone, PartialEq)]
pub enum OverageDisabledReason {
OutOfCredits,
OverageNotProvisioned,
OrgLevelDisabled,
OrgLevelDisabledUntil,
SeatTierLevelDisabled,
MemberLevelDisabled,
SeatTierZeroCreditLimit,
GroupZeroCreditLimit,
MemberZeroCreditLimit,
OrgServiceLevelDisabled,
OrgServiceZeroCreditLimit,
NoLimitsConfigured,
Unknown,
}
struct GlobalConfig {
cached_extra_usage_disabled_reason: Option<OverageDisabledReason>,
}
static GLOBAL_CONFIG: OnceLock<GlobalConfig> = OnceLock::new();
fn get_global_config() -> &'static GlobalConfig {
GLOBAL_CONFIG.get_or_init(|| GlobalConfig {
cached_extra_usage_disabled_reason: None,
})
}
fn is_extra_usage_enabled() -> bool {
let reason = get_global_config()
.cached_extra_usage_disabled_reason
.clone();
if reason.is_none() {
return false;
}
let reason = reason.unwrap();
if reason == OverageDisabledReason::OutOfCredits {
return true;
}
matches!(
reason,
OverageDisabledReason::OverageNotProvisioned
| OverageDisabledReason::OrgLevelDisabled
| OverageDisabledReason::OrgLevelDisabledUntil
| OverageDisabledReason::SeatTierLevelDisabled
| OverageDisabledReason::MemberLevelDisabled
| OverageDisabledReason::SeatTierZeroCreditLimit
| OverageDisabledReason::GroupZeroCreditLimit
| OverageDisabledReason::MemberZeroCreditLimit
| OverageDisabledReason::OrgServiceLevelDisabled
| OverageDisabledReason::OrgServiceZeroCreditLimit
| OverageDisabledReason::NoLimitsConfigured
| OverageDisabledReason::Unknown
)
}
pub fn check_opus_1m_access() -> bool {
if is_1m_context_disabled() {
return false;
}
if is_claude_ai_subscriber() {
return is_extra_usage_enabled();
}
true
}
pub fn check_sonnet_1m_access() -> bool {
if is_1m_context_disabled() {
return false;
}
if is_claude_ai_subscriber() {
return is_extra_usage_enabled();
}
true
}
fn is_1m_context_disabled() -> bool {
false
}
fn is_claude_ai_subscriber() -> bool {
false
}