From 85f9c4dff8f4c5a3fdd736c224633bcc1a8091e7 Mon Sep 17 00:00:00 2001 From: NayukiChiba Date: Wed, 27 May 2026 21:36:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(mimo):=20=E4=BF=AE=E5=A4=8Dvoice=20design?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E8=AF=B7=E6=B1=82=E4=B8=AD=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E6=97=A0=E6=95=88voice=E5=8F=82=E6=95=B0=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#8326)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(mimo): 修复voice design模型请求中包含无效voice参数的问题 - voice design模型不支持audio.voice参数,之前统一添加导致请求可能出错 - 在构建请求payload时根据模型名称动态决定是否包含voice字段 - 增加单元测试覆盖voicedesign模型和普通模型的参数构建逻辑 close #8283 * style: 使用snake case命名法 --- .../provider/sources/mimo_tts_api_source.py | 10 +++--- tests/test_mimo_api_sources.py | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) 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",