huggingface/transformers · error · ValueError
Conversion mapping for '{model_type_or_class_name}' already
Error message
Conversion mapping for '{model_type_or_class_name}' already exists. Pass overwrite=True to replace it. What it means
ValueError from conversion_mapping.register_weight_conversion: a mapping is already registered under this key (a model_type string or class name) and the call did not pass overwrite=True. The registry is global, so duplicate registrations are treated as probable bugs rather than silently replacing existing behavior.
Source
Thrown at src/transformers/conversion_mapping.py:1737
def register_checkpoint_conversion_mapping(
model_type_or_class_name: str,
mapping: list[WeightConverter | WeightRenaming],
overwrite: bool = False,
) -> None:
"""
Register a conversion mapping for a model type string or a class name.
Class names take priority over `model_type` strings during lookup (see
`extract_weight_conversions_for_model`), making it possible to define
task-head-specific or class-specific conversions that differ from the shared
`model_type` baseline.
"""
global _checkpoint_conversion_mapping_cache
if _checkpoint_conversion_mapping_cache is None:
_checkpoint_conversion_mapping_cache = _build_checkpoint_conversion_mapping()
if model_type_or_class_name in _checkpoint_conversion_mapping_cache and not overwrite:
raise ValueError(
f"Conversion mapping for '{model_type_or_class_name}' already exists. Pass overwrite=True to replace it."
)
_checkpoint_conversion_mapping_cache[model_type_or_class_name] = mapping
# Keep track of what was added manually by the user
USER_REGISTERED_MAPPINGS.add(model_type_or_class_name)
def extract_weight_conversions_for_model(
model: PreTrainedModel,
) -> list[WeightTransform] | None:
"""
Return the registered conversion list for `model`, or `None` if none exists.
Looks up by class name first (enables task-head-specific overrides), then
falls back to `model.config.model_type`. Transforms are returned
unmodified; the caller sets `scope_prefix` on each transform for sub-module isolation.
"""
class_name = type(model).__name__View on GitHub (pinned to a597f97485)
Solutions
- Pass overwrite=True if you intentionally want to replace the existing mapping.
- Register under a class name instead of the shared model_type key when you want a task-head-specific mapping without clobbering the baseline.
- In notebooks, avoid re-running the registration cell or guard it with a membership check.
Example fix
// before
register_weight_conversion("llama", my_mapping) # ValueError
// after
register_weight_conversion("llama", my_mapping, overwrite=True) Defensive patterns
Strategy: try-catch
Validate before calling
from transformers.conversion_mapping import _checkpoint_conversion_mapping_cache # or public accessor
if key in registry:
register_weight_conversion(key, mapping, overwrite=True)
else:
register_weight_conversion(key, mapping) Try / catch
try:
register_weight_conversion(name, mapping)
except ValueError as e:
if "already exists" in str(e):
register_weight_conversion(name, mapping, overwrite=True) Prevention
- Register conversions idempotently: pass overwrite=True on re-registration or guard with a membership check.
- Prefer class-name keys for specialized mappings to avoid colliding with built-in model_type keys.
When it happens
Trigger: Calling register_weight_conversion("llama", [...]) when the built-in llama mapping is already cached; re-running a notebook cell that registers a custom mapping for the same class name twice.
Common situations: Interactive/notebook re-execution; libraries that register conversions at import time being imported twice under different names; trying to override a built-in model_type mapping without realizing overwrite is required.
Related errors
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/0a4fa259836fa5c6.
Report an issue: GitHub.