From 59e664d7e26b6677f19228226e3f81d450fa9673 Mon Sep 17 00:00:00 2001 From: adhikjoshi Date: Wed, 4 Mar 2026 09:23:04 +0530 Subject: [PATCH] fix: map response_format to output_format for TTS response_format was declared as supported but never mapped to the ModelsLab API parameter. Now maps mp3/wav/ogg to output_format. Add tests for response_format mapping. Note: time.sleep() polling still blocks async event loop - this is a known limitation of sync polling in LiteLLM's TTS path. --- .../text_to_speech/transformation.py | 6 ++++++ .../test_modelslab_tts_transformation.py | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/litellm/llms/modelslab/text_to_speech/transformation.py b/litellm/llms/modelslab/text_to_speech/transformation.py index c5151bf0fcc..8bc423cebb5 100644 --- a/litellm/llms/modelslab/text_to_speech/transformation.py +++ b/litellm/llms/modelslab/text_to_speech/transformation.py @@ -100,6 +100,12 @@ class ModelsLabTextToSpeechConfig(BaseTextToSpeechConfig): except (ValueError, TypeError): pass + # Map response_format (mp3, wav, etc.) + if "response_format" in optional_params: + fmt = optional_params["response_format"] + if fmt in ("mp3", "wav", "ogg"): + mapped["output_format"] = fmt + # Language from extra params if "language" in kwargs: lang = kwargs["language"] diff --git a/tests/test_litellm/llms/modelslab/text_to_speech/test_modelslab_tts_transformation.py b/tests/test_litellm/llms/modelslab/text_to_speech/test_modelslab_tts_transformation.py index 03d6c04f233..91d1d84d3e7 100644 --- a/tests/test_litellm/llms/modelslab/text_to_speech/test_modelslab_tts_transformation.py +++ b/tests/test_litellm/llms/modelslab/text_to_speech/test_modelslab_tts_transformation.py @@ -58,6 +58,27 @@ class TestModelsLabTTSTransformation: ) assert params["speed"] == 1.5 + def test_map_openai_params_response_format_mp3(self): + """response_format mp3 maps to output_format mp3.""" + _, params = self.config.map_openai_params( + model="default", optional_params={"response_format": "mp3"}, voice="alloy" + ) + assert params["output_format"] == "mp3" + + def test_map_openai_params_response_format_wav(self): + """response_format wav maps to output_format wav.""" + _, params = self.config.map_openai_params( + model="default", optional_params={"response_format": "wav"}, voice="alloy" + ) + assert params["output_format"] == "wav" + + def test_map_openai_params_response_format_ignored_for_invalid(self): + """Invalid response_format values are ignored.""" + _, params = self.config.map_openai_params( + model="default", optional_params={"response_format": "flac"}, voice="alloy" + ) + assert "output_format" not in params + def test_get_supported_openai_params(self): params = self.config.get_supported_openai_params("default") assert "voice" in params