sgl-project/sglang · error · ValueError
min_new_tokens must be in [0, max_new_tokens], got {self.min
Error message
min_new_tokens must be in [0, max_new_tokens], got {self.min_new_tokens}. What it means
SamplingParams.verify() requires min_new_tokens to be >= 0 (and later <= max_new_tokens when max_new_tokens is set). A negative min_new_tokens raises this ValueError during normalize()/verify(). min_new_tokens forces the model to generate at least N tokens by suppressing EOS until the count is reached.
Source
Thrown at python/sglang/srt/sampling/sampling_params.py:190
f"{self.frequency_penalty}."
)
if not -2.0 <= self.presence_penalty <= 2.0:
raise ValueError(
"presence_penalty must be in [-2, 2], got " f"{self.presence_penalty}."
)
if not 0.0 < self.repetition_penalty <= 2.0:
raise ValueError(
"repetition_penalty must be in (0, 2] (1.0 = no penalty), "
f"got {self.repetition_penalty}."
)
if not 0 <= self.min_new_tokens:
raise ValueError(
f"min_new_tokens must be in [0, max_new_tokens], got "
f"{self.min_new_tokens}."
)
if self.max_new_tokens is not None:
if self.max_new_tokens < 0:
raise ValueError(
f"max_new_tokens must be at least 0, got {self.max_new_tokens}."
)
if not self.min_new_tokens <= self.max_new_tokens:
raise ValueError(
f"min_new_tokens must be in [0, max_new_tokens({self.max_new_tokens})], got "
f"{self.min_new_tokens}."
)
if self.logit_bias is not None:
for token_id in self.logit_bias:
if not 0 <= int(token_id) < vocab_size:
raise ValueError(
f"logit_bias must has keys in [0, {vocab_size - 1}], got "
f"{token_id}."
)
grammars = [
self.json_schema,
self.regex,View on GitHub (pinned to 0132848349)
Solutions
- Clamp min_new_tokens to >= 0 (use 0 to disable)
- Ensure min_new_tokens <= max_new_tokens when max_new_tokens is set
- Compute min_new_tokens defensively: max(0, min(min_new, max_new or min_new))
Example fix
# before params = SamplingParams(min_new_tokens=min_len, max_new_tokens=max_len) # min_len may be negative # after params = SamplingParams(min_new_tokens=max(0, min_len), max_new_tokens=max(max_len, 0))
Defensive patterns
Strategy: validation
Validate before calling
min_new_tokens = max(0, min_new_tokens)
if max_new_tokens is not None:
max_new_tokens = max(0, max_new_tokens)
min_new_tokens = min(min_new_tokens, max_new_tokens)
params = SamplingParams(min_new_tokens=min_new_tokens, max_new_tokens=max_new_tokens) Type guard
def valid_min_new_tokens(mn, mx=None):
return isinstance(mn, int) and mn >= 0 and (mx is None or mn <= mx) Try / catch
try:
llm.generate(prompts, SamplingParams(min_new_tokens=mn, max_new_tokens=mx))
except ValueError as e:
if 'min_new_tokens' in str(e):
mn = 0
else:
raise Prevention
- Clamp computed min_new_tokens to >= 0 before building params
- Keep the invariant 0 <= min_new_tokens <= max_new_tokens in token-budget math
When it happens
Trigger: Passing SamplingParams(min_new_tokens=-1); also passing min_new_tokens greater than max_new_tokens triggers the companion check further down. verify() runs via normalize() per request.
Common situations: Computing min_new_tokens as target_length - current_length and going negative when the prompt already exceeds the target; config defaults of -1 used as 'unset'; off-by-one arithmetic in token budgeting.
Related errors
- min_new_tokens must be in [0, max_new_tokens({self.max_new_t
- beam_width must be at least 1, got {self.beam_width}.
- temperature must be a non-negative finite number, got {self.
- top_p must be in (0, 1], got {self.top_p}.
- min_p must be in [0, 1], got {self.min_p}.
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/681dc2d1cf364a71.
Report an issue: GitHub.