huggingface/transformers · error · ValueError
key {k} isn't in the original config dict
Error message
key {k} isn't in the original config dict What it means
ValueError from PreTrainedConfig.update_from_string: the CLI-style update string contains a key that does not already exist as an attribute on the config object. update_from_str only mutates existing attributes; it never creates new ones.
Source
Thrown at src/transformers/configuration_utils.py:1187
def update_from_string(self, update_str: str):
"""
Updates attributes of this class with attributes from `update_str`.
The expected format is ints, floats and strings as is, and for booleans use `true` or `false`. For example:
"n_embd=10,resid_pdrop=0.2,scale_attn_weights=false,summary_type=cls_index"
The keys to change have to already exist in the config object.
Args:
update_str (`str`): String with attributes that should be updated for this class.
"""
d = dict(x.split("=") for x in update_str.split(","))
for k, v in d.items():
if not hasattr(self, k):
raise ValueError(f"key {k} isn't in the original config dict")
old_v = getattr(self, k)
if isinstance(old_v, bool):
if v.lower() in ["true", "1", "y", "yes"]:
v = True
elif v.lower() in ["false", "0", "n", "no"]:
v = False
else:
raise ValueError(f"can't derive true or false from {v} (key {k})")
elif isinstance(old_v, int):
v = int(v)
elif isinstance(old_v, float):
v = float(v)
elif not isinstance(old_v, str):
raise TypeError(
f"You can only update int, float, bool or string values in the config, got {v} for key {k}"
)
View on GitHub (pinned to a597f97485)
Solutions
- Check hasattr(config, key) for the failing key and fix the typo or use the correct attribute name.
- For nested configs, target the sub-config: config.text_config.update_from_string(...).
- If you truly need a new attribute, set it directly (config.my_key = value) instead of via update_from_string.
Example fix
// before
config.update_from_string("n_embdd=10") # ValueError
// after
config.update_from_string("n_embd=10") Defensive patterns
Strategy: validation
Validate before calling
updates = {"n_embd": "10", "scale_attn_weights": "false"}
missing = [k for k in updates if not hasattr(config, k)]
if missing:
raise KeyError(f"Unknown config keys: {missing}")
config.update_from_string(",".join(f"{k}={v}" for k, v in updates.items())) Type guard
def can_update(config, key: str) -> bool:
return hasattr(config, key) Try / catch
try:
config.update_from_string(s)
except ValueError as e:
if "isn't in the original config dict" in str(e):
raise KeyError(f"bad update string {s!r}: {e}") Prevention
- Build update strings from validated key/value tables, not free-form user input.
- Prefer direct attribute assignment in Python code; reserve update_from_string for CLI ergonomics.
When it happens
Trigger: config.update_from_string("n_embdd=10") (typo), or updating a key that belongs to a different model family's config (e.g. num_attention_heads on a config class that does not define it, or a parameter only present on the nested text_config).
Common situations: Scripts that build the update string dynamically from a dict of hyperparameters; copy-pasting example strings from a different model's docs; trying to set sub-config attributes at the top level of a composite (vision-language) config.
Related errors
- out_indices must be a list, got {type(self._out_indices)}
- out_indices must be valid indices for stage_names {self.stag
- out_indices must not contain any duplicates, got {self._out_
- out_indices must be in the same order as stage_names, expect
- out_features and out_indices should have the same length if
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/fe613b8f27c8b616.
Report an issue: GitHub.