huggingface/transformers · error · ValueError
Received multiple types, therefore expected the first type…
Error message
Received multiple types, therefore expected the first type to indicate an array.
What it means
GGUF metadata values can carry multiple types (when a field was read with multiple readers); in that case _gguf_parse_value requires the first type code to be 9 (GGUF's ARRAY type), treating the second as the element type. If the type list has length > 1 but does not start with 9, the structure is not an array-with-element-type and the parser cannot disambiguate, so it raises ValueError.
Solutions
- Re-export or re-download the GGUF with an official/known-good converter (llama.cpp conversion tooling)
- Inspect the file's metadata (e.g. `gguf-dump` from gguf-py) and fix or strip the offending field
- If the file is fine, upgrade transformers — newer GGUF type handling may accept it
Defensive patterns
Strategy: try-catch
Try / catch
try:
model = AutoModelForCausalLM.from_pretrained("model.gguf")
except ValueError as e:
if "expected the first type to indicate an array" in str(e):
raise RuntimeError("Malformed GGUF metadata — re-convert with llama.cpp tooling") from e
raise Prevention
- Produce GGUF files only with well-tested converters (llama.cpp convert scripts)
- Validate third-party GGUFs with gguf-dump before loading into transformers
When it happens
Trigger: Loading a .gguf file where a metadata field resolves to a multi-type entry whose first type code is not 9 — typically a malformed/nonstandard GGUF produced by third-party tools, or a partially corrupted header.
Common situations: Converting weights with community GGUF converters that emit nonstandard metadata fields; hand-edited GGUF files; version skew between the GGUF writer and transformers' reader (new type codes).
Related errors
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/6c9bfcb29c8a5301.
Report an issue: GitHub.
Appendix: source
Thrown at src/transformers/integrations/ggml.py:390
},
"minimax_m2": {
# MiniMax-M2 uses routing bias (e_score_correction_bias) for MoE expert selection,
# but this is not stored in GGUF metadata. Set it as default so the model weights
# (which include e_score_correction_bias tensors) are loaded correctly.
"use_routing_bias": True,
},
}
def _gguf_parse_value(_value, data_type):
if not isinstance(data_type, list):
data_type = [data_type]
if len(data_type) == 1:
data_type = data_type[0]
array_data_type = None
else:
if data_type[0] != 9:
raise ValueError("Received multiple types, therefore expected the first type to indicate an array.")
data_type, array_data_type = data_type
if data_type in [0, 1, 2, 3, 4, 5, 10, 11]:
_value = int(_value[0])
elif data_type in [6, 12]:
_value = float(_value[0])
elif data_type == 7:
_value = bool(_value[0])
elif data_type == 8:
_value = array("B", list(_value)).tobytes().decode()
elif data_type == 9:
_value = _gguf_parse_value(_value, array_data_type)
return _value
class GGUFTokenizerSkeleton:
def __init__(self, dict_):
for k, v in dict_.items():View on GitHub (pinned to a597f97485)