vllm-project/vllm · error · ValueError

suffix_decoding_min_token_prob={self.suffix_decoding_min_tok

Error message

suffix_decoding_min_token_prob={self.suffix_decoding_min_token_prob} must be in [0, 1]

What it means

Raised by _validate_suffix_decoding when suffix_decoding_min_token_prob is outside [0, 1]. The value is a probability threshold used to prune low-confidence draft tokens from the suffix tree; anything below 0 or above 1 is not a valid probability.

Source

Thrown at vllm/config/speculative.py:1177

            )
        # Validate values
        if self.suffix_decoding_max_tree_depth < 1:
            raise ValueError(
                f"suffix_decoding_max_tree_depth="
                f"{self.suffix_decoding_max_tree_depth} must be >= 1"
            )
        if self.suffix_decoding_max_cached_requests < 0:
            raise ValueError(
                f"suffix_decoding_max_cached_requests="
                f"{self.suffix_decoding_max_cached_requests} must be >= 0"
            )
        if self.suffix_decoding_max_spec_factor < 0:
            raise ValueError(
                f"suffix_decoding_max_spec_factor="
                f"{self.suffix_decoding_max_spec_factor} must be >= 0"
            )
        if not 0 <= self.suffix_decoding_min_token_prob <= 1:
            raise ValueError(
                f"suffix_decoding_min_token_prob="
                f"{self.suffix_decoding_min_token_prob} must be in [0, 1]"
            )

    @staticmethod
    def _maybe_override_draft_max_model_len(
        speculative_max_model_len: int | None,
        draft_max_model_len: int,
        target_max_model_len: int,
    ) -> int:
        """Determine the max sequence len for the draft model. This is usually
        the draft_max_model_len, but may be the target_max_model_len if it is
        less than the draft_max_model_len, or may be speculative_max_model_len
        if it is specified.

        This is necessary so that sequences do not exceed the capacity of the
        draft model or the target model.

View on GitHub (pinned to c794754062)

Solutions

  1. Set suffix_decoding_min_token_prob to a fraction in [0, 1] (e.g. 0.05 to prune unlikely tokens)
  2. Divide percentage values by 100 before passing
  3. Remove the key to use the default

Example fix

# before
speculative_config={"method": "suffix", "suffix_decoding_min_token_prob": 5}
# after
speculative_config={"method": "suffix", "suffix_decoding_min_token_prob": 0.05}
Defensive patterns

Strategy: validation

Validate before calling

p = spec_cfg.get("suffix_decoding_min_token_prob", 0.0)
assert 0.0 <= p <= 1.0, f"min_token_prob={p} must be a probability in [0, 1]"

Type guard

def is_probability(p: float) -> bool:
    return 0.0 <= p <= 1.0

Prevention

When it happens

Trigger: speculative_config={'method': 'suffix', 'suffix_decoding_min_token_prob': 1.5} or a negative value; passing a percentage (e.g. 50) instead of a fraction.

Common situations: Unit confusion (percent vs. probability); sweeping thresholds that overshoot the [0,1] interval; copy-paste from configs of systems that use log-probabilities.

Related errors


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/d6e875e328f3c71e. Report an issue: GitHub.