[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