diff --git a/astrbot/core/provider/sources/mimo_tts_api_source.py b/astrbot/core/provider/sources/mimo_tts_api_source.py index 2966bfb7d..63389a10b 100644 --- a/astrbot/core/provider/sources/mimo_tts_api_source.py +++ b/astrbot/core/provider/sources/mimo_tts_api_source.py @@ -88,13 +88,15 @@ class ProviderMiMoTTSAPI(TTSProvider): } ) + audio_params = {"format": self.audio_format} + # voice design 模型不支持 audio.voice 参数 + if "voicedesign" not in self.model_name: + audio_params["voice"] = self.voice + return { "model": self.model_name, "messages": messages, - "audio": { - "format": self.audio_format, - "voice": self.voice, - }, + "audio": audio_params, } async def get_audio(self, text: str) -> str: diff --git a/tests/test_mimo_api_sources.py b/tests/test_mimo_api_sources.py index c2b02aa13..ec5b67453 100644 --- a/tests/test_mimo_api_sources.py +++ b/tests/test_mimo_api_sources.py @@ -129,6 +129,39 @@ def test_mimo_tts_seed_text_is_not_prepended_to_assistant_content(): asyncio.run(provider.terminate()) +def test_mimo_tts_voicedesign_model_omits_voice_param(): + """voice design 模型不应包含 audio.voice 参数""" + provider = _make_tts_provider( + { + "model": "mimo-v2.5-tts-voicedesign", + "mimo-tts-seed-text": "", + } + ) + try: + payload = provider._build_payload("hello") + assert "voice" not in payload["audio"] + assert payload["audio"]["format"] == "wav" + finally: + asyncio.run(provider.terminate()) + + +def test_mimo_tts_regular_model_includes_voice_param(): + """普通 TTS 模型应包含 audio.voice 参数""" + provider = _make_tts_provider( + { + "model": "mimo-v2.5-tts", + "mimo-tts-voice": "custom_voice", + "mimo-tts-seed-text": "", + } + ) + try: + payload = provider._build_payload("hello") + assert payload["audio"]["voice"] == "custom_voice" + assert payload["audio"]["format"] == "wav" + finally: + asyncio.run(provider.terminate()) + + def test_mimo_headers_use_single_authorization_method(): assert build_headers("test-key") == { "Content-Type": "application/json",