BerriAI/litellm · error · HTTPException
Setting(s) {blocked_enterprise_keys} are a LiteLLM Enterpris
Error message
Setting(s) {blocked_enterprise_keys} are a LiteLLM Enterprise feature and are not available on this build. What it means
Licensing guard in update_ui_settings: the request includes UI settings that are only registered by litellm-enterprise, which is absent from this build. The keys are named so the caller knows exactly which fields are enterprise-gated; they cannot be set on the open-source build regardless of values.
Source
Thrown at litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py:1474
),
)
# Validate against the same effective class GET advertises, so
# enterprise-registered fields are typed consistently on both sides.
effective_cls: Final = _get_effective_ui_settings_class()
try:
settings: Final = effective_cls.model_validate(settings_body)
except ValidationError as e:
raise HTTPException(status_code=422, detail=e.errors())
# Only include fields the caller actually sent (not Pydantic defaults).
settings_dict: Final[Mapping[str, JsonValue]] = settings.model_dump(exclude_unset=True)
# Reject enterprise-only settings up front so the caller gets a clear
# signal instead of a silent drop.
blocked_enterprise_keys = sorted((settings_dict.keys() & _ENTERPRISE_ONLY_UI_SETTINGS) - ALLOWED_UI_SETTINGS_FIELDS)
if blocked_enterprise_keys:
raise HTTPException(
status_code=403,
detail={
"error": (
f"Setting(s) {blocked_enterprise_keys} are a LiteLLM "
"Enterprise feature and are not available on this build."
)
},
)
# Enforce allowlist and drop anything unexpected
incoming: Final = {k: v for k, v in settings_dict.items() if k in ALLOWED_UI_SETTINGS_FIELDS}
# Merge with existing persisted settings so a partial PATCH doesn't
# overwrite fields the caller didn't send.
existing: dict[str, JsonValue] = {}
db_existing: Final = await _ui_settings_db(UISettingsRepository(prisma_client)).find_unique(
where={"id": "ui_settings"}
)View on GitHub (pinned to 77b7c6c40c)
Solutions
- Remove the enterprise-only keys from the payload, or run a LiteLLM Enterprise build with LITELLM_LICENSE set.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py:1474 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/41d3dcf26b5ff138.
Report an issue: GitHub.