HKUDS/nanobot · error · ValueError
providers. conflicts with built-in provider ; use the…
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
In ProvidersConfig.convert_extra_providers, an extra (custom) provider key collides with a built-in provider registered in the registry (find_by_name matched). Extra fields become custom providers, so a name equal to a built-in one (e.g. "anthropic") is ambiguous and rejected; the input at fault is the conflicting providers.<key> entry.
Solutions
- Configure the built-in provider under its own key instead of as an extra field
- Rename the custom provider to a unique name
- Remove the duplicate entry if it was accidentally added
Defensive patterns
Strategy: validation
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.
Appendix: 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)