vllm-project/vllm · error · Error
cannot continue the final message when the last message is…
Error message
cannot continue the final message when the last message is not from the assistant
What it means
The pynccl EPLB path requires a healthy PyNCCL communicator on the device group (pynccl_comm exists, is not disabled, and reports available). One of those conditions failed, so the requested backend cannot be used.
Solutions
- Verify device group init succeeded and pynccl was not disabled (check startup logs for pynccl initialization lines)
- Use backend='torch_nccl', which uses torch.distributed NCCL instead of PyNCCL
- Reinstall a vLLM build that includes the pynccl extension if logs show it failed to load
Example fix
# before backend = "pynccl" # pynccl disabled in this process # after backend = "torch_nccl"
Defensive patterns
Strategy: validation
Validate before calling
comm = group_coordinator.device_communicator pynccl = getattr(comm, 'pynccl_comm', None) if comm else None usable = pynccl is not None and not pynccl.disabled and pynccl.available backend = 'pynccl' if usable else 'torch_nccl'
Prevention
- Check pynccl availability in startup logs before configuring it
- Keep torch_nccl as the fallback backend choice in deployment configs
When it happens
Trigger: Creating the pynccl EPLB communicator when vLLM was started with VLLM_USE_V1/or config paths that disable pynccl, when the pynccl build was unavailable at group init, or on platforms where the pynccl extension did not load.
Common situations: Custom builds without the pynccl extension; a distributed init path that never created device_communicator.pynccl_comm; the pynccl comm was disabled via config because another backend owns NCCL.
Related errors
- Image generation should not fail
- chat request must contain at least one message
- chat template is required but none was configured
- communicator is incompatible with async EPLB due to NCCL…
- Async EPLB is only supported with the default policy.
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/0998a3b6641af9e5.
Report an issue: GitHub.
Appendix: source
Thrown at rust/src/chat/src/error.rs:14
// 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}`")]
ParserUnavailableForModel {
kind: &'static str,View on GitHub (pinned to c794754062)