vllm-project/vllm-omni

[Bug]: Talker EngineCore crashes with islice ValueError instead of rejecting completions API for thinker+talker models

Open

#5,495 opened on Jul 28, 2026

View on GitHub
 (3 comments) (0 reactions) (1 assignee)Python (1,067 forks)github user discovery
bughelp wantedmedium priority

Repository metrics

Stars
 (4,990 stars)
PR merge metrics
 (PR metrics pending)

Description

Symptom

tests/e2e/online_serving/test_qwen3_omni.py::test_completions_rejected_for_thinker_talker[default] expects the completions API to be rejected with HTTP 400 on a thinker+talker (multi-stage) model, but the request instead reaches the stage-1 (talker) scheduler and crashes the EngineCore, surfacing as HTTP 500:

File ".../vllm_omni/core/sched/omni_ar_scheduler.py", line 268, in schedule
  scheduler_output = super().schedule(throttle_prefills)
File ".../vllm/v1/core/sched/scheduler.py", line 762, in schedule
  ) = self.kv_cache_manager.get_computed_blocks(request)
File ".../vllm/v1/core/kv_cache_manager.py", line 239, in get_computed_blocks
  self.coordinator.find_longest_cache_hit(
File ".../vllm/v1/core/single_type_kv_cache_manager.py", line 708, in find_longest_cache_hit
  for block_hash in itertools.islice(full_block_hashes, max_length // block_size):
ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.

i.e. max_length is negative by the time vLLM's prefix-cache lookup runs — the to-be-rejected request is admitted into stage-1 scheduling with an invalid token length instead of being bounced at the API/validation layer.

Evidence it is deterministic and pre-existing on main

  • Build #2919 (dev/vllm-align @ 05d0926e): failed, and the automatic retry failed identically.
  • Build #2920 (pure main @ 5014fea4, same hour/hardware): identical traceback.
  • The job also appears in the failing list of the earlier main baseline #2906.

Expected

The completions endpoint should reject thinker+talker pipelines with a clean 400 before the request reaches any stage scheduler; whatever validation used to produce that 400 either no longer fires or fires after stage-1 submission.

Contributor guide