from pathlib import Path from typing import Any from ...scanner.modelos import SegmentoDeTranscricao class ProviderDeTranscricaoLocal: """Provider local usando faster-whisper, sem transmitir mídia.""" def __init__(self, modelo: str, dispositivo: str = "cpu", tipo_de_calculo: str = "int8", idioma: str = "pt") -> None: from faster_whisper import WhisperModel self.modelo = WhisperModel(modelo, device=dispositivo, compute_type=tipo_de_calculo) self.idioma = idioma def transcrever(self, clipe: Any) -> list[SegmentoDeTranscricao]: arquivo = Path(clipe.arquivo) if not arquivo.is_file(): raise FileNotFoundError(f"Arquivo de áudio não encontrado: {arquivo}") segmentos, _ = self.modelo.transcribe(str(arquivo), language=self.idioma, vad_filter=True) return [SegmentoDeTranscricao(float(s.start), float(s.end), s.text.strip()) for s in segmentos]