{"record":{"id":"adc2560251360135","repo":"huggingface/candle","slug":"bool-masked-pos-set-without-mask-token","errorCode":null,"errorMessage":"bool_masked_pos set without mask_token","messagePattern":"bool_masked_pos set without mask_token","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"candle-transformers/src/models/vit.rs","lineNumber":159,"sourceCode":"        &self,\n        _embeddings: &Tensor,\n        _height: usize,\n        _width: usize,\n    ) -> Result<Tensor> {\n        todo!()\n    }\n\n    pub fn forward(\n        &self,\n        pixel_values: &Tensor,\n        bool_masked_pos: Option<&Tensor>,\n        interpolate_pos_encoding: bool,\n    ) -> Result<Tensor> {\n        let (b_size, _num_channels, height, width) = pixel_values.dims4()?;\n        let embeddings = self.patch_embeddings.forward(pixel_values)?;\n        let embeddings = match (bool_masked_pos, &self.mask_token) {\n            (None, _) => embeddings,\n            (Some(_), None) => candle::bail!(\"bool_masked_pos set without mask_token\"),\n            (Some(bool_masked_pos), Some(mask_tokens)) => {\n                let seq_len = embeddings.dim(1)?;\n                let mask_tokens = mask_tokens.broadcast_as((b_size, seq_len, self.hidden_size))?;\n                let mask = bool_masked_pos\n                    .unsqueeze(D::Minus1)?\n                    .to_dtype(mask_tokens.dtype())?;\n                ((mask_tokens * &mask)? - (embeddings * (mask - 1.)?)?)?\n            }\n        };\n        let cls_tokens = self.cls_token.broadcast_as((b_size, 1, self.hidden_size))?;\n        let embeddings = Tensor::cat(&[&cls_tokens, &embeddings], 1)?;\n        if interpolate_pos_encoding {\n            let pos = self.interpolate_pos_encoding(&embeddings, height, width)?;\n            embeddings.broadcast_add(&pos)\n        } else {\n            embeddings.broadcast_add(&self.position_embeddings)\n        }\n    }","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/huggingface/candle/blob/d5fee525bfde3273eb7c9b75fd2bc4937be867ca/candle-transformers/src/models/vit.rs#L141-L177","documentation":"ViT forward supports masking patches via bool_masked_pos, but replacing masked positions requires the model to have mask_token weights. If a mask tensor is supplied while self.mask_token is None (the checkpoint/config had no mask token), forward bails rather than silently ignoring the mask.","triggerScenarios":"Calling vit.forward(pixel_values, Some(bool_masked_pos), interpolate_pos_encoding) on a ViTModel/VisionTransformer built from a config/checkpoint without a mask_token.","commonSituations":"Reusing MAE-style masking code with a plain supervised ViT checkpoint that never trained a mask token; copying forward calls from MAE examples; a config field for mask token left unset.","solutions":["Pass None for bool_masked_pos if you do not need masked patch modeling","Load a checkpoint/config that includes mask_token weights (e.g. an MAE-style ViT)","Set use_mask_token/mask-token in the config so the mask_token parameter is created before load"],"exampleFix":"// before\nlet emb = model.forward(&pixels, Some(&mask_pos), false)?;\n// after (plain ViT without mask_token)\nlet emb = model.forward(&pixels, None, false)?;","handlingStrategy":"type-guard","validationCode":"if bool_masked_pos.is_some() && model.mask_token.is_none() {\n    return Err(anyhow::anyhow!(\"model has no mask_token; pass None for bool_masked_pos\"));\n}","typeGuard":"fn masking_supported(model: &ViTModel) -> bool {\n    model.mask_token.is_some()\n}","tryCatchPattern":"match model.forward(&pixels, mask_pos, false) {\n    Err(e) if e.to_string().contains(\"bool_masked_pos set without mask_token\") => {\n        model.forward(&pixels, None, false)?\n    }\n    r => r?,\n}","preventionTips":["Only supply bool_masked_pos for MAE-style checkpoints that include mask_token","Enable the use_mask_token config option when masking is intended","Keep a single helper that pairs mask tensors with mask-capable models"],"tags":["rust","candle","vit","vision","missing-parameter"],"backgroundTag":"missing-mask-token","analyzedSha":"d5fee525bfde3273eb7c9b75fd2bc4937be867ca","analyzedAt":"2026-09-02T00:15:47.023Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}