# This file is part of Gajim. # # Gajim is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Gajim is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gajim. If not, see . import typing from pathlib import Path from typing import Any from gajim.gtk.const import Setting, SettingKind, SettingType from gajim.gtk.preferences import PreferenceBox from gajim.plugins.plugins_i18n import _ try: import whisper OPENAI_WHISPER_AVAILABLE = True except ModuleNotFoundError: if typing.TYPE_CHECKING: import whisper class WhisperModel: def __init__(self): self._model_sizes = ['tiny', 'small', 'base', 'medium', 'large'] self._multilanguage = True self._config = { 'model_size': 'tiny' } def transcribe(self, audio_file: Path) -> str: model = whisper.load_model(self._config['model_size']) result = model.transcribe(audio_file) return result["text"] def _build_config(self) -> list[Setting]: whisper_model_sizes = ('tiny', 'base', 'small', 'medium', 'large') settings = [ Setting(SettingKind.COMBO, _('Language Model'), SettingType.VALUE, callback=self._on_setting, props={'combo_items': whisper_model_sizes}), Setting(SettingKind.SWITCH, _('Use Multilanguage Model'), SettingType.VALUE, self._multilanguage, callback=self._on_setting, data='use_multilanguage_model'), ] return settings def _on_setting(self, setting: Setting): pass ################################################################################ # Whisper Settings UI ################################################################################ class OpenAIWhisperGeneral(PreferenceBox): def __init__(self, *args: Any) -> None: model_sizes = { 'tiny': _('Tiny'), 'small': _('Small'), 'basic': _('Basic'), 'medium': _('Medium'), 'large': _('Large'), } settings = [ Setting(SettingKind.POPOVER, _('Language Model'), SettingType.VALUE, callback=None, props={'entries': model_sizes}, desc=_('Model Size')), ] PreferenceBox.__init__(self, settings)