import whisperx _asr_model = None _alignment_model = None _metadata = None def load_asr(device="cpu", model_size="medium"): global _asr_model if _asr_model is None: _asr_model = whisperx.load_model(model_size, device=device, compute_type="float32") return _asr_model def transcribe_and_align(audio_path: str, device="cpu"): model = load_asr(device=device) result = model.transcribe(audio_path, batch_size=16) global _alignment_model, _metadata if _alignment_model is None or _metadata is None: _alignment_model, _metadata = whisperx.load_align_model( language_code=result["language"], device=device ) # Pass device here as required result_aligned = whisperx.align( result["segments"], _alignment_model, _metadata, audio_path, device=device ) return result, result_aligned