{"record":{"id":"7d0398bbe658e1ad","repo":"huggingface/candle","slug":"slice-node-is-invalid-expected-3-5-inputs-got","errorCode":null,"errorMessage":"Slice node is invalid, expected 3-5 inputs, got {}: {:?}","messagePattern":"Slice node is invalid, expected 3-5 inputs, got (.+?): (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"candle-onnx/src/eval.rs","lineNumber":1272,"sourceCode":"                match node.input.len() {\n                    3 => {\n                        let len = starts.dims()[0];\n                        default_axes = Some(Tensor::arange(0, len as i64, starts.device())?);\n                        axes = default_axes.as_ref().unwrap();\n                        default_steps = Some(Tensor::ones((len,), DType::I64, starts.device())?);\n                        steps = default_steps.as_ref().unwrap();\n                    }\n                    4 => {\n                        let len = starts.dims()[0];\n                        axes = get(&node.input[3])?;\n                        default_steps = Some(Tensor::ones((len,), DType::I64, starts.device())?);\n                        steps = default_steps.as_ref().unwrap();\n                    }\n                    5 => {\n                        steps = get(&node.input[4])?;\n                        axes = get(&node.input[3])?;\n                    }\n                    _ => bail!(\n                        \"Slice node is invalid, expected 3-5 inputs, got {}: {:?}\",\n                        node.input.len(),\n                        node\n                    ),\n                }\n\n                let mut out = data.clone();\n                for (i, axis) in axes.to_vec1::<i64>()?.into_iter().enumerate() {\n                    // All negative elements of axes are made non-negative by\n                    // adding r to them, where r = rank(input).\n                    let axis = if axis < 0 {\n                        axis + data.rank() as i64\n                    } else {\n                        axis\n                    } as usize;\n\n                    let data_dim = data.dims()[axis] as i64;\n                    let mut s = to_scalar_flexible::<i64>(&starts.get(i)?)?;","sourceCodeStart":1254,"sourceCodeEnd":1290,"githubUrl":"https://github.com/huggingface/candle/blob/d5fee525bfde3273eb7c9b75fd2bc4937be867ca/candle-onnx/src/eval.rs#L1254-L1290","documentation":"The Slice node in ONNX takes data, starts, ends and optional axes and steps (3-5 inputs). Candle-onnx enforces this arity and bails for any other count (fewer than 3 or more than 5), since it cannot resolve which tensors are starts/ends/axes/steps.","triggerScenarios":"Evaluating a Slice node with 0-2 inputs (e.g. old opset-1 Slice using attributes) or 6+ inputs, i.e. any count outside 3..=5.","commonSituations":"Very old models exporting Slice as an attribute-based op (opset < 10) instead of input-based; an optimizer removing 'axes'/'steps' inputs improperly; hand-written graphs missing starts/ends.","solutions":["Re-export the model with opset >= 10 so Slice uses inputs (data, starts, ends[, axes][, steps])","Convert attribute-based Slice to input-based Slice via onnx version converter to opset 10+","Supply all required inputs: starts and ends (and axes/steps as needed) as 1-D i64 constants","Fix graph edits that dropped required Slice inputs"],"exampleFix":"// before (opset 1, attribute-based)\nSlice(data) with attrs starts/ends\n// after (opset 10+)\nSlice(data, starts, ends, axes)  # 3-5 inputs","handlingStrategy":"validation","validationCode":"for node in &graph.node {\n    if node.op_type == \"Slice\" {\n        let n = node.input.len();\n        assert!((3..=5).contains(&n), \"Slice {} has {} inputs\", node.name, n);\n    }\n}","typeGuard":"fn slice_arity_ok(node: &NodeProto) -> bool {\n    (3..=5).contains(&node.input.len())\n}","tryCatchPattern":null,"preventionTips":["Export with opset >= 10 so Slice uses 3-5 inputs","Convert legacy attribute-based Slice with the onnx version converter","Always include starts/ends (and axes) as explicit 1-D i64 inputs"],"tags":["onnx","slice","unsupported-input","opset"],"backgroundTag":"unsupported-op-arity","analyzedSha":"d5fee525bfde3273eb7c9b75fd2bc4937be867ca","analyzedAt":"2026-09-02T00:15:47.023Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}