fix(settings): speech model follow-ups from QA (#836)

* fix(settings): speech model follow-ups from #834

Keep the Unused downloads expander in sync with search, recommend Faster
Whisper .en weights for English, parse nvidia-smi MiB VRAM, stop simple
mode from clobbering Faster Whisper/Parakeet, and ceil RAM so ~7.4 GiB
counts as 8.

* fix(settings): keep FW .en picker ids and test unused search

Represent Faster Whisper English catalog variants in the Settings size
combo so tray-saved small.en is not rejected and overwritten. Add
behavioral unused-downloads search coverage for match/nonmatch/clear.
This commit is contained in:
Jatin K Malik
2026-09-29 01:06:08 -07:00
committed by GitHub
parent 06f049ac76
commit 9646011e77
10 changed files with 744 additions and 25 deletions
+33
View File
@@ -60,6 +60,7 @@ def _dialog_stub(language="pl", multi=False, priority=BALANCED, recommended="sma
dialog.simple_second_language_combo.get_active_id.return_value = second
dialog.simple_priority_combo.get_active_id.return_value = priority
dialog._get_recommended_whispercpp_model_for_language.return_value = (recommended, "reason")
dialog._get_selected_engine.return_value = "whisper_cpp"
# The language resolution is the code under test's own helper, not a mock.
dialog._simple_decoding_language.side_effect = (
lambda: _sd().SettingsDialog._simple_decoding_language(dialog)
@@ -688,6 +689,38 @@ def test_a_plain_weight_is_preferred_over_a_quantized_one(settings_dialog, dialo
assert dialog_class._on_disk_stand_in(Mock(), "base.en", "base", "en-us") == "base"
@pytest.mark.parametrize("engine", ["faster_whisper", "parakeet"])
def test_simple_choice_leaves_faster_whisper_and_parakeet_alone(
settings_dialog, dialog_class, engine
):
"""Editing a simple question must not yank Advanced off Faster Whisper or Parakeet."""
dialog = _dialog_stub(language="en-us", multi=False, priority=BALANCED, recommended="small")
dialog._get_selected_engine.return_value = engine
dialog_class._apply_simple_choice(dialog)
dialog.engine_combo.set_active_id.assert_not_called()
dialog._set_combo_active_id_or_first.assert_called_once_with(dialog.language_combo, "en-us")
assert dialog.language == "en-us"
dialog.model_combo.set_active_id.assert_not_called()
dialog.model_variant_combo.set_active_id.assert_not_called()
@pytest.mark.parametrize("engine", ["vosk", "remote_api", "whisper", "unknown"])
def test_simple_choice_steers_incompatible_engines_to_whisper_cpp(
settings_dialog, dialog_class, engine
):
dialog = _dialog_stub(language="pl", multi=False, priority=BALANCED, recommended="small")
dialog._get_selected_engine.return_value = engine
dialog_class._apply_simple_choice(dialog)
dialog.engine_combo.set_active_id.assert_called_once_with("whisper_cpp")
dialog._set_combo_active_id_or_first.assert_called_once_with(dialog.language_combo, "pl")
dialog.model_combo.set_active_id.assert_called_once_with("small")
dialog.model_variant_combo.set_active_id.assert_called_once_with("small")
def test_simple_mode_consults_the_disk_before_settling_on_a_variant(settings_dialog, dialog_class):
dialog = _dialog_stub(language="en-us", multi=False, priority=BALANCED, recommended="small")
dialog._on_disk_stand_in.side_effect = lambda variant, size, language: "small"