[CI][Bugfix] Fix and wire streaming-input tests (#49356)

Signed-off-by: Nick Hill <nickhill123@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Nick Hill committed Jul 22, 2026 at 01:35 UTC a1c15bcb0fc64c5211240a1a043081bceb0e20e1
4 files changed +13 -5
.buildkite/test_areas/misc.yaml
+2
@@ -90,6 +90,7 @@ steps:
90 - tests/v1/kv_offload
91 - tests/v1/simple_kv_offload
92 - tests/v1/worker
93 + - tests/v1/streaming_input
94 - tests/v1/kv_connector/unit
95 - tests/v1/ec_connector/unit
96 - tests/v1/metrics
@@ -103,6 +104,7 @@ steps:
104 - pytest -v -s v1/kv_offload
105 - pytest -v -s v1/simple_kv_offload
106 - pytest -v -s v1/worker
107 + - pytest -v -s v1/streaming_input
108 - pytest -v -s -m 'not cpu_test' v1/kv_connector/unit
109 - pytest -v -s -m 'not cpu_test' v1/ec_connector/unit
110 - pytest -v -s -m 'not cpu_test' v1/metrics
tests/v1/streaming_input/test_gpu_model_runner_streaming.py
+3 -1
@@ -16,7 +16,8 @@ from vllm.sampling_params import SamplingParams
16 from vllm.v1.worker.gpu_input_batch import CachedRequestState, InputBatch
17 from vllm.v1.worker.gpu_model_runner import GPUModelRunner
18
19 -pytestmark = pytest.mark.cpu_test
19 +# Not cpu_test: InputBatch allocates pinned (UVA) memory, which requires a
20 +# CUDA device even though the batch tensors live on the CPU.
21
22
23 @pytest.fixture
@@ -28,6 +29,7 @@ def mock_model_runner_with_input_batch():
29 runner.requests = {}
30 runner.max_num_reqs = 10
31 runner.max_model_len = 1024
32 + runner.late_interaction_runner = Mock()
33
34 # Create a real InputBatch for e2e testing
35 runner.input_batch = InputBatch(
tests/v1/streaming_input/test_gpu_model_runner_v2_streaming.py
+3 -3
@@ -16,7 +16,8 @@ from vllm.v1.core.sched.output import (
16 from vllm.v1.worker.gpu.model_runner import GPUModelRunner
17 from vllm.v1.worker.gpu.states import RequestState
18
19 -pytestmark = pytest.mark.cpu_test
19 +# Not cpu_test: RequestState allocates pinned (UVA) memory, which requires a
20 +# CUDA device even though the request state itself lives on the CPU.
21
22
23 @pytest.fixture
@@ -31,13 +32,12 @@ def mock_model_runner_with_req_states():
32 num_speculative_steps=0,
33 vocab_size=32000,
34 device=torch.device("cpu"),
34 - model_dtype=torch.float32,
35 - cache_draft_logits=False,
35 )
36 runner.encoder_cache = None
37 runner.model_state = Mock()
38 runner.block_tables = Mock()
39 runner.lora_state = Mock()
40 + runner.pp_handler = None
41 runner.sampler = None
42 runner.prompt_logprobs_worker = None
43 runner.is_last_pp_rank = False
tests/v1/streaming_input/test_scheduler_streaming.py
+5 -1
@@ -53,6 +53,8 @@ def create_scheduler() -> Scheduler:
53 vllm_config.model_config = MagicMock()
54 vllm_config.model_config.skip_tokenizer_init = True
55 vllm_config.model_config.is_multimodal_model = False
56 + vllm_config.model_config.is_encoder_decoder = False
57 + vllm_config.model_config.is_diffusion = False
58 vllm_config.model_config.max_model_len = 1024
59 vllm_config.model_config.enable_return_routed_experts = False
60 vllm_config.cache_config = MagicMock()
@@ -496,7 +498,9 @@ class TestStreamingScheduler(unittest.TestCase):
498 eco_cycle2 = eco_dict_cycle2[session.client_index].outputs[0]
499 assert eco_cycle2.finish_reason == FinishReason.STOP
500 assert session.status == RequestStatus.WAITING_FOR_STREAMING_REQ
499 - assert session in scheduler.waiting
501 + # Sessions paused for streaming input are blocked-waiting, so they
502 + # live in the skipped_waiting queue rather than the main waiting queue.
503 + assert session in scheduler.skipped_waiting
504 assert session._all_token_ids == [1, 2, 3, 10, STOP_TOKEN]
505
506 # CRITICAL ASSERTION: Cached prompt_token_ids STILL must not have changed