重构语音能力配置与逻辑,统一音频输入输出开关并优化语音回复判断

This commit is contained in:
jxxghp
2026-04-29 18:15:34 +08:00
parent e4a7333b79
commit b7749c44fd
9 changed files with 159 additions and 76 deletions
+21 -7
View File
@@ -13,10 +13,8 @@ class VoiceHelperTest(unittest.TestCase):
def test_registered_providers_contains_openai(self):
self.assertIn("openai", VoiceHelper.get_registered_providers())
def test_get_provider_falls_back_to_global_provider(self):
with patch.object(settings, "AI_VOICE_PROVIDER", "openai"), patch.object(
settings, "AI_VOICE_STT_PROVIDER", None
):
def test_get_provider_uses_single_audio_provider_setting(self):
with patch.object(settings, "AI_VOICE_PROVIDER", "openai"):
provider = VoiceHelper.get_provider("stt")
self.assertIsInstance(provider, OpenAIVoiceProvider)
@@ -26,15 +24,29 @@ class VoiceHelperTest(unittest.TestCase):
provider.is_available_for_stt.return_value = True
provider.is_available_for_tts.return_value = False
with patch.object(VoiceHelper, "get_provider", return_value=provider):
with patch.object(
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", True
), patch.object(VoiceHelper, "get_provider", return_value=provider):
self.assertTrue(VoiceHelper.is_available("stt"))
self.assertFalse(VoiceHelper.is_available("tts"))
def test_is_available_returns_false_when_audio_switch_is_disabled(self):
provider = Mock()
provider.is_available_for_stt.return_value = True
with patch.object(
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", False
), patch.object(VoiceHelper, "get_provider", return_value=provider):
self.assertFalse(VoiceHelper.is_available("stt"))
self.assertFalse(VoiceHelper.is_available())
def test_transcribe_bytes_routes_to_stt_provider(self):
provider = Mock()
provider.transcribe_bytes.return_value = "你好"
with patch.object(VoiceHelper, "get_provider", return_value=provider):
with patch.object(
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", True
), patch.object(VoiceHelper, "get_provider", return_value=provider):
result = VoiceHelper.transcribe_bytes(b"audio")
self.assertEqual(result, "你好")
@@ -44,7 +56,9 @@ class VoiceHelperTest(unittest.TestCase):
provider = Mock()
provider.synthesize_speech.return_value = "/tmp/reply.opus"
with patch.object(VoiceHelper, "get_provider", return_value=provider):
with patch.object(
settings, "LLM_SUPPORT_AUDIO_INPUT_OUTPUT", True
), patch.object(VoiceHelper, "get_provider", return_value=provider):
result = VoiceHelper.synthesize_speech("你好")
self.assertEqual(result, "/tmp/reply.opus")