Support Atlas Cloud base URL override

This commit is contained in:
nb213 2026-07-13 21:39:47 +08:00
parent d10c1324a1
commit f1713514c8
3 changed files with 12 additions and 6 deletions

View file

@ -2242,6 +2242,7 @@ async fn build_llm_provider(cli: &Cli) -> Result<Box<dyn LlmProvider>, String> {
"atlascloud" => { "atlascloud" => {
let provider = webclaw_llm::providers::atlascloud::AtlasCloudProvider::new( let provider = webclaw_llm::providers::atlascloud::AtlasCloudProvider::new(
None, None,
cli.llm_base_url.clone(),
cli.llm_model.clone(), cli.llm_model.clone(),
) )
.ok_or("ATLASCLOUD_API_KEY not set")?; .ok_or("ATLASCLOUD_API_KEY not set")?;

View file

@ -37,7 +37,7 @@ impl ProviderChain {
providers.push(Box::new(openai)); providers.push(Box::new(openai));
} }
if let Some(atlascloud) = AtlasCloudProvider::new(None, None) { if let Some(atlascloud) = AtlasCloudProvider::new(None, None, None) {
debug!("atlascloud configured, adding to chain"); debug!("atlascloud configured, adding to chain");
providers.push(Box::new(atlascloud)); providers.push(Box::new(atlascloud));
} }

View file

@ -12,10 +12,14 @@ pub struct AtlasCloudProvider {
impl AtlasCloudProvider { impl AtlasCloudProvider {
/// Returns `None` if no Atlas Cloud API key is available (param or env). /// Returns `None` if no Atlas Cloud API key is available (param or env).
pub fn new(key_override: Option<String>, model: Option<String>) -> Option<Self> { pub fn new(
key_override: Option<String>,
base_url: Option<String>,
model: Option<String>,
) -> Option<Self> {
let key = super::load_api_key(key_override, "ATLASCLOUD_API_KEY")?; let key = super::load_api_key(key_override, "ATLASCLOUD_API_KEY")?;
let base_url = std::env::var("ATLASCLOUD_BASE_URL") let base_url = base_url
.ok() .or_else(|| std::env::var("ATLASCLOUD_BASE_URL").ok())
.unwrap_or_else(|| "https://api.atlascloud.ai/v1".into()); .unwrap_or_else(|| "https://api.atlascloud.ai/v1".into());
let model = model.unwrap_or_else(|| "qwen/qwen3.5-flash".into()); let model = model.unwrap_or_else(|| "qwen/qwen3.5-flash".into());
let inner = OpenAiProvider::new(Some(key), Some(base_url), Some(model))?; let inner = OpenAiProvider::new(Some(key), Some(base_url), Some(model))?;
@ -48,12 +52,12 @@ mod tests {
#[test] #[test]
fn empty_key_returns_none() { fn empty_key_returns_none() {
assert!(AtlasCloudProvider::new(Some(String::new()), None).is_none()); assert!(AtlasCloudProvider::new(Some(String::new()), None, None).is_none());
} }
#[test] #[test]
fn explicit_key_constructs_with_atlas_defaults() { fn explicit_key_constructs_with_atlas_defaults() {
let provider = AtlasCloudProvider::new(Some("test-key".into()), None) let provider = AtlasCloudProvider::new(Some("test-key".into()), None, None)
.expect("should construct"); .expect("should construct");
assert_eq!(provider.name(), "atlascloud"); assert_eq!(provider.name(), "atlascloud");
assert_eq!(provider.default_model(), "qwen/qwen3.5-flash"); assert_eq!(provider.default_model(), "qwen/qwen3.5-flash");
@ -63,6 +67,7 @@ mod tests {
fn explicit_model_override() { fn explicit_model_override() {
let provider = AtlasCloudProvider::new( let provider = AtlasCloudProvider::new(
Some("test-key".into()), Some("test-key".into()),
Some("https://proxy.example.com/v1".into()),
Some("deepseek-ai/deepseek-v4-pro".into()), Some("deepseek-ai/deepseek-v4-pro".into()),
) )
.expect("should construct"); .expect("should construct");