diff --git a/astrbot/core/provider/sources/gsv_selfhosted_source.py b/astrbot/core/provider/sources/gsv_selfhosted_source.py index f4cac0ce1e..ac11a93c7d 100644 --- a/astrbot/core/provider/sources/gsv_selfhosted_source.py +++ b/astrbot/core/provider/sources/gsv_selfhosted_source.py @@ -33,7 +33,9 @@ def __init__( # TTS 请求的默认参数,移除前缀gsv_ self.default_params: dict = { - key.removeprefix("gsv_"): str(value).lower() + key.removeprefix("gsv_"): ( + str(value).lower() if isinstance(value, bool) else str(value) + ) for key, value in provider_config.get("gsv_default_parms", {}).items() } self.timeout = provider_config.get("timeout", 60) diff --git a/tests/unit/test_gsv_selfhosted_source.py b/tests/unit/test_gsv_selfhosted_source.py new file mode 100644 index 0000000000..4e2c20ab07 --- /dev/null +++ b/tests/unit/test_gsv_selfhosted_source.py @@ -0,0 +1,24 @@ +import pytest + +import astrbot.api # noqa: F401 # Initialize API before provider adapters. +from astrbot.core.provider.sources.gsv_selfhosted_source import ProviderGSVTTS + + +@pytest.mark.parametrize( + ("key", "value", "expected"), + [ + ("ref_audio_path", "/Voices/Alice.WAV", "/Voices/Alice.WAV"), + ("prompt_text", "Hello NASA", "Hello NASA"), + ("streaming_mode", True, "true"), + ("parallel_infer", False, "false"), + ("top_k", 5, "5"), + ("speed_factor", 1.25, "1.25"), + ], +) +def test_synthesis_params_preserve_case_and_serialize_scalars(key, value, expected): + provider = ProviderGSVTTS({"gsv_default_parms": {f"gsv_{key}": value}}, {}) + + params = provider.build_synthesis_params("Read NASA aloud") + + assert params[key] == expected + assert params["text"] == "Read NASA aloud"