from __future__ import annotations from pathlib import Path from typing import Any class WhisperWorker: """ Langlebiger Whisper-Worker. Das Modell wird genau einmal geladen. """ def __init__(self, settings): self.settings = settings self.model = None def start(self): from faster_whisper import WhisperModel self.model = WhisperModel( self.settings.whisper_model, device=self.settings.whisper_device, compute_type=self.settings.whisper_compute_type, ) def transcribe( self, audio: str | Path, ) -> dict[str, Any]: if self.model is None: self.start() segments, info = self.model.transcribe( str(audio), language=self.settings.whisper_language, vad_filter=True, ) result_segments = [] for segment in segments: text = segment.text.strip() if not text: continue result_segments.append( { "start": segment.start, "end": segment.end, "text": text, } ) text = " ".join( item["text"] for item in result_segments ) return { "language": info.language, "language_probability": info.language_probability, "text": text, "segments": result_segments, }