[Feature] Failure message shows more details (#2961)
Signed-off-by: wuhang <wuhang6@huawei.com>
This commit is contained in:
1 parent
e3b0afbb97
commit
fd9a0ee27f
6 files changed
+205
-38
No files matched your search
@@ -18,6 +18,7 @@ from pydantic import ValidationError
|
||||
from pytest_mock import MockerFixture
|
||||
from vllm.entrypoints.openai.engine.protocol import ErrorInfo, ErrorResponse
|
||||
|
||||
from vllm_omni.entrypoints.omni_base import OmniEngineDeadError
|
||||
from vllm_omni.entrypoints.openai import api_server as api_server_module
|
||||
from vllm_omni.entrypoints.openai.audio_utils_mixin import AudioMixin
|
||||
from vllm_omni.entrypoints.openai.protocol.audio import (
|
||||
@@ -1707,6 +1708,77 @@ def test_api_server_create_speech_wraps_error_response_status(mocker: MockerFixt
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_api_server_create_speech_engine_error_response_includes_request_and_stage_id(mocker: MockerFixture):
|
||||
handler = mocker.MagicMock()
|
||||
handler.create_speech = mocker.AsyncMock(
|
||||
side_effect=OmniEngineDeadError(
|
||||
"engine dead",
|
||||
error_stage_id=1,
|
||||
)
|
||||
)
|
||||
|
||||
terminate_mock = mocker.patch.object(api_server_module, "terminate_if_errored")
|
||||
|
||||
app = FastAPI()
|
||||
app.state.args = SimpleNamespace(log_error_stack=False)
|
||||
app.state.openai_serving_speech = handler
|
||||
app.state.engine_client = SimpleNamespace(
|
||||
engine=SimpleNamespace(is_alive=lambda: False),
|
||||
errored=True,
|
||||
)
|
||||
app.state.server = SimpleNamespace()
|
||||
scope = {
|
||||
"type": "http",
|
||||
"app": app,
|
||||
"method": "POST",
|
||||
"path": "/v1/audio/speech",
|
||||
"headers": [],
|
||||
"query_string": b"",
|
||||
"client": ("127.0.0.1", 12345),
|
||||
"server": ("testserver", 80),
|
||||
"scheme": "http",
|
||||
}
|
||||
raw_request = Request(scope)
|
||||
raw_request.state.request_metadata = SimpleNamespace(request_id="speech-req-1")
|
||||
request = OpenAICreateSpeechRequest(input="Hello")
|
||||
|
||||
response = asyncio.run(api_server_module.create_speech(request, raw_request))
|
||||
|
||||
assert isinstance(response, JSONResponse)
|
||||
assert response.status_code == 500
|
||||
assert response.body.decode("utf-8") == (
|
||||
'{"error":{"message":"engine dead","type":"InternalServerError","param":null,'
|
||||
'"code":500,"request_id":"speech-req-1","error_stage_id":1}}'
|
||||
)
|
||||
terminate_mock.assert_called_once()
|
||||
|
||||
|
||||
def test_omni_engine_error_handler_includes_request_and_stage_id(mocker: MockerFixture):
|
||||
app = FastAPI()
|
||||
app.state.args = SimpleNamespace(log_error_stack=False)
|
||||
app.state.engine_client = SimpleNamespace(
|
||||
engine=SimpleNamespace(is_alive=lambda: False),
|
||||
errored=True,
|
||||
)
|
||||
app.state.server = SimpleNamespace()
|
||||
|
||||
terminate_mock = mocker.patch.object(api_server_module, "terminate_if_errored")
|
||||
api_server_module._register_omni_exception_handlers(app)
|
||||
|
||||
@app.get("/boom")
|
||||
async def boom(request: Request):
|
||||
request.state.request_metadata = SimpleNamespace(request_id="speech-req-1")
|
||||
exc = OmniEngineDeadError("engine dead", error_stage_id=1)
|
||||
raise exc
|
||||
|
||||
response = TestClient(app).get("/boom")
|
||||
|
||||
assert response.status_code == 500
|
||||
assert response.json()["error"]["request_id"] == "speech-req-1"
|
||||
assert response.json()["error"]["error_stage_id"] == 1
|
||||
terminate_mock.assert_called_once()
|
||||
|
||||
|
||||
class TestWAVHeaderGeneration:
|
||||
"""Unit tests for WAV header generation with placeholder values."""
|
||||
|
||||
|
||||
Reference in new issue
Block a user