vllm-project/vllm · error · Error
chat request must contain at least one message
Error message
chat request must contain at least one message
What it means
PyNCCL EPLB transfers require every expert-weight dtype to be mappable to an ncclDataType. At least one dtype in the first MoE layer (listed in the message) is not supported by NCCL collectives, e.g. int8 metadata tensors or exotic quantized dtypes.
Source
Thrown at rust/src/chat/src/error.rs:12
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright contributors to the vLLM project
use thiserror::Error;
use thiserror_ext::{AsReport as _, Macro};
type BoxedError = Box<dyn std::error::Error + Send + Sync>;
#[derive(Debug, Error, Macro)]
#[thiserror_ext(macro(path = "crate::error"))]
pub enum Error {
#[error("chat request must contain at least one message")]
EmptyMessages,
#[error("cannot continue the final message when the last message is not from the assistant")]
ContinueFinalAssistantWithoutFinalAssistant,
#[error("chat template is required but none was configured")]
MissingChatTemplate,
#[error("chat template error: {0}")]
ChatTemplate(String),
#[error("multimodal input is not supported by this chat renderer")]
UnsupportedMultimodalRenderer,
#[error("unsupported multimodal content: {0}")]
UnsupportedMultimodalContent(&'static str),
#[error("`{modality}` input is not supported by this model")]
UnsupportedModality { modality: String },
#[error("At most {limit} {modality}(s) may be provided in one prompt.")]
MmLimitExceeded { modality: String, limit: usize },
#[error("multimodal preprocessing error: {0}")]
Multimodal(#[message] String),
#[error("{kind} parsing is not available for model `{model_id}`")]View on GitHub (pinned to c794754062)
Solutions
- Check the dtype list in the error message and separate non-transferable metadata tensors out of expert_weights
- Use BF16/FP16/FP8 expert weights, which NCCL supports, when using the pynccl backend
- Switch to the 'nixl' backend, which transfers raw bytes and is dtype-agnostic
Defensive patterns
Strategy: validation
Validate before calling
from vllm.distributed.device_communicators.pynccl_wrapper import ncclDataTypeEnum
bad = [str(t.dtype) for layer in expert_weights[:1] for t in layer if not ncclDataTypeEnum.supports_torch_dtype(t.dtype)]
assert not bad, f'pynccl cannot transfer dtypes: {bad}' Prevention
- Keep expert weight tensors to NCCL-representable dtypes (bf16/fp16/fp8/fp32) for pynccl
- Exclude metadata/scale tensors from the weight lists passed to the communicator
- Prefer the nixl backend for exotic quantized layouts (byte-level transfers)
When it happens
Trigger: Constructing the pynccl EPLB communicator over expert weights that include tensors with dtypes NCCL cannot express (some 8-bit/4-bit quantized types, or non-standard packed types).
Common situations: Heavily quantized MoE checkpoints where scale/zero-point tensors ride alongside weights in the same list; new quant formats not yet wired into ncclDataTypeEnum.supports_torch_dtype.
Related errors
- Image generation should not fail
- cannot continue the final message when the last message is n
- chat template is required but none was configured
- Configuration error: {0}
- Endpoint not ready after {0}s: {1}
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/a7dba00c830948a7.
Report an issue: GitHub.