diff --git a/verifiers/utils/message_utils.py b/verifiers/utils/message_utils.py index 492ce0584..ba74f3891 100644 --- a/verifiers/utils/message_utils.py +++ b/verifiers/utils/message_utils.py @@ -37,10 +37,16 @@ def _normalize_raw_message_content(message: dict[str, Any]) -> dict[str, Any]: if isinstance(content, list): normalized_parts = [] for part in content: - if isinstance(part, dict): - normalized_parts.append(from_raw_content_part(part)) - else: - normalized_parts.append(part) + if isinstance(part, str): + # HuggingFace datasets may serialize content-part dicts to JSON + # strings when storing heterogeneous lists in Arrow tables. + try: + part = json.loads(part) + except (json.JSONDecodeError, TypeError): + pass + if isinstance(part, dict) and "type" in part: + part = from_raw_content_part(part) + normalized_parts.append(part) message = dict(message) message["content"] = normalized_parts return message