fix: reject custom provider alias conflicts

maintainer edit: reject arbitrary custom provider keys that normalize to built-in provider names so runtime and WebUI settings cannot disagree about whether a provider is dynamic or built in.
This commit is contained in:
chengyongru
2026-06-13 00:04:13 +08:00
committed by Xubin Ren
parent b2d00a4ce0
commit af9f9ebfd7
3 changed files with 20 additions and 1 deletions
+7
View File
@@ -245,7 +245,14 @@ class ProvidersConfig(Base):
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