Files
vllm-omni/tests/engine/test_correlated_rpc_client.py
T
05b794f29b [Full Duplex] Feat: Support Full-Duplex realtime runtime & add MiniCPM-o 4.5 demo (#3907)
Signed-off-by: Sy03 <1370724210@qq.com>
Signed-off-by: lishunyang12 <lishunyang03@gmail.com>
Signed-off-by: Yueqian Lin <linyueqian@outlook.com>
Co-authored-by: lishunyang12 <lishunyang03@gmail.com>
Co-authored-by: Yueqian Lin <linyueqian@outlook.com>
Co-authored-by: StormMelody <22371184@zju.edu.cn>
Co-authored-by: Gao Han <hgaoaf@connect.ust.hk>
Co-authored-by: Hongsheng Liu <liuhongsheng4@huawei.com>
2026-07-23 16:45:18 +08:00

105 lines
3.2 KiB
Python

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
from __future__ import annotations
import queue
from concurrent.futures import ThreadPoolExecutor
import pytest
from vllm_omni.engine.messages import (
CollectiveRPCRequestMessage,
CollectiveRPCResultMessage,
ErrorMessage,
)
from vllm_omni.engine.rpc_result_router import CorrelatedRpcClient
pytestmark = [pytest.mark.core_model, pytest.mark.cpu]
def _request(rpc_id: str) -> CollectiveRPCRequestMessage:
return CollectiveRPCRequestMessage(
rpc_id=rpc_id,
method="health",
timeout=1,
args=(),
kwargs={},
stage_ids=None,
)
def test_correlated_rpc_client_unregisters_timeout_before_late_result() -> None:
request_queue: queue.Queue = queue.Queue()
result_queue: queue.Queue = queue.Queue()
client = CorrelatedRpcClient(request_queue, result_queue)
try:
with pytest.raises(TimeoutError, match="first timed out"):
client.execute(
("collective", "first"),
_request("first"),
timeout=0.01,
timeout_message="first timed out",
)
assert request_queue.get_nowait().rpc_id == "first"
result_queue.put(
CollectiveRPCResultMessage(
rpc_id="first",
method="health",
stage_ids=[0],
results=["late"],
)
)
result_queue.put(
CollectiveRPCResultMessage(
rpc_id="second",
method="health",
stage_ids=[0],
results=["current"],
)
)
current = client.execute(
("collective", "second"),
_request("second"),
timeout=1,
timeout_message="second timed out",
)
assert isinstance(current, CollectiveRPCResultMessage)
assert current.results == ["current"]
finally:
client.close()
def test_correlated_rpc_client_rejects_after_fatal_without_enqueuing() -> None:
request_queue: queue.Queue = queue.Queue()
result_queue: queue.Queue = queue.Queue()
client = CorrelatedRpcClient(request_queue, result_queue)
try:
with ThreadPoolExecutor(max_workers=1) as executor:
pending = executor.submit(
client.execute,
("collective", "pending"),
_request("pending"),
timeout=1,
timeout_message="unexpected timeout",
)
assert request_queue.get(timeout=1).rpc_id == "pending"
result_queue.put(ErrorMessage(error="orchestrator failed", fatal=True))
with pytest.raises(RuntimeError, match="orchestrator failed"):
pending.result(timeout=1)
with pytest.raises(RuntimeError, match="orchestrator failed"):
client.execute(
("collective", "after-fatal"),
_request("after-fatal"),
timeout=1,
timeout_message="unexpected timeout",
)
assert request_queue.empty()
finally:
client.close()