{"record":{"id":"da4c4b5a23280e82","repo":"run-llama/llama_index","slug":"component-component-is-not-a-supported-transform","errorCode":null,"errorMessage":"Component {component} is not a supported transformation component.","messagePattern":"Component (.+?) is not a supported transformation component\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"llama-index-core/llama_index/core/ingestion/transformations.py","lineNumber":100,"sourceCode":"    name: str = Field(\n        description=\"Unique and human-readable name for the type of transformation\"\n    )\n    transformation_category: TransformationCategories = Field(\n        description=\"Type of transformation\"\n    )\n    component_type: Type[BaseComponent] = Field(\n        description=\"Type of component that implements the transformation\"\n    )\n\n\nclass ConfigurableComponent(Enum):\n    @classmethod\n    def from_component(cls, component: BaseComponent) -> \"ConfigurableComponent\":\n        component_class = type(component)\n        for component_type in cls:\n            if component_type.value.component_type == component_class:\n                return component_type\n        raise ValueError(\n            f\"Component {component} is not a supported transformation component.\"\n        )\n\n    def build_configured_transformation(\n        self, component: BaseComponent\n    ) -> \"ConfiguredTransformation\":\n        component_type = self.value.component_type\n        if not isinstance(component, component_type):\n            raise ValueError(\n                f\"The enum value {self} is not compatible with component of \"\n                f\"type {type(component)}\"\n            )\n        return ConfiguredTransformation[component_type](  # type: ignore\n            component=component, name=self.value.name\n        )\n\n\ndef build_configurable_transformation_enum() -> ConfigurableComponent:","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/run-llama/llama_index/blob/afd0fef371831f9bda13e5af7167cf4e981278ab/llama-index-core/llama_index/core/ingestion/transformations.py#L82-L118","documentation":"Thrown by ConfigurableComponent.from_component() in transformations.py when the transformation component you pass is not registered in the configurable-transformation enum. That enum is built dynamically (build_configurable_transformation_enum()) and only contains transformations whose dependencies import successfully, e.g. NER transformations behind the llama-index-embeddings/llms extras.","triggerScenarios":"Calling ConfigurableComponent.from_component(component) with a custom transformation, a subclass of a registered transformation (exact type() match fails), or a transformation whose optional dependency is not installed.","commonSituations":"Adding custom transformations (e.g. a proprietary PII redactor) to a workflow pipeline and trying to register them via the enum; environments where optional NLP dependencies are missing.","solutions":["Install the optional dependency the transformation needs so it appears in the enum.","Pass the exact registered class; for custom transformations build ConfiguredTransformation directly instead of going through the enum.","Extend the enum builder with a ComponentConfig for your custom transformation."],"exampleFix":"# before\nmember = ConfigurableComponent.from_component(my_redact_transform)  # raises\n\n# after: construct directly\nfrom llama_index.core.ingestion.transformations import ConfiguredTransformation\ncfg = ConfiguredTransformation[MyRedactTransform](\n    component=my_redact_transform, name='my_redact'\n)","handlingStrategy":"type-guard","validationCode":"from llama_index.core.ingestion.transformations import ConfigurableComponent\n\ndef is_supported_transformation(component) -> bool:\n    return any(m.value.component_type == type(component) for m in ConfigurableComponent)","typeGuard":"def is_supported_transformation(component: BaseComponent) -> bool:\n    return any(m.value.component_type == type(component) for m in ConfigurableComponent)","tryCatchPattern":"try:\n    member = ConfigurableComponent.from_component(t)\nexcept ValueError:\n    from llama_index.core.ingestion.transformations import ConfiguredTransformation\n    cfg = ConfiguredTransformation[type(t)](component=t, name=type(t).__name__)","preventionTips":["Install optional transformation dependencies up front","Build ConfiguredTransformation directly for custom transformations","Avoid subclassing registered transformations for enum lookup"],"tags":["ingestion","transformations","workflow","configuration"],"backgroundTag":null,"analyzedSha":"afd0fef371831f9bda13e5af7167cf4e981278ab","analyzedAt":"2026-08-15T05:42:58.429Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}