{"record":{"id":"abd8998d51e3e887","repo":"vllm-project/vllm","slug":"unsupported-multimodal-content-0","errorCode":null,"errorMessage":"unsupported multimodal content: {0}","messagePattern":"unsupported multimodal content: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"rust/src/chat/src/error.rs","lineNumber":22,"sourceCode":"use 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{}\",\n        available_parser_hint(.available_names)\n    )]","sourceCodeStart":4,"sourceCodeEnd":40,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/rust/src/chat/src/error.rs#L4-L40","documentation":"The nixl EPLB backend registers GPU memory with a NIXL agent for one-sided RDMA-style transfers, which requires a CUDA-like platform and expert weights resident on the device. Either the platform is not CUDA-like or the expert weight tensors are on CPU.","triggerScenarios":"Requesting backend='nixl' on non-CUDA platforms (e.g. ROCM without cuda-alike platform detection, CPU inference) or when expert weights are still on CPU (offloading or pre-H2D initialization).","commonSituations":"CPU-offloaded MoE deployments wanting NIXL; running on accelerator platforms not covered by current_platform.is_cuda_alike(); creating the communicator before weights are moved to GPU.","solutions":["Ensure expert weights are on the GPU before the EPLB communicator is created","On CPU or unsupported platforms, use 'torch_gloo' (CPU) or 'torch_nccl' instead","On ROCM/other accelerators, confirm the platform reports is_cuda_alike() or wait for platform support"],"exampleFix":"# before\nbackend = \"nixl\"  # expert weights on CPU\n\n# after\nweights = [w.cuda() for w in weights]\nbackend = \"nixl\"","handlingStrategy":"validation","validationCode":"from vllm.platforms import current_platform\ndevice_ok = current_platform.is_cuda_alike() and expert_weights[0][0].device.type != 'cpu'\nbackend = 'nixl' if device_ok else 'torch_gloo'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Move expert weights to GPU before EPLB communicator construction","Detect platform capabilities at startup and pick a supported backend automatically"],"tags":["nixl","eplb","device-mismatch","vllm"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}