{"record":{"id":"2816beace59cb9c3","repo":"deepset-ai/haystack","slug":"value-payload-is-not-a-valid-member-of-enum","errorCode":null,"errorMessage":"Value '{payload}' is not a valid member of Enum '{value_type}'","messagePattern":"Value '(.+?)' is not a valid member of Enum '(.+?)'","errorType":"exception","errorClass":"DeserializationError","httpStatus":null,"severity":"error","filePath":"haystack/utils/base_serialization.py","lineNumber":328,"sourceCode":"    # try from_dict (e.g. Haystack dataclasses and Components)\n    if hasattr(cls, \"from_dict\") and callable(cls.from_dict):\n        return cls.from_dict(payload)\n\n    # handle pydantic models\n    if issubclass(cls, pydantic.BaseModel):\n        try:\n            return cls.model_validate(payload)\n        except Exception as e:\n            raise DeserializationError(\n                f\"Failed to deserialize data '{payload}' into Pydantic model '{value_type}'\"\n            ) from e\n\n    # handle enum types\n    if issubclass(cls, Enum):\n        try:\n            return cls[payload]\n        except Exception as e:\n            raise DeserializationError(f\"Value '{payload}' is not a valid member of Enum '{value_type}'\") from e\n\n    # fallback: set attributes on a blank instance\n    deserialized_payload = {k: _deserialize_value(v) for k, v in payload.items()}\n    instance = cls.__new__(cls)\n    for attr_name, attr_value in deserialized_payload.items():\n        setattr(instance, attr_name, attr_value)\n    return instance\n","sourceCodeStart":310,"sourceCodeEnd":336,"githubUrl":"https://github.com/deepset-ai/haystack/blob/e318778c9bf60a1963e3b5f451359655dd696c30/haystack/utils/base_serialization.py#L310-L336","documentation":"Haystack raised DeserializationError because a payload string was looked up as an Enum member name via cls[payload] and no member with that name exists. The enum value stored in the serialized data does not correspond to any member of the enum class being restored.","triggerScenarios":"Restoring a pipeline/component whose serialized init parameter is an Enum, where the payload string (e.g. \"OLD_MEMBER\") is not a member name of the current enum class.","commonSituations":"Enum member renamed or removed in a newer library version; hand-edited YAML/JSON with a typo in the member name; payload stores the enum's value instead of its name.","solutions":["Check the enum class for the exact member name and correct the serialized value","If the enum was renamed, migrate old serialized pipelines to the new member name","Store the member name (cls[key].name), not the value, when serializing custom enums","Regenerate the pipeline serialization with the installed library version"],"exampleFix":"// before\n{\"retriever_type\": \"DENSE\"}   # no such member\n// after\n{\"retriever_type\": \"dense\"}   # matches Enum member name","handlingStrategy":"validation","validationCode":"import enum\n\ndef validate_enum_member(enum_cls, name: str) -> bool:\n    return isinstance(name, str) and name in enum_cls.__members__","typeGuard":"def is_enum_member_name(enum_cls, value) -> bool:\n    return isinstance(value, str) and value in enum_cls.__members__","tryCatchPattern":"try:\n    pipeline = Pipeline.loads(yaml_str)\nexcept DeserializationError as e:\n    logger.error(\"bad enum member in serialized data: %s\", e)\n    raise","preventionTips":["Store enum member names (member.name), not values, when serializing custom enums","After renaming enum members, migrate old pipeline files","Search pipeline YAML for enum fields after each library upgrade","Round-trip test dumps/loads in CI"],"tags":["python","enum","deserialization","haystack"],"backgroundTag":"invalid-enum-member","analyzedSha":"e318778c9bf60a1963e3b5f451359655dd696c30","analyzedAt":"2026-08-30T11:45:20.711Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}