HKUDS/nanobot · error · ValueError
providers.{key} conflicts with built-in provider {spec.name!
Error message
providers.{key} conflicts with built-in provider {spec.name!r}; use the built-in provider key or choose a different custom provider name What it means
Error "providers.{key} conflicts with built-in provider {spec.name!r}; use the built-in provider key or choose a different custom provider name" thrown in HKUDS/nanobot.
Source
Thrown at nanobot/config/schema.py:312
byteplus_coding_plan: ProviderConfig = Field(default_factory=ProviderConfig) # BytePlus Coding Plan
openai_codex: ProviderConfig = Field(default_factory=ProviderConfig, exclude=True) # OpenAI Codex (OAuth)
xai_grok: ProviderConfig = Field(default_factory=ProviderConfig, exclude=True) # xAI Grok (OAuth)
github_copilot: ProviderConfig = Field(default_factory=ProviderConfig, exclude=True) # Github Copilot (OAuth)
qianfan: ProviderConfig = Field(default_factory=ProviderConfig) # Qianfan (百度千帆)
nvidia: ProviderConfig = Field(default_factory=ProviderConfig) # NVIDIA NIM (nvapi- keys)
opencode: ProviderConfig = Field(default_factory=ProviderConfig) # OpenCode Zen (canonical provider id)
opencode_zen: ProviderConfig = Field(default_factory=ProviderConfig) # OpenCode Zen (curated coding models)
opencode_go: ProviderConfig = Field(default_factory=ProviderConfig) # OpenCode Go (low-cost coding models)
@model_validator(mode="after")
def convert_extra_providers(self):
"""Convert extra fields (custom providers) to ProviderConfig objects."""
if self.model_extra:
from nanobot.providers.registry import find_by_name
for key, value in self.model_extra.items():
if spec := find_by_name(key):
raise ValueError(
f"providers.{key} conflicts with built-in provider {spec.name!r}; "
"use the built-in provider key or choose a different custom provider name"
)
if isinstance(value, dict):
self.model_extra[key] = ProviderConfig.model_validate(value)
return self
@model_validator(mode="after")
def _validate_api_type_scope(self) -> "ProvidersConfig":
for name in self.__class__.model_fields:
if name == "openai":
continue
provider = getattr(self, name, None)
if isinstance(provider, ProviderConfig) and provider.api_type != "auto":
raise ValueError("providers.<name>.api_type is only supported for providers.openai")
for provider in (self.model_extra or {}).values():
if isinstance(provider, ProviderConfig) and provider.api_type != "auto":
raise ValueError("providers.<name>.api_type is only supported for providers.openai")View on GitHub (pinned to 42f37dc4c0)
When it happens
Trigger: Thrown at nanobot/config/schema.py:312 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of HKUDS/nanobot@42f37dc4c0 (2026-08-26).
Data as JSON: /api/errors/97e5a2b2faaea33d.
Report an issue: GitHub.