{"record":{"id":"7b23f5cb28cfd1c2","repo":"vllm-project/vllm","slug":"unsupported-field-field-in-context","errorCode":null,"errorMessage":"unsupported field `{field}` in {context}","messagePattern":"unsupported field `(.+?)` in (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"rust/src/engine-core-client/src/error.rs","lineNumber":62,"sourceCode":"        timeout: Duration,\n    },\n    #[error(\"engine input registration timed out after {timeout:?}\")]\n    InputRegistrationTimeout { timeout: Duration },\n    #[error(\"unexpected engine id in startup handshake: expected {expected:?}, got {actual:?}\")]\n    UnexpectedHandshakeIdentity { expected: Vec<u8>, actual: Vec<u8> },\n    #[error(\"unexpected startup handshake message: {message}\")]\n    UnexpectedHandshakeMessage { message: String },\n    #[error(\"unexpected non-control output on coordinator path: {message}\")]\n    UnexpectedCoordinatorOutput { message: String },\n    #[error(\"unexpected output on main dispatcher path: {message}\")]\n    UnexpectedDispatcherOutput { message: String },\n    #[error(\"coordinator requires a Python-compatible two-byte engine id, got {engine_id:?}\")]\n    UnsupportedCoordinatorEngineId { engine_id: Vec<u8> },\n    #[error(\"unsupported auxiliary frame(s): expected 1 frame, got {frame_count}\")]\n    UnsupportedAuxFrames { frame_count: usize },\n    #[error(\"external coordinator mode is not implemented yet\")]\n    UnsupportedExternalCoordinator,\n    #[error(\"unsupported field `{field}` in {context}\")]\n    UnsupportedField {\n        context: &'static str,\n        field: &'static str,\n    },\n    #[error(\"engine control channel closed unexpectedly: {message}\")]\n    ControlClosed { message: String },\n    #[error(\"request `{request_id}` is already in flight\")]\n    DuplicateRequestId { request_id: String },\n    #[error(\n        \"data parallel rank {rank} is not connected to this frontend; connected ranks: {connected_ranks:?}\"\n    )]\n    InvalidDataParallelRank {\n        rank: u32,\n        connected_ranks: Vec<u32>,\n    },\n    #[error(\"engine-core output dispatcher closed: {message}\")]\n    DispatcherClosed { message: String },\n    #[error(\"engine-core client is closed: {message}\")]","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/rust/src/engine-core-client/src/error.rs#L44-L80","documentation":"Error::UnsupportedField { context, field } is a staged-support guard: EngineCoreRequest::validate (protocol/request.rs:134-141) rejects requests containing fields the first-stage client deliberately does not support — currently prompt_embeds is the only checked field ('unsupported field `prompt_embeds` in EngineCoreRequest'). It fails fast at validation time instead of sending a request the engine/client would mishandle.","triggerScenarios":"Submitting a request whose prompt_embeds is Some(..) through the Rust engine-core client; validate() runs on the request path before encoding, returning this error without touching the network.","commonSituations":"Porting a Python workload that passes prompt embedding tensors directly (prompt_embeds) instead of token ids; frontends that populate every optional field defensively. The field is explicitly unsupported in the first stage of this client, so this is an API-capability error, not corruption.","solutions":["Tokenize embeddings' source text upstream and send token ids via the normal prompt fields, leaving prompt_embeds as None","Audit the frontend for code that sets prompt_embeds and gate it behind a feature check","Watch the crate's roadmap: when the field is supported, validate() stops rejecting it and no caller change is needed"],"exampleFix":"// before\nlet req = EngineCoreRequest { prompt_embeds: Some(embeds), prompt: None, ..base };\n\n// after\nlet req = EngineCoreRequest { prompt_embeds: None, prompt: Some(token_ids), ..base };","handlingStrategy":"validation","validationCode":"fn request_fields_supported(req: &EngineCoreRequest) -> bool {\n    req.validate().is_ok()\n}","typeGuard":"fn is_unsupported_field(e: &engine_core_client::Error) -> bool {\n    matches!(e, engine_core_client::Error::UnsupportedField { .. })\n}","tryCatchPattern":"match req.validate() {\n    Err(e @ engine_core_client::Error::UnsupportedField { context, field }) => {\n        return bad_request(400, format!(\"{context} does not support `{field}`\"));\n    }\n    other => other?,\n}","preventionTips":["Call EngineCoreRequest::validate at admission time so unsupported fields become 400s, not mid-pipeline errors","Tokenize upstream instead of passing prompt_embeds during this client stage","Re-run validation tests when adopting a new crate version, since the unsupported set shrinks over time"],"tags":["rust","validation","unsupported-feature","request-building"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}