feat(models): support ASR model selection in web console

This commit is contained in:
zhayujie
2026-06-02 15:05:35 +08:00
parent a97eeb1fd9
commit e861d98007
7 changed files with 79 additions and 9 deletions

View File

@@ -54,6 +54,46 @@ class TestModelsHandler(unittest.TestCase):
write_file.assert_called_once_with(file_config)
refresh_voice.assert_called_once()
def test_set_asr_empty_model_keeps_existing(self):
# Switching provider with an empty model must not wipe a user's
# hand-configured voice_to_text_model.
from channel.web.web_channel import ModelsHandler
local_config = {"voice_to_text_model": "qwen3-asr-flash"}
file_config = {"voice_to_text_model": "qwen3-asr-flash"}
handler = ModelsHandler()
with patch("channel.web.web_channel.conf", return_value=local_config):
with patch.object(ModelsHandler, "_read_file_config", return_value=file_config):
with patch.object(ModelsHandler, "_write_file_config"):
with patch.object(ModelsHandler, "_refresh_voice_routing"):
result = json.loads(handler._handle_set_capability({
"capability": "asr",
"provider_id": "zhipu",
"model": "",
}))
self.assertEqual(result["status"], "success")
self.assertEqual(local_config["voice_to_text"], "zhipu")
# Existing model preserved, not overwritten with "".
self.assertEqual(local_config["voice_to_text_model"], "qwen3-asr-flash")
self.assertEqual(file_config["voice_to_text_model"], "qwen3-asr-flash")
self.assertEqual(result["model"], "qwen3-asr-flash")
def test_asr_capability_exposes_provider_models(self):
from channel.web.web_channel import ModelsHandler
cap = ModelsHandler._asr_capability({
"voice_to_text": "dashscope",
"voice_to_text_model": "qwen3-asr-flash",
})
self.assertTrue(cap["editable"])
self.assertEqual(cap["current_provider"], "dashscope")
self.assertEqual(cap["current_model"], "qwen3-asr-flash")
self.assertIn("provider_models", cap)
self.assertIn("dashscope", cap["provider_models"])
if __name__ == "__main__":
unittest.main()