{"record":{"id":"97e5a2b2faaea33d","repo":"HKUDS/nanobot","slug":"providers-key-conflicts-with-built-in-provider","errorCode":null,"errorMessage":"providers.{key} conflicts with built-in provider {spec.name!r}; use the built-in provider key or choose a different custom provider name","messagePattern":"providers\\.(.+?) conflicts with built-in provider (.+?); use the built-in provider key or choose a different custom provider name","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"nanobot/config/schema.py","lineNumber":312,"sourceCode":"    byteplus_coding_plan: ProviderConfig = Field(default_factory=ProviderConfig)  # BytePlus Coding Plan\n    openai_codex: ProviderConfig = Field(default_factory=ProviderConfig, exclude=True)  # OpenAI Codex (OAuth)\n    xai_grok: ProviderConfig = Field(default_factory=ProviderConfig, exclude=True)  # xAI Grok (OAuth)\n    github_copilot: ProviderConfig = Field(default_factory=ProviderConfig, exclude=True)  # Github Copilot (OAuth)\n    qianfan: ProviderConfig = Field(default_factory=ProviderConfig)  # Qianfan (百度千帆)\n    nvidia: ProviderConfig = Field(default_factory=ProviderConfig)  # NVIDIA NIM (nvapi- keys)\n    opencode: ProviderConfig = Field(default_factory=ProviderConfig)  # OpenCode Zen (canonical provider id)\n    opencode_zen: ProviderConfig = Field(default_factory=ProviderConfig)  # OpenCode Zen (curated coding models)\n    opencode_go: ProviderConfig = Field(default_factory=ProviderConfig)  # OpenCode Go (low-cost coding models)\n\n    @model_validator(mode=\"after\")\n    def convert_extra_providers(self):\n        \"\"\"Convert extra fields (custom providers) to ProviderConfig objects.\"\"\"\n        if self.model_extra:\n            from nanobot.providers.registry import find_by_name\n\n            for key, value in self.model_extra.items():\n                if spec := find_by_name(key):\n                    raise ValueError(\n                        f\"providers.{key} conflicts with built-in provider {spec.name!r}; \"\n                        \"use the built-in provider key or choose a different custom provider name\"\n                    )\n                if isinstance(value, dict):\n                    self.model_extra[key] = ProviderConfig.model_validate(value)\n        return self\n\n    @model_validator(mode=\"after\")\n    def _validate_api_type_scope(self) -> \"ProvidersConfig\":\n        for name in self.__class__.model_fields:\n            if name == \"openai\":\n                continue\n            provider = getattr(self, name, None)\n            if isinstance(provider, ProviderConfig) and provider.api_type != \"auto\":\n                raise ValueError(\"providers.<name>.api_type is only supported for providers.openai\")\n        for provider in (self.model_extra or {}).values():\n            if isinstance(provider, ProviderConfig) and provider.api_type != \"auto\":\n                raise ValueError(\"providers.<name>.api_type is only supported for providers.openai\")","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/HKUDS/nanobot/blob/42f37dc4c0e409eac7818a82d165c5f2757bc075/nanobot/config/schema.py#L294-L330","documentation":"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.","triggerScenarios":"Thrown at nanobot/config/schema.py:312 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"42f37dc4c0e409eac7818a82d165c5f2757bc075","analyzedAt":"2026-08-26T00:18:52.276Z","schemaVersion":2},"datasetVersion":"2026-08-26T04:18:47.238Z"}