from typing import Optional from faster_whisper import WhisperModel _model: Optional[WhisperModel] = None def get_model(model_size: str = "medium", device: str = "cpu", compute_type: str = "int8") -> WhisperModel: global _model if _model is None: _model = WhisperModel(model_size, device=device, compute_type=compute_type) return _model def transcribe(audio_path: str, model_size: str = "medium", device: str = "cpu", compute_type: str = "int8", language: str = "ru") -> tuple[list[dict], str]: model = get_model(model_size, device, compute_type) segments, info = model.transcribe(audio_path, language=language, beam_size=5, vad_filter=True) result = [] full_text_parts = [] for seg in segments: result.append({ "start": round(seg.start, 2), "end": round(seg.end, 2), "text": seg.text.strip(), }) full_text_parts.append(seg.text.strip()) full_text = " ".join(full_text_parts) return result, full_text