diff --git a/nanobot/config/schema.py b/nanobot/config/schema.py index aa5ab993..fb891515 100644 --- a/nanobot/config/schema.py +++ b/nanobot/config/schema.py @@ -304,17 +304,15 @@ class Config(BaseSettings): return p.api_key if p else None def get_api_base(self, model: str | None = None) -> str | None: - """Get API base URL for the given model. Applies default URLs for gateway/local providers.""" + """Get API base URL for the given model, falling back to the provider default when present.""" from nanobot.providers.registry import find_by_name p, name = self._match_provider(model) if p and p.api_base: return p.api_base - # Only gateways get a default api_base here. Standard providers - # resolve their base URL from the registry in the provider constructor. if name: spec = find_by_name(name) - if spec and (spec.is_gateway or spec.is_local) and spec.default_api_base: + if spec and spec.default_api_base: return spec.default_api_base return None diff --git a/tests/cli/test_commands.py b/tests/cli/test_commands.py index 3a1e7145..fd5429d8 100644 --- a/tests/cli/test_commands.py +++ b/tests/cli/test_commands.py @@ -264,6 +264,39 @@ def test_find_by_name_accepts_camel_case_and_hyphen_aliases(): assert find_by_name("github-copilot").name == "github_copilot" +def test_config_explicit_xiaomi_mimo_provider_uses_default_api_base(): + config = Config.model_validate( + { + "agents": { + "defaults": { + "provider": "xiaomi_mimo", + "model": "MiniMax-M1-80k", + } + }, + "providers": { + "xiaomiMimo": { + "apiKey": "test-key", + } + }, + } + ) + + assert config.get_provider_name() == "xiaomi_mimo" + assert config.get_api_base() == "https://api.xiaomimimo.com/v1" + + +def test_config_auto_detects_xiaomi_mimo_from_model_keyword(): + config = Config.model_validate( + { + "agents": {"defaults": {"provider": "auto", "model": "mimo/MiniMax-M1-80k"}}, + "providers": {"xiaomiMimo": {"apiKey": "test-key"}}, + } + ) + + assert config.get_provider_name() == "xiaomi_mimo" + assert config.get_api_base() == "https://api.xiaomimimo.com/v1" + + def test_config_auto_detects_ollama_from_local_api_base(): config = Config.model_validate( {