This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

stt: add model size selection (small/medium/large)

Allows choosing between faster small models (~40MB) and more accurate
medium (~128MB) or large (~1-2GB) models via -s/--size flag.

+50 -13
+50 -13
tools/stt/stt.py
··· 17 17 18 18 MODEL_DIR = Path(os.environ.get("XDG_DATA_HOME", Path.home() / ".local/share")) / "vosk" 19 19 20 - # Small, fast models for real-time streaming 20 + # Models organized by size: small (~40MB), medium (~128MB), large (~1-2GB) 21 21 MODELS = { 22 - "en": "vosk-model-small-en-us-0.15", 23 - "de": "vosk-model-small-de-0.15", 24 - "fr": "vosk-model-small-fr-0.22", 25 - "es": "vosk-model-small-es-0.42", 26 - "ru": "vosk-model-small-ru-0.22", 27 - "cn": "vosk-model-small-cn-0.22", 28 - "ja": "vosk-model-small-ja-0.22", 22 + "en": { 23 + "small": "vosk-model-small-en-us-0.15", 24 + "medium": "vosk-model-en-us-0.22-lgraph", 25 + "large": "vosk-model-en-us-0.22", 26 + }, 27 + "de": { 28 + "small": "vosk-model-small-de-0.15", 29 + "medium": "vosk-model-de-0.21", 30 + "large": "vosk-model-de-0.21", 31 + }, 32 + "fr": { 33 + "small": "vosk-model-small-fr-0.22", 34 + "medium": "vosk-model-fr-0.22", 35 + "large": "vosk-model-fr-0.22", 36 + }, 37 + "es": { 38 + "small": "vosk-model-small-es-0.42", 39 + "medium": "vosk-model-es-0.42", 40 + "large": "vosk-model-es-0.42", 41 + }, 42 + "ru": { 43 + "small": "vosk-model-small-ru-0.22", 44 + "medium": "vosk-model-ru-0.42", 45 + "large": "vosk-model-ru-0.42", 46 + }, 47 + "cn": { 48 + "small": "vosk-model-small-cn-0.22", 49 + "medium": "vosk-model-cn-0.22", 50 + "large": "vosk-model-cn-0.22", 51 + }, 52 + "ja": { 53 + "small": "vosk-model-small-ja-0.22", 54 + "medium": "vosk-model-ja-0.22", 55 + "large": "vosk-model-ja-0.22", 56 + }, 29 57 } 30 58 31 59 32 - def download_model(lang: str) -> Path: 60 + def download_model(lang: str, size: str = "small") -> Path: 33 61 """Download vosk model if not present.""" 34 - model_name = MODELS.get(lang) 35 - if not model_name: 62 + lang_models = MODELS.get(lang) 63 + if not lang_models: 36 64 # Fall back to English if language not available 37 65 print(f"No model for '{lang}', using English", file=sys.stderr) 38 - model_name = MODELS["en"] 66 + lang_models = MODELS["en"] 39 67 lang = "en" 68 + 69 + model_name = lang_models.get(size, lang_models["small"]) 40 70 41 71 model_path = MODEL_DIR / model_name 42 72 if model_path.exists(): ··· 129 159 help="Language: en, de, fr, es, ru, cn, ja (default: en)", 130 160 ) 131 161 parser.add_argument( 162 + "-s", 163 + "--size", 164 + default=os.environ.get("VOSK_SIZE", "small"), 165 + choices=["small", "medium", "large"], 166 + help="Model size: small (~40MB), medium (~128MB), large (~1-2GB) (default: small)", 167 + ) 168 + parser.add_argument( 132 169 "-w", 133 170 "--words", 134 171 action="store_true", ··· 139 176 # Suppress Vosk logging 140 177 SetLogLevel(-1) 141 178 142 - model_path = download_model(args.language) 179 + model_path = download_model(args.language, args.size) 143 180 model = Model(str(model_path)) 144 181 145 182 # Read WAV header