From ebaf36a8be00b6f5c191fd075adbf6d7cc13679d Mon Sep 17 00:00:00 2001 From: notV3NOM <123deeznuts456789@gmail.com> Date: Sat, 13 Sep 2025 20:44:24 +0530 Subject: [PATCH 1/3] Fix warmup file behavior --- whisperlivekit/core.py | 2 +- whisperlivekit/parse_args.py | 2 +- whisperlivekit/warmup.py | 65 +++++++++++++++++------------------- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/whisperlivekit/core.py b/whisperlivekit/core.py index 4791183..54a501f 100644 --- a/whisperlivekit/core.py +++ b/whisperlivekit/core.py @@ -120,7 +120,7 @@ class TranscriptionEngine: else: self.asr, self.tokenizer = backend_factory(self.args) - warmup_asr(self.asr, self.args.warmup_file) #for simulstreaming, warmup should be done in the online class not here + warmup_asr(self.asr, self.args.warmup_file) #for simulstreaming, warmup should be done in the online class not here if self.args.diarization: if self.args.diarization_backend == "diart": diff --git a/whisperlivekit/parse_args.py b/whisperlivekit/parse_args.py index 2be546e..3ef74bf 100644 --- a/whisperlivekit/parse_args.py +++ b/whisperlivekit/parse_args.py @@ -20,7 +20,7 @@ def parse_args(): help=""" The path to a speech audio wav file to warm up Whisper so that the very first chunk processing is fast. If not set, uses https://github.com/ggerganov/whisper.cpp/raw/master/samples/jfk.wav. - If False, no warmup is performed. + If empty, no warmup is performed. """, ) diff --git a/whisperlivekit/warmup.py b/whisperlivekit/warmup.py index 4c14586..369f2b3 100644 --- a/whisperlivekit/warmup.py +++ b/whisperlivekit/warmup.py @@ -6,57 +6,54 @@ logger = logging.getLogger(__name__) def load_file(warmup_file=None, timeout=5): import os import tempfile + import urllib.request import librosa - + + if warmup_file == "": + logger.info(f"Skipping warmup.") + return None + + # Download JFK sample if not already present if warmup_file is None: - # Download JFK sample if not already present jfk_url = "https://github.com/ggerganov/whisper.cpp/raw/master/samples/jfk.wav" temp_dir = tempfile.gettempdir() warmup_file = os.path.join(temp_dir, "whisper_warmup_jfk.wav") - - if not os.path.exists(warmup_file): - logger.debug(f"Downloading warmup file from {jfk_url}") - print(f"Downloading warmup file from {jfk_url}") - import time - import urllib.request - import urllib.error - import socket - - original_timeout = socket.getdefaulttimeout() - socket.setdefaulttimeout(timeout) - - start_time = time.time() + if not os.path.exists(warmup_file) or os.path.getsize(warmup_file) == 0: try: - urllib.request.urlretrieve(jfk_url, warmup_file) - logger.debug(f"Download successful in {time.time() - start_time:.2f}s") - except (urllib.error.URLError, socket.timeout) as e: - logger.warning(f"Download failed: {e}. Proceeding without warmup.") + logger.debug(f"Downloading warmup file from {jfk_url}") + with urllib.request.urlopen(jfk_url, timeout=timeout) as r, open(warmup_file, "wb") as f: + f.write(r.read()) + except Exception as e: + logger.warning(f"Warmup file download failed: {e}.") return None - finally: - socket.setdefaulttimeout(original_timeout) - elif not warmup_file: - return None - - if not warmup_file or not os.path.exists(warmup_file) or os.path.getsize(warmup_file) == 0: - logger.warning(f"Warmup file {warmup_file} invalid or missing.") + + # Validate file and load + if not os.path.exists(warmup_file) or os.path.getsize(warmup_file) == 0: + logger.warning(f"Warmup file {warmup_file} is invalid or missing.") return None - + try: - audio, sr = librosa.load(warmup_file, sr=16000) + audio, _ = librosa.load(warmup_file, sr=16000) + return audio except Exception as e: - logger.warning(f"Failed to load audio file: {e}") + logger.warning(f"Failed to load warmup file: {e}") return None - return audio def warmup_asr(asr, warmup_file=None, timeout=5): """ Warmup the ASR model by transcribing a short audio file. """ - audio = load_file(warmup_file=None, timeout=5) + audio = load_file(warmup_file=warmup_file, timeout=timeout) + if audio is None: + logger.warning("Warmup file unavailable. Skipping ASR warmup.") + return asr.transcribe(audio) - logger.info("ASR model is warmed up") + logger.info("ASR model is warmed up.") def warmup_online(online, warmup_file=None, timeout=5): - audio = load_file(warmup_file=None, timeout=5) + audio = load_file(warmup_file=warmup_file, timeout=timeout) + if audio is None: + logger.warning("Warmup file unavailable. Skipping online warmup.") + return online.warmup(audio) - logger.warning("ASR is warmed up") \ No newline at end of file + logger.info("Online processor is warmed up.") \ No newline at end of file From 5aa312e437318a65e6d73c8b13ab7c65491e846f Mon Sep 17 00:00:00 2001 From: Quentin Fuxa Date: Sat, 13 Sep 2025 20:19:19 +0100 Subject: [PATCH 2/3] simulstreaming warmup is done in whisperlivekit.simul_whisper.backend.load_model, not in warmup_online --- whisperlivekit/core.py | 3 +-- whisperlivekit/warmup.py | 10 +--------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/whisperlivekit/core.py b/whisperlivekit/core.py index 54a501f..fd290d5 100644 --- a/whisperlivekit/core.py +++ b/whisperlivekit/core.py @@ -4,7 +4,7 @@ try: except ImportError: from .whisper_streaming_custom.whisper_online import backend_factory from .whisper_streaming_custom.online_asr import OnlineASRProcessor -from whisperlivekit.warmup import warmup_asr, warmup_online +from whisperlivekit.warmup import warmup_asr from argparse import Namespace import sys @@ -155,7 +155,6 @@ def online_factory(args, asr, tokenizer, logfile=sys.stderr): asr, logfile=logfile, ) - # warmup_online(online, args.warmup_file) else: online = OnlineASRProcessor( asr, diff --git a/whisperlivekit/warmup.py b/whisperlivekit/warmup.py index 369f2b3..e660e4d 100644 --- a/whisperlivekit/warmup.py +++ b/whisperlivekit/warmup.py @@ -48,12 +48,4 @@ def warmup_asr(asr, warmup_file=None, timeout=5): logger.warning("Warmup file unavailable. Skipping ASR warmup.") return asr.transcribe(audio) - logger.info("ASR model is warmed up.") - -def warmup_online(online, warmup_file=None, timeout=5): - audio = load_file(warmup_file=warmup_file, timeout=timeout) - if audio is None: - logger.warning("Warmup file unavailable. Skipping online warmup.") - return - online.warmup(audio) - logger.info("Online processor is warmed up.") \ No newline at end of file + logger.info("ASR model is warmed up.") \ No newline at end of file From 2f6e00f512eba4aa26223d08bd7e00aa4f88df98 Mon Sep 17 00:00:00 2001 From: Quentin Fuxa Date: Mon, 15 Sep 2025 09:43:15 +0200 Subject: [PATCH 3/3] simulstreaming warmup is done in whisperlivekit.simul_whisper.backend.load_model, not in warmup_online --- whisperlivekit/core.py | 3 +-- whisperlivekit/warmup.py | 10 +--------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/whisperlivekit/core.py b/whisperlivekit/core.py index 54a501f..fd290d5 100644 --- a/whisperlivekit/core.py +++ b/whisperlivekit/core.py @@ -4,7 +4,7 @@ try: except ImportError: from .whisper_streaming_custom.whisper_online import backend_factory from .whisper_streaming_custom.online_asr import OnlineASRProcessor -from whisperlivekit.warmup import warmup_asr, warmup_online +from whisperlivekit.warmup import warmup_asr from argparse import Namespace import sys @@ -155,7 +155,6 @@ def online_factory(args, asr, tokenizer, logfile=sys.stderr): asr, logfile=logfile, ) - # warmup_online(online, args.warmup_file) else: online = OnlineASRProcessor( asr, diff --git a/whisperlivekit/warmup.py b/whisperlivekit/warmup.py index 369f2b3..e660e4d 100644 --- a/whisperlivekit/warmup.py +++ b/whisperlivekit/warmup.py @@ -48,12 +48,4 @@ def warmup_asr(asr, warmup_file=None, timeout=5): logger.warning("Warmup file unavailable. Skipping ASR warmup.") return asr.transcribe(audio) - logger.info("ASR model is warmed up.") - -def warmup_online(online, warmup_file=None, timeout=5): - audio = load_file(warmup_file=warmup_file, timeout=timeout) - if audio is None: - logger.warning("Warmup file unavailable. Skipping online warmup.") - return - online.warmup(audio) - logger.info("Online processor is warmed up.") \ No newline at end of file + logger.info("ASR model is warmed up.") \ No newline at end of file