vllm-project/vllm · error · Error
invalid repetition detection params: {message}
Error message
invalid repetition detection params: {message} What it means
Carries a free-form message describing an invalid `repetition_detection` parameter block; the enum message is `invalid repetition detection params: {message}`. Produced by `validate_repetition_detection` (rust/src/text/src/lower.rs:212-237) in exactly two cases: `min_pattern_size > max_pattern_size`, or `max_pattern_size > 0` while `min_count < 2`. Request-validation error.
Source
Thrown at rust/src/text/src/error.rs:38
#[error(
"this model's maximum context length is {max_model_len} tokens, \
but the prompt contains {prompt_len} input tokens"
)]
PromptTooLong { max_model_len: u32, prompt_len: u32 },
#[error(transparent)]
Logprobs(#[from] LogprobsError),
#[error(transparent)]
TokenIds(#[from] TokenIdsError),
#[error(transparent)]
SamplingParams(#[from] SamplingParamsError),
#[error(
"`min_tokens` must be less than or equal to `max_tokens`, \
got min_tokens={min_tokens}, max_tokens={max_tokens}"
)]
MinTokensExceedsMaxTokens { min_tokens: u32, max_tokens: u32 },
#[error("`thinking_token_budget` must be a non-negative integer or -1 for unlimited.")]
InvalidThinkingTokenBudget,
#[error("invalid repetition detection params: {message}")]
InvalidRepetitionDetection { message: String },
#[error("text request stream `{request_id}` closed before terminal output")]
StreamClosedBeforeTerminalOutput { request_id: String },
#[error(transparent)]
Llm(#[from] LlmError),
#[error(transparent)]
EngineCore(#[from] EngineCoreError),
}
pub type Result<T> = std::result::Result<T, Error>;
impl Error {
/// Whether this error represents invalid user request parameters.
pub fn is_request_validation_error(&self) -> bool {
match self {
Self::PromptTooLong { .. }
| Self::EmptyPromptTokenIds { .. }
| Self::EmptyStopString { .. }View on GitHub (pinned to c794754062)
Solutions
- Set min_pattern_size <= max_pattern_size
- Set min_count >= 2 when max_pattern_size > 0
- To disable repetition detection, omit the block or use the API's disabled form (a disabled block is filtered out before validation)
Example fix
// before
repetition_detection = { min_pattern_size: 10, max_pattern_size: 5, min_count: 1 }
// after
repetition_detection = { min_pattern_size: 5, max_pattern_size: 10, min_count: 3 } Defensive patterns
Strategy: validation
Validate before calling
if let Some(rd) = &request.repetition_detection {
assert!(rd.min_pattern_size <= rd.max_pattern_size);
if rd.max_pattern_size > 0 {
assert!(rd.min_count >= 2);
}
} Type guard
fn is_repetition_detection_error(e: &Error) -> bool {
matches!(e, Error::InvalidRepetitionDetection { .. })
} Try / catch
match lower_request(params) {
Err(Error::InvalidRepetitionDetection { message }) => bad_request(message),
other => other,
} Prevention
- Keep min_pattern_size <= max_pattern_size and min_count >= 2 in any repetition-detection preset
- Omit the block entirely to disable detection rather than zeroing fields
When it happens
Trigger: Sending a request with `repetition_detection` where min_pattern_size exceeds max_pattern_size, or where detection is enabled (max_pattern_size > 0) but min_count is 0 or 1.
Common situations: Tuning anti-repetition heuristics by hand and inverting the size bounds; copying example configs from a different vLLM version with different defaults; setting min_count=1 thinking it means 'report first occurrence'.
Related errors
- max_logprobs must be non-negative or -1, got {}
- data parallel size must be at least 1
- engine start index does not fit usize
- max_logprobs must be non-negative or -1
- `min_tokens` must be less than or equal to `max_tokens`, got
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/6f07cd27266ed260.
Report an issue: GitHub.