{"record":{"id":"0da504c0ba43104e","repo":"Lightning-AI/pytorch-lightning","slug":"found-invalid-type-for-plugin-plugin-expected-o-0da504","errorCode":null,"errorMessage":"Found invalid type for plugin {plugin}. Expected one of: Precision, CheckpointIO, ClusterEnvironment, or LayerSync.","messagePattern":"Found invalid type for plugin (.+?)\\. Expected one of: Precision, CheckpointIO, ClusterEnvironment, or LayerSync\\.","errorType":"validation","errorClass":"MisconfigurationException","httpStatus":null,"severity":"error","filePath":"src/lightning/pytorch/trainer/connectors/accelerator_connector.py","lineNumber":247,"sourceCode":"                if isinstance(plugin, Precision):\n                    self._precision_plugin_flag = plugin\n                    plugins_flags_types[Precision.__name__] += 1\n                elif isinstance(plugin, CheckpointIO):\n                    self.checkpoint_io = plugin\n                    plugins_flags_types[CheckpointIO.__name__] += 1\n                elif isinstance(plugin, ClusterEnvironment):\n                    self._cluster_environment_flag = plugin\n                    plugins_flags_types[ClusterEnvironment.__name__] += 1\n                elif isinstance(plugin, LayerSync):\n                    if sync_batchnorm and not isinstance(plugin, TorchSyncBatchNorm):\n                        raise MisconfigurationException(\n                            f\"You set `Trainer(sync_batchnorm=True)` and provided a `{plugin.__class__.__name__}`\"\n                            \" plugin, but this is not allowed. Choose one or the other.\"\n                        )\n                    self._layer_sync = plugin\n                    plugins_flags_types[TorchSyncBatchNorm.__name__] += 1\n                else:\n                    raise MisconfigurationException(\n                        f\"Found invalid type for plugin {plugin}. Expected one of: Precision, \"\n                        \"CheckpointIO, ClusterEnvironment, or LayerSync.\"\n                    )\n\n            duplicated_plugin_key = [k for k, v in plugins_flags_types.items() if v > 1]\n            if duplicated_plugin_key:\n                raise MisconfigurationException(\n                    f\"Received multiple values for {', '.join(duplicated_plugin_key)} flags in `plugins`.\"\n                    \" Expected one value for each type at most.\"\n                )\n\n            if plugins_flags_types.get(Precision.__name__) and precision_flag is not None:\n                raise ValueError(\n                    f\"Received both `precision={precision_flag}` and `plugins={self._precision_plugin_flag}`.\"\n                    f\" Choose one.\"\n                )\n\n        self._precision_flag = \"32-true\" if precision_flag is None else precision_flag","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/trainer/connectors/accelerator_connector.py#L229-L265","documentation":"The Trainer's `plugins` argument only accepts instances of Precision, CheckpointIO, ClusterEnvironment, or LayerSync (e.g. TorchSyncBatchNorm). AcceleratorConnector's config validation rejects any other object type passed in the plugins list. This is a strict type whitelist enforced in _check_config_and_set_final_flags.","triggerScenarios":"Passing Trainer(plugins=[SomeObject()]) where SomeObject is not a Precision/CheckpointIO/ClusterEnvironment/LayerSync instance, e.g. a Strategy, Accelerator, callback, or arbitrary object in the plugins list.","commonSituations":"Developers migrate from older Lightning versions where more plugin types were accepted, or confuse `plugins` with `strategy`, `accelerators`, or `callbacks` Trainer arguments.","solutions":["Remove the invalid object from the `plugins` list and pass it via its dedicated Trainer argument (strategy=, accelerator=, callbacks=)","If it is a custom precision/io/cluster/sync plugin, subclass the corresponding base class (Precision, CheckpointIO, ClusterEnvironment, LayerSync)","Check for leftover deprecated plugin names from Lightning 1.x after upgrading"],"exampleFix":"# before\ntrainer = Trainer(plugins=[DDPStrategy()])\n# after\ntrainer = Trainer(strategy=DDPStrategy())","handlingStrategy":"validation","validationCode":"from lightning.pytorch.plugins import Precision, CheckpointIO, ClusterEnvironment, LayerSync\n_ALLOWED = (Precision, CheckpointIO, ClusterEnvironment, LayerSync)\nplugins = [p for p in plugins if isinstance(p, _ALLOWED)]\ntrainer = Trainer(plugins=plugins)","typeGuard":"from lightning.pytorch.plugins import Precision, CheckpointIO, ClusterEnvironment, LayerSync\ndef is_valid_plugin(p: object) -> bool:\n    return isinstance(p, (Precision, CheckpointIO, ClusterEnvironment, LayerSync))","tryCatchPattern":"from lightning.pytorch.utilities.exceptions import MisconfigurationException\ntry:\n    trainer = Trainer(plugins=plugins)\nexcept MisconfigurationException as e:\n    if \"invalid type for plugin\" in str(e):\n        plugins = [p for p in plugins if is_valid_plugin(p)]\n        trainer = Trainer(plugins=plugins)\n    else:\n        raise","preventionTips":["Keep a single helper that builds the plugins list and validates types","Pass strategies via strategy=, accelerators via accelerator=, never via plugins"],"tags":["pytorch-lightning","trainer","plugins","config-validation"],"backgroundTag":"invalid-argument-type","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}