Stability-AI/generative-models · error · KeyError
need either 'input_key' or 'input_keys' for embedder {embedd
Error message
need either 'input_key' or 'input_keys' for embedder {embedder.__class__.__name__} What it means
When the Embedder (Inpainter) wrapper builds its list of embedders, each embedder config must declare which input(s) of the batch to embed, via 'input_key' (single) or 'input_keys' (list). If neither key is present in an embedder's config entry, a KeyError is raised naming the embedder class.
Source
Thrown at sgm/modules/encoders/modules.py:100
), f"embedder model {embedder.__class__.__name__} has to inherit from AbstractEmbModel"
embedder.is_trainable = embconfig.get("is_trainable", False)
embedder.ucg_rate = embconfig.get("ucg_rate", 0.0)
if not embedder.is_trainable:
embedder.train = disabled_train
for param in embedder.parameters():
param.requires_grad = False
embedder.eval()
print(
f"Initialized embedder #{n}: {embedder.__class__.__name__} "
f"with {count_params(embedder, False)} params. Trainable: {embedder.is_trainable}"
)
if "input_key" in embconfig:
embedder.input_key = embconfig["input_key"]
elif "input_keys" in embconfig:
embedder.input_keys = embconfig["input_keys"]
else:
raise KeyError(
f"need either 'input_key' or 'input_keys' for embedder {embedder.__class__.__name__}"
)
embedder.legacy_ucg_val = embconfig.get("legacy_ucg_value", None)
if embedder.legacy_ucg_val is not None:
embedder.ucg_prng = np.random.RandomState()
embedders.append(embedder)
self.embedders = nn.ModuleList(embedders)
def possibly_get_ucg_val(self, embedder: AbstractEmbModel, batch: Dict) -> Dict:
assert embedder.legacy_ucg_val is not None
p = embedder.ucg_rate
val = embedder.legacy_ucg_val
for i in range(len(batch[embedder.input_key])):
if embedder.ucg_prng.choice(2, p=[1 - p, p]):
batch[embedder.input_key][i] = val
return batchView on GitHub (pinned to e8cd657656)
Solutions
- Add input_key (e.g. 'txt') or input_keys (e.g. ['txt','mask']) to the embedder's config entry
- Compare with a working config in sgm/modules/encoders/modules.py to see the expected shape
- Check the embedder class you target to confirm which key names it consumes downstream
Example fix
// before
embedder:
target: sgm.modules.encoders.modules.FrozenCLIPEmbedder
// after
embedder:
target: sgm.modules.encoders.modules.FrozenCLIPEmbedder
params:
layer: hidden
embedder:
input_key: txt
target: sgm.modules.encoders.modules.FrozenCLIPEmbedder Defensive patterns
Strategy: validation
Validate before calling
def validate_embedder_config(embconfig):
assert 'target' in embconfig, 'embedder missing target'
assert 'input_key' in embconfig or 'input_keys' in embconfig, \
f"embedder {embconfig.get('target')} needs input_key or input_keys"
for e in config['embedder']:
validate_embedder_config(e) Type guard
def has_input_config(embconfig: dict) -> bool:
return 'input_key' in embconfig or 'input_keys' in embconfig Try / catch
try:
model = instantiate_from_config(config)
except KeyError as e:
if 'input_key' in str(e):
for i, ec in enumerate(config['embedder']):
if 'input_key' not in ec and 'input_keys' not in ec:
logging.error('embedder %d (%s) missing input_key/input_keys', i, ec.get('target'))
raise Prevention
- Keep a reference model YAML and copy the input_key pattern from it
- Lint configs for required keys per embedder class before training runs
- When adding an embedder, always declare which batch key it consumes
When it happens
Trigger: Building a model whose 'embedder' config list contains a dict entry missing both 'input_key' and 'input_keys', e.g. {'embedder': {'target': '...FrozenCLIPEmbedder'}, 'ucg_rate': 0.1}.
Common situations: Hand-editing model YAML configs and dropping the input_key line; copying an embedder config from a repo where the key was named differently; adding a new embedder without wiring its input key.
Related errors
- Expected key `target` to instantiate.
- unknown merge strategy {self.merge_strategy}
- Unknown loss type {self.loss_type}
- provide num_res_blocks either as an int (globally constant)
- NotImplementedError
AI-assisted analysis of Stability-AI/generative-models@e8cd657656 (2026-08-29).
Data as JSON: /api/errors/9eb24e9166e80f8c.
Report an issue: GitHub.