"""faster-whisper large-v3 transcription with VAD.""" from functools import lru_cache import torch from faster_whisper import WhisperModel WHISPER_MODEL = "large-v3" @lru_cache(maxsize=1) def get_whisper_model(): device = "cuda" if torch.cuda.is_available() else "cpu" compute_type = "float16" if device == "cuda" else "int8" return WhisperModel(WHISPER_MODEL, device=device, compute_type=compute_type) def transcribe(audio_path, language=None): """Transcribe audio. Returns list of {start, end, text}.""" model = get_whisper_model() segs, _info = model.transcribe( audio_path, language=language, beam_size=5, vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), ) return [{"start": s.start, "end": s.end, "text": s.text.strip()} for s in segs]