try: from whisperlivekit.whisper_streaming_custom.whisper_online import backend_factory, warmup_asr except ImportError: from .whisper_streaming_custom.whisper_online import backend_factory, warmup_asr from argparse import Namespace class TranscriptionEngine: _instance = None _initialized = False def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self, **kwargs): if TranscriptionEngine._initialized: return defaults = { "host": "localhost", "port": 8000, "warmup_file": None, "confidence_validation": False, "diarization": False, "min_chunk_size": 0.5, "model": "tiny", "model_cache_dir": None, "model_dir": None, "lan": "auto", "task": "transcribe", "backend": "faster-whisper", "vac": False, "vac_chunk_size": 0.04, "buffer_trimming": "segment", "buffer_trimming_sec": 15, "log_level": "DEBUG", "ssl_certfile": None, "ssl_keyfile": None, "transcription": True, "vad": True, } config_dict = {**defaults, **kwargs} if 'no_transcription' in kwargs: config_dict['transcription'] = not kwargs['no_transcription'] if 'no_vad' in kwargs: config_dict['vad'] = not kwargs['no_vad'] config_dict.pop('no_transcription', None) config_dict.pop('no_vad', None) if 'language' in kwargs: config_dict['lan'] = kwargs['language'] config_dict.pop('language', None) self.args = Namespace(**config_dict) self.asr = None self.tokenizer = None self.diarization = None if self.args.transcription: self.asr, self.tokenizer = backend_factory(self.args) warmup_asr(self.asr, self.args.warmup_file) if self.args.diarization: from whisperlivekit.diarization.diarization_online import DiartDiarization self.diarization = DiartDiarization() TranscriptionEngine._initialized = True