use crate::utils::config::get_global_config;
use crate::utils::env_utils::is_env_truthy;
fn is_extra_usage_enabled() -> bool {
let config = get_global_config();
let reason = config.cached_extra_usage_disabled_reason.clone();
let reason = match reason {
Some(r) => r,
None => return false,
};
if reason.is_empty() {
return true;
}
if reason == "out_of_credits" {
return true;
}
false
}
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 {
is_env_truthy(Some("AI_CODE_DISABLE_1M_CONTEXT"))
}
pub fn is_claude_ai_subscriber() -> bool {
use crate::session_history::get_claude_ai_oauth_tokens;
if is_env_truthy(Some("AI_CODE_USE_BEDROCK"))
|| is_env_truthy(Some("AI_CODE_USE_VERTEX"))
|| is_env_truthy(Some("AI_CODE_USE_FOUNDRY"))
{
return false;
}
if let Some(tokens) = get_claude_ai_oauth_tokens() {
return tokens.scopes.iter().any(|s| s.contains("user")) && !tokens.access_token.is_empty();
}
false
}