main
py 91 lines 2.47 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 """Unit tests for ThinkingBudgetStateHolder batch index moves."""
4
5 import torch
6
7 from tests.v1.sample.utils import create_mock_reasoning_config
8 from vllm.sampling_params import SamplingParams
9 from vllm.v1.sample.logits_processor.interface import (
10 BatchUpdate,
11 MoveDirectionality,
12 )
13 from vllm.v1.sample.thinking_budget_state import ThinkingBudgetStateHolder
14
15
16 def _make_holder() -> ThinkingBudgetStateHolder:
17 return ThinkingBudgetStateHolder(
18 create_mock_reasoning_config([151667], [151668]),
19 8,
20 0,
21 torch.device("cpu"),
22 False,
23 )
24
25
26 def test_swap_budgeted_with_unbudgeted_clears_empty_side():
27 """Asymmetric SWAP must not leave the empty index sharing state."""
28 h = _make_holder()
29 h.sync_batch(
30 BatchUpdate(
31 batch_size=2,
32 removed=(),
33 added=[
34 (0, SamplingParams(thinking_token_budget=5), None, []),
35 (1, SamplingParams(), None, []),
36 ],
37 moved=(),
38 )
39 )
40 assert list(h._state.keys()) == [0]
41 budget_state = h._state[0]
42
43 h.sync_batch(
44 BatchUpdate(
45 batch_size=2,
46 removed=(),
47 added=(),
48 moved=[(0, 1, MoveDirectionality.SWAP)],
49 )
50 )
51 assert list(h._state.keys()) == [1]
52 assert h._state[1] is budget_state
53 assert h._state[1]["thinking_token_budget"] == 5
54
55 h.sync_batch(
56 BatchUpdate(
57 batch_size=2,
58 removed=(),
59 added=(),
60 moved=[(0, 1, MoveDirectionality.SWAP)],
61 )
62 )
63 assert list(h._state.keys()) == [0]
64 assert h._state[0] is budget_state
65
66
67 def test_swap_exchanges_two_budgeted_states():
68 h = _make_holder()
69 h.sync_batch(
70 BatchUpdate(
71 batch_size=2,
72 removed=(),
73 added=[
74 (0, SamplingParams(thinking_token_budget=3), None, []),
75 (1, SamplingParams(thinking_token_budget=7), None, []),
76 ],
77 moved=(),
78 )
79 )
80 b0 = h._state[0]["thinking_token_budget"]
81 b1 = h._state[1]["thinking_token_budget"]
82 h.sync_batch(
83 BatchUpdate(
84 batch_size=2,
85 removed=(),
86 added=(),
87 moved=[(0, 1, MoveDirectionality.SWAP)],
88 )
89 )
90 assert h._state[0]["thinking_token_budget"] == b1
91 assert h._state[1]["thinking_token_budget"] == b0