fix(vosk): add missing Italian and English-India entries to medium/large model tables (#551)

Fixes #550.

Root cause: VOSK_MODEL_INFO["medium"]["languages"] and
VOSK_MODEL_INFO["large"]["languages"] in vosk_model_info.py were missing
entries for "it" (Italian) and "en-in" (English-India), even though both
languages are present in the "small" table and VOSK actually publishes
bigger models for them (vosk-model-it-0.22, vosk-model-en-in-0.5 at
alphacephei.com/vosk/models).

When a user selected Italian + the medium (or large) VOSK model,
_init_vosk() built vosk_model_map["medium"] = None (via .get() on a
missing key), and _get_vosk_model_path() then called
os.path.join(MODELS_DIR, None), crashing with:

    join() argument must be str, bytes, or os.PathLike object, not 'NoneType'

before any download was even attempted. This matches the exact debug log
in the issue and the settings-dialog download flow the reporter exercised.

Fix:
- Add the missing "it"/"en-in" entries to the medium/large tables so all
  10 supported languages now resolve consistently across all three sizes.
- Add a guard in _get_vosk_model_path() that raises a clear ValueError
  ("No VOSK '<size>' model available for language '<lang>'...") instead of
  crashing deep inside os.path.join, so any future data gap fails loudly
  and helpfully rather than with a cryptic TypeError.
This commit is contained in:
Anay Garodia
2026-07-19 22:53:07 -07:00
committed by GitHub
parent 830d24577a
commit fbcd28d577
3 changed files with 68 additions and 0 deletions
@@ -1824,6 +1824,13 @@ class SpeechRecognitionManager:
"""Get the path to the VOSK model based on the selected size and language."""
model_name = self.vosk_model_map.get(self.model_size, self.vosk_model_map["small"])
if not model_name:
vosk_language = "en-us" if self.language == "auto" else self.language
raise ValueError(
f"No VOSK '{self.model_size}' model available for language '{vosk_language}'. "
"Try the 'small' model size or a different language."
)
# First, check user's local models directory
user_model_path = os.path.join(MODELS_DIR, model_name)
if os.path.exists(user_model_path):
+4
View File
@@ -78,8 +78,10 @@ VOSK_MODEL_INFO = {
"desc": "Balanced accuracy/speed",
"languages": {
"en-us": "vosk-model-en-us-0.22",
"en-in": "vosk-model-en-in-0.5",
"fr": "vosk-model-fr-0.22",
"de": "vosk-model-de-0.21",
"it": "vosk-model-it-0.22",
"ru": "vosk-model-ru-0.22",
"hi": "vosk-model-hi-0.22",
"es": "vosk-model-es-0.42",
@@ -92,8 +94,10 @@ VOSK_MODEL_INFO = {
"desc": "Same as medium (best available)",
"languages": {
"en-us": "vosk-model-en-us-0.22",
"en-in": "vosk-model-en-in-0.5",
"fr": "vosk-model-fr-0.22",
"de": "vosk-model-de-0.21",
"it": "vosk-model-it-0.22",
"ru": "vosk-model-ru-0.22",
"hi": "vosk-model-hi-0.22",
"es": "vosk-model-es-0.42",