main
py 97 lines 3.26 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4 from http import HTTPStatus
5 from unittest.mock import MagicMock
6
7 import pytest
8
9 import vllm.envs as envs
10 from vllm.entrypoints.generate.base.serving import GenerateBaseServing
11 from vllm.envs import disable_envs_cache
12 from vllm.exceptions import GenerationError
13
14
15 @pytest.mark.asyncio
16 async def test_raise_if_error_raises_generation_error():
17 """Test _raise_if_error raises GenerationError."""
18 # create a minimal GenerateBaseServing instance
19 mock_engine = MagicMock()
20 mock_engine.model_config = MagicMock()
21 mock_engine.model_config.max_model_len = 100
22 mock_models = MagicMock()
23
24 serving = GenerateBaseServing(
25 engine_client=mock_engine,
26 models=mock_models,
27 request_logger=None,
28 )
29
30 # test that error finish_reason raises GenerationError
31 with pytest.raises(GenerationError) as exc_info:
32 serving._raise_if_error("error", "test-request-id")
33
34 assert str(exc_info.value) == "Internal server error"
35 assert exc_info.value.status_code == HTTPStatus.INTERNAL_SERVER_ERROR
36
37 # test that other finish_reasons don't raise
38 serving._raise_if_error("stop", "test-request-id") # should not raise
39 serving._raise_if_error("length", "test-request-id") # should not raise
40 serving._raise_if_error(None, "test-request-id") # should not raise
41
42
43 @pytest.mark.asyncio
44 async def test_convert_generation_error_to_streaming_response():
45 """Test _convert_generation_error_to_streaming_response output."""
46 mock_engine = MagicMock()
47 mock_engine.model_config = MagicMock()
48 mock_engine.model_config.max_model_len = 100
49 mock_models = MagicMock()
50
51 serving = GenerateBaseServing(
52 engine_client=mock_engine,
53 models=mock_models,
54 request_logger=None,
55 )
56
57 # create a GenerationError
58 gen_error = GenerationError("Internal server error")
59
60 # convert to streaming error response
61 error_json = serving._convert_generation_error_to_streaming_response(gen_error)
62
63 assert isinstance(error_json, str)
64 assert "Internal server error" in error_json
65 assert "InternalServerError" in error_json
66
67
68 def test_is_model_supported_skip_name_validation_env(
69 monkeypatch: pytest.MonkeyPatch,
70 ) -> None:
71 """When VLLM_SKIP_MODEL_NAME_VALIDATION is set, accept any model id."""
72 disable_envs_cache()
73 monkeypatch.delenv("VLLM_SKIP_MODEL_NAME_VALIDATION", raising=False)
74
75 mock_engine = MagicMock()
76 mock_engine.model_config = MagicMock()
77 mock_engine.model_config.max_model_len = 100
78 mock_models = MagicMock()
79 mock_models.is_base_model.return_value = False
80
81 serving = GenerateBaseServing(
82 engine_client=mock_engine,
83 models=mock_models,
84 request_logger=None,
85 )
86
87 assert serving._is_model_supported("not-a-registered-model") is False
88
89 monkeypatch.setenv("VLLM_SKIP_MODEL_NAME_VALIDATION", "1")
90 disable_envs_cache()
91 assert envs.VLLM_SKIP_MODEL_NAME_VALIDATION is True
92 assert serving._is_model_supported("not-a-registered-model") is True
93
94 monkeypatch.setenv("VLLM_SKIP_MODEL_NAME_VALIDATION", "true")
95 disable_envs_cache()
96 assert envs.VLLM_SKIP_MODEL_NAME_VALIDATION is True
97 assert serving._is_model_supported("another-alias") is True