BerriAI/litellm · error · ValueError
update_fields must specify at least one field to update.
Error message
update_fields must specify at least one field to update.
What it means
Model validator on KeyUpdateFields: model_fields_set is empty, meaning the update payload contained no actual fields, which would iterate keys performing no-op writes. At least one updatable field must be present in update_fields.
Source
Thrown at litellm/types/proxy/management_endpoints/key_management_endpoints.py:89
# Expiry
duration: str | None = None
# Operational metadata
tags: list[str] | None = None
metadata: dict[str, Any] | None = None
@model_validator(mode="after")
def validate_temp_budget(self) -> "KeyUpdateFields":
if self.temp_budget_increase is not None or self.temp_budget_expiry is not None:
if self.temp_budget_increase is None or self.temp_budget_expiry is None:
raise ValueError("temp_budget_increase and temp_budget_expiry must be set together")
return self
@model_validator(mode="after")
def require_at_least_one_field(self) -> "KeyUpdateFields":
# Reject empty payload — would iterate every key with no-op writes.
if not self.model_fields_set:
raise ValueError("update_fields must specify at least one field to update.")
return self
class BulkUpdateTeamKeysRequest(BaseModel):
"""Apply one update payload to many keys inside a team; provide either `key_ids` or `all_keys_in_team=True`."""
team_id: str
key_ids: list[str] | None = None
all_keys_in_team: bool = False
update_fields: KeyUpdateFields
@model_validator(mode="after")
def validate_selection(self) -> "BulkUpdateTeamKeysRequest":
has_key_ids: Final = self.key_ids is not None and len(self.key_ids) > 0
if has_key_ids and self.all_keys_in_team:
raise ValueError("Provide either `key_ids` or `all_keys_in_team=True`, not both.")
if not has_key_ids and not self.all_keys_in_team:
raise ValueError("Must provide either `key_ids` (non-empty) or `all_keys_in_team=True`.")View on GitHub (pinned to 77b7c6c40c)
Solutions
- Include at least one field in update_fields describing what to update.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/types/proxy/management_endpoints/key_management_endpoints.py:89 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/baef12212b2086c1.
Report an issue: GitHub.