pub use codex_client::Provider; pub use codex_client::RetryConfig; pub fn is_azure_responses_provider(name: &str, base_url: Option<&str>) -> bool { if name.eq_ignore_ascii_case("azure") { true } else if let Some(base_url) = base_url { matches_azure_responses_base_url(base_url) } else { false } } fn matches_azure_responses_base_url(base_url: &str) -> bool { let base_url = base_url.to_ascii_lowercase(); const AZURE_MARKERS: [&str; 6] = [ "openai.azure.", "cognitiveservices.azure.", "aoai.azure.", "azure-api.", "azurefd.", "windows.net/openai", ]; AZURE_MARKERS.iter().any(|marker| base_url.contains(marker)) } #[cfg(test)] mod tests { use super::*; #[test] fn detects_azure_responses_base_urls() { let positive_cases = [ "https://foo.openai.azure.com/openai", "https://foo.openai.azure.us/openai/deployments/bar", "https://foo.cognitiveservices.azure.cn/openai", "https://foo.aoai.azure.com/openai", "https://foo.openai.azure-api.net/openai", "https://foo.z01.azurefd.net/", ]; for base_url in positive_cases { assert!( is_azure_responses_provider("test", Some(base_url)), "expected {base_url} to be detected as Azure" ); } assert!(is_azure_responses_provider( "Azure", Some("https://example.com") )); let negative_cases = [ "https://api.openai.com/v1", "https://example.com/openai", "https://myproxy.azurewebsites.net/openai", ]; for base_url in negative_cases { assert!( !is_azure_responses_provider("test", Some(base_url)), "expected {base_url} not to be detected as Azure" ); } } }