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
- Set suffix_decoding_min_token_prob to a fraction in [0, 1] (e.g. 0.05 to prune unlikely tokens)
- Divide percentage values by 100 before passing
- 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
- Convert percentages to fractions (divide by 100) before passing probability-typed knobs
- Name probability variables with a _prob suffix in your config layer to signal the domain
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
- suffix_decoding_max_tree_depth={self.suffix_decoding_max_tre
- suffix_decoding_max_cached_requests={self.suffix_decoding_ma
- suffix_decoding_max_spec_factor={self.suffix_decoding_max_sp
- dspark_draft_topk must be between 1 and the draft vocabulary
- Arctic Inference is required for suffix decoding. Install vi
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/d6e875e328f3c71e.
Report an issue: GitHub.