{"record":{"id":"15ec61d91686dc87","repo":"vllm-project/vllm","slug":"multimodal-input-is-not-supported-by-this-chat-ren","errorCode":null,"errorMessage":"multimodal input is not supported by this chat renderer","messagePattern":"multimodal input is not supported by this chat renderer","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"rust/src/chat/src/error.rs","lineNumber":20,"sourceCode":"// SPDX-FileCopyrightText: Copyright contributors to the vLLM project\n\nuse thiserror::Error;\nuse thiserror_ext::{AsReport as _, Macro};\n\ntype BoxedError = Box<dyn std::error::Error + Send + Sync>;\n\n#[derive(Debug, Error, Macro)]\n#[thiserror_ext(macro(path = \"crate::error\"))]\npub enum Error {\n    #[error(\"chat request must contain at least one message\")]\n    EmptyMessages,\n    #[error(\"cannot continue the final message when the last message is not from the assistant\")]\n    ContinueFinalAssistantWithoutFinalAssistant,\n    #[error(\"chat template is required but none was configured\")]\n    MissingChatTemplate,\n    #[error(\"chat template error: {0}\")]\n    ChatTemplate(String),\n    #[error(\"multimodal input is not supported by this chat renderer\")]\n    UnsupportedMultimodalRenderer,\n    #[error(\"unsupported multimodal content: {0}\")]\n    UnsupportedMultimodalContent(&'static str),\n    #[error(\"`{modality}` input is not supported by this model\")]\n    UnsupportedModality { modality: String },\n    #[error(\"At most {limit} {modality}(s) may be provided in one prompt.\")]\n    MmLimitExceeded { modality: String, limit: usize },\n    #[error(\"multimodal preprocessing error: {0}\")]\n    Multimodal(#[message] String),\n    #[error(\"{kind} parsing is not available for model `{model_id}`\")]\n    ParserUnavailableForModel {\n        kind: &'static str,\n        model_id: String,\n    },\n    #[error(\"{kind} parsing is disabled by frontend configuration\")]\n    ParserDisabled { kind: &'static str },\n    #[error(\n        \"{kind} parser `{name}` is not registered{}\",","sourceCodeStart":2,"sourceCodeEnd":38,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/rust/src/chat/src/error.rs#L2-L38","documentation":"Backend 'nixl' was requested for the EPLB communicator but has_nixl() returned False: the optional nixl package is not importable in this process.","triggerScenarios":"Configuring EPLB backend='nixl' on an installation without the nixl wheel, or where importing nixl failed (missing UCX libs, ABI mismatch).","commonSituations":"Default pip installs that omit the nixl extra; docker images built for NCCL-only deployments; upgrading vLLM without reinstalling optional NIXL dependencies.","solutions":["Install nixl into the same venv/interpreter vLLM runs in, then verify with python -c 'from vllm.distributed.device_communicators import nixl_utils; print(nixl_utils.has_nixl())'","Or switch the backend to 'pynccl' / 'torch_nccl' if NIXL one-sided transfers are not required"],"exampleFix":"# before\n# (nixl not installed)\nbackend = \"nixl\"\n\n# after\n# uv pip install nixl\nbackend = \"nixl\"","handlingStrategy":"validation","validationCode":"from vllm.distributed.device_communicators import nixl_utils\nif backend == 'nixl':\n    assert nixl_utils.has_nixl(), 'nixl not installed: uv pip install nixl'","typeGuard":"def nixl_available() -> bool:\n    from vllm.distributed.device_communicators import nixl_utils\n    return nixl_utils.has_nixl()","tryCatchPattern":null,"preventionTips":["Gate 'nixl' backend selection behind a has_nixl() check at config load","Verify optional extras (nixl) in CI smoke tests for the deployment image"],"tags":["nixl","eplb","dependency","backend-selection","vllm"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}