Merge remote-tracking branch 'origin/main' into feat/support-pi

This commit is contained in:
Franklin 2026-02-06 23:22:50 -05:00
commit 8b068eb1ae
3 changed files with 188 additions and 1 deletions

View file

@ -56,6 +56,32 @@ static USER_MESSAGE_COUNTER: AtomicU64 = AtomicU64::new(1);
const ANTHROPIC_MODELS_URL: &str = "https://api.anthropic.com/v1/models?beta=true";
const ANTHROPIC_VERSION: &str = "2023-06-01";
fn claude_oauth_fallback_models() -> AgentModelsResponse {
AgentModelsResponse {
models: vec![
AgentModelInfo {
id: "default".to_string(),
name: Some("Default (recommended)".to_string()),
variants: None,
default_variant: None,
},
AgentModelInfo {
id: "opus".to_string(),
name: Some("Opus".to_string()),
variants: None,
default_variant: None,
},
AgentModelInfo {
id: "haiku".to_string(),
name: Some("Haiku".to_string()),
variants: None,
default_variant: None,
},
],
default_model: Some("default".to_string()),
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum BrandingMode {
#[default]
@ -4007,6 +4033,13 @@ impl SessionManager {
if !response.status().is_success() {
let status = response.status();
let body = response.text().await.unwrap_or_default();
if matches!(cred.auth_type, AuthType::Oauth) {
tracing::warn!(
status = %status,
"Anthropic model list rejected OAuth credentials; using Claude OAuth fallback models"
);
return Ok(claude_oauth_fallback_models());
}
return Err(SandboxError::StreamError {
message: format!("Anthropic models request failed {status}: {body}"),
});
@ -4061,6 +4094,13 @@ impl SessionManager {
default_model = models.first().map(|model| model.id.clone());
}
if models.is_empty() && matches!(cred.auth_type, AuthType::Oauth) {
tracing::warn!(
"Anthropic model list was empty for OAuth credentials; using Claude OAuth fallback models"
);
return Ok(claude_oauth_fallback_models());
}
Ok(AgentModelsResponse {
models,
default_model,