2025-02-02 14:58:18 -05:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
2023-09-07 13:43:45 -07:00
|
|
|
import pytest
|
|
|
|
|
|
|
|
from vllm.engine.async_llm_engine import RequestTracker
|
|
|
|
from vllm.outputs import RequestOutput
|
|
|
|
|
|
|
|
|
2024-03-04 14:01:40 -08:00
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_request_tracker():
|
2023-09-07 13:43:45 -07:00
|
|
|
tracker = RequestTracker()
|
|
|
|
stream_1 = tracker.add_request("1")
|
2024-03-04 14:01:40 -08:00
|
|
|
assert tracker.new_requests_event.is_set()
|
|
|
|
await tracker.wait_for_new_requests()
|
2024-08-06 22:21:41 -07:00
|
|
|
new, aborted = tracker.get_new_and_aborted_requests()
|
2024-03-04 14:01:40 -08:00
|
|
|
assert not tracker.new_requests_event.is_set()
|
2023-09-07 13:43:45 -07:00
|
|
|
assert len(new) == 1
|
|
|
|
assert new[0]["request_id"] == "1"
|
2024-08-06 22:21:41 -07:00
|
|
|
assert not aborted
|
2023-09-07 13:43:45 -07:00
|
|
|
assert not stream_1.finished
|
|
|
|
|
|
|
|
stream_2 = tracker.add_request("2")
|
|
|
|
stream_3 = tracker.add_request("3")
|
2024-03-04 14:01:40 -08:00
|
|
|
assert tracker.new_requests_event.is_set()
|
|
|
|
await tracker.wait_for_new_requests()
|
2024-08-06 22:21:41 -07:00
|
|
|
new, aborted = tracker.get_new_and_aborted_requests()
|
2024-03-04 14:01:40 -08:00
|
|
|
assert not tracker.new_requests_event.is_set()
|
2023-09-07 13:43:45 -07:00
|
|
|
assert len(new) == 2
|
|
|
|
assert new[0]["request_id"] == "2"
|
|
|
|
assert new[1]["request_id"] == "3"
|
2024-08-06 22:21:41 -07:00
|
|
|
assert not aborted
|
2023-09-07 13:43:45 -07:00
|
|
|
assert not stream_2.finished
|
|
|
|
assert not stream_3.finished
|
|
|
|
|
|
|
|
# request_ids must be unique
|
|
|
|
with pytest.raises(KeyError):
|
|
|
|
tracker.add_request("1")
|
2024-03-04 14:01:40 -08:00
|
|
|
assert not tracker.new_requests_event.is_set()
|
2023-09-07 13:43:45 -07:00
|
|
|
|
|
|
|
tracker.abort_request("1")
|
2024-08-06 22:21:41 -07:00
|
|
|
new, aborted = tracker.get_new_and_aborted_requests()
|
|
|
|
assert len(aborted) == 1
|
|
|
|
assert "1" in aborted
|
2023-09-07 13:43:45 -07:00
|
|
|
assert not new
|
|
|
|
assert stream_1.finished
|
|
|
|
|
|
|
|
stream_4 = tracker.add_request("4")
|
|
|
|
tracker.abort_request("4")
|
2024-03-04 14:01:40 -08:00
|
|
|
assert tracker.new_requests_event.is_set()
|
|
|
|
await tracker.wait_for_new_requests()
|
2024-08-06 22:21:41 -07:00
|
|
|
new, aborted = tracker.get_new_and_aborted_requests()
|
2024-08-09 00:06:36 -07:00
|
|
|
# aborted new requests will cancel each other out -
|
|
|
|
# there's no need for them to propagate into the
|
|
|
|
# engine
|
|
|
|
assert not aborted
|
2023-09-07 13:43:45 -07:00
|
|
|
assert not new
|
|
|
|
assert stream_4.finished
|
|
|
|
|
|
|
|
stream_5 = tracker.add_request("5")
|
2024-03-04 14:01:40 -08:00
|
|
|
assert tracker.new_requests_event.is_set()
|
2023-09-07 13:43:45 -07:00
|
|
|
tracker.process_request_output(
|
2024-03-04 14:01:40 -08:00
|
|
|
RequestOutput("2", "output", [], [], [], finished=True))
|
|
|
|
await tracker.wait_for_new_requests()
|
2024-08-06 22:21:41 -07:00
|
|
|
new, aborted = tracker.get_new_and_aborted_requests()
|
2024-03-04 14:01:40 -08:00
|
|
|
assert not tracker.new_requests_event.is_set()
|
2024-08-06 22:21:41 -07:00
|
|
|
assert not aborted
|
2023-09-07 13:43:45 -07:00
|
|
|
assert len(new) == 1
|
|
|
|
assert new[0]["request_id"] == "5"
|
|
|
|
assert stream_2.finished
|
|
|
|
assert not stream_5.finished
|