[Model] Default MOSS Local 1.5 to adaptive CUDA MRV2 with MPS (#8438)
Signed-off-by: Sy03 <1370724210@qq.com>
This commit is contained in:
30 files changed
+808
-152
No files matched your search
@@ -61,6 +61,7 @@ from vllm_omni.entrypoints.openai.tts_adapters.base import (
|
||||
)
|
||||
from vllm_omni.entrypoints.openai.tts_adapters.capabilities import load_supported_speakers
|
||||
from vllm_omni.entrypoints.openai.tts_adapters.ming_tts import MingTTSAdapter
|
||||
from vllm_omni.entrypoints.openai.tts_adapters.moss_tts import MossTTSAdapter
|
||||
from vllm_omni.entrypoints.openai.tts_adapters.qwen3_tts import Qwen3TTSAdapter, Qwen3TTSCodecLimitError
|
||||
from vllm_omni.entrypoints.openai.tts_adapters.voxtral import VoxtralTTSAdapter
|
||||
from vllm_omni.entrypoints.serve.utils import errors as serve_errors
|
||||
@@ -84,6 +85,42 @@ pytestmark = [pytest.mark.core_model, pytest.mark.cpu]
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("sse", [False, True])
|
||||
@pytest.mark.parametrize("payload", [None, "empty", "valid"])
|
||||
@pytest.mark.asyncio
|
||||
async def test_moss_empty_stream_is_an_error(mocker, sse, payload):
|
||||
serving = OmniOpenAIServingSpeech.__new__(OmniOpenAIServingSpeech)
|
||||
serving._tts_model_type = "moss_tts"
|
||||
serving.engine_client = SimpleNamespace(
|
||||
model_config=SimpleNamespace(model="OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5")
|
||||
)
|
||||
serving._adapter = MossTTSAdapter(SpeechServingContext(server=serving, engine_client=serving.engine_client))
|
||||
ready = mocker.patch.object(serving, "_mark_ref_audio_artifact_ready_for_request")
|
||||
discard = mocker.patch.object(serving, "_discard_ref_audio_artifact_warmup")
|
||||
|
||||
async def results():
|
||||
if payload is not None:
|
||||
audio = torch.zeros(320) if payload == "valid" else torch.empty(0)
|
||||
yield SimpleNamespace(multimodal_output={"model_outputs": audio, "sr": 24000})
|
||||
yield SimpleNamespace(multimodal_output={"model_outputs": torch.empty(0), "sr": 24000})
|
||||
|
||||
if sse:
|
||||
events = [event async for event in serving._generate_audio_sse_events(results(), "moss-empty")]
|
||||
assert any("speech.audio.done" in event for event in events) == (payload == "valid")
|
||||
assert any("speech.audio.error" in event for event in events) == (payload != "valid")
|
||||
else:
|
||||
chunks = serving._generate_audio_chunks(results(), "moss-empty", response_format="wav")
|
||||
if payload == "valid":
|
||||
output = [chunk async for chunk in chunks]
|
||||
assert len(output) == 2 and output[0].startswith(b"RIFF")
|
||||
assert len(output[1]) == 640
|
||||
else:
|
||||
with pytest.raises(TTSGenerationError, match="no audio"):
|
||||
await anext(chunks)
|
||||
assert ready.call_count == int(payload == "valid")
|
||||
assert discard.call_count == int(payload != "valid")
|
||||
|
||||
|
||||
class TestAudioMixin:
|
||||
@pytest.fixture
|
||||
def audio_mixin(self):
|
||||
|
||||
@@ -283,7 +283,7 @@ async def test_streaming_speech_does_not_count_empty_payload_as_first_packet(mon
|
||||
request_id="speech-test",
|
||||
request_arrival_ts=100.0,
|
||||
)
|
||||
assert len([chunk async for chunk in chunks]) == 2
|
||||
assert [chunk async for chunk in chunks] == [b"\0\0" * 320]
|
||||
assert metrics.ttfp_calls == [("1", "2", pytest.approx(0.25))]
|
||||
assert metrics.underrun_calls == [("1", "2", pytest.approx(0.0))]
|
||||
assert metrics.continuity_calls == [("1", "2", 100)]
|
||||
@@ -319,7 +319,11 @@ async def test_streaming_speech_does_not_finalize_continuity_on_validation_error
|
||||
def reject_generation(_tts_params, **_kwargs):
|
||||
raise RuntimeError("generation validation failed")
|
||||
|
||||
adapter = SimpleNamespace(validates_generation=True, validate_generation=reject_generation)
|
||||
adapter = SimpleNamespace(
|
||||
validates_generation=True,
|
||||
validate_generation=reject_generation,
|
||||
validate_stream_audio=lambda **_kwargs: None,
|
||||
)
|
||||
serving = _serving(metrics, adapter=adapter)
|
||||
monkeypatch.setattr("vllm_omni.entrypoints.openai.serving_speech.time.time", lambda: 100.25)
|
||||
|
||||
|
||||
Reference in new issue
Block a user