From ce9105267fb9fff7df831ba3c1d0a86b91ebc23b Mon Sep 17 00:00:00 2001 From: tzhouam Date: Mon, 2 Feb 2026 08:40:56 +0000 Subject: [PATCH] Enhance error handling in TTS generation and improve audio output compatibility by supporting both "audio" and "model_outputs" keys in response. Signed-off-by: tzhouam --- .../qwen3_tts/openai_speech_client.py | 4 ++++ vllm_omni/entrypoints/openai/serving_speech.py | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/examples/online_serving/qwen3_tts/openai_speech_client.py b/examples/online_serving/qwen3_tts/openai_speech_client.py index 71ba5b70a..4d7046094 100644 --- a/examples/online_serving/qwen3_tts/openai_speech_client.py +++ b/examples/online_serving/qwen3_tts/openai_speech_client.py @@ -111,6 +111,10 @@ def run_tts_generation(args) -> None: print(response.text) return + if response.content.decode("utf-8").startswith('{"error"'): + print(f"Error: {response.content.decode('utf-8')}") + return + # Save audio response output_path = args.output or "tts_output.wav" with open(output_path, "wb") as f: diff --git a/vllm_omni/entrypoints/openai/serving_speech.py b/vllm_omni/entrypoints/openai/serving_speech.py index b2f999e6a..a8bae9e99 100644 --- a/vllm_omni/entrypoints/openai/serving_speech.py +++ b/vllm_omni/entrypoints/openai/serving_speech.py @@ -258,17 +258,26 @@ class OmniOpenAIServingSpeech(OpenAIServing, AudioMixin): # Extract audio from output # Audio can be in final_output.multimodal_output or final_output.request_output.multimodal_output + # Support both "audio" and "model_outputs" keys for compatibility with different models audio_output = None if hasattr(final_output, "multimodal_output") and final_output.multimodal_output: audio_output = final_output.multimodal_output - if (not audio_output or "audio" not in audio_output) and hasattr(final_output, "request_output"): + if not audio_output and hasattr(final_output, "request_output"): if final_output.request_output and hasattr(final_output.request_output, "multimodal_output"): audio_output = final_output.request_output.multimodal_output - if not audio_output or "audio" not in audio_output: + # Check for audio data using either "audio" or "model_outputs" key + audio_key = None + if audio_output: + if "audio" in audio_output: + audio_key = "audio" + elif "model_outputs" in audio_output: + audio_key = "model_outputs" + + if not audio_output or audio_key is None: return self.create_error_response("TTS model did not produce audio output.") - audio_tensor = audio_output["audio"] + audio_tensor = audio_output[audio_key] sample_rate = audio_output.get("sr", 24000) if hasattr(sample_rate, "item"): sample_rate = sample_rate.item()