|
| 1 | +# coding=utf-8 |
| 2 | +""" |
| 3 | +@project: MaxKB |
| 4 | +@desc: Tencent Tokenhub ASR sync_transcribe credential (model: wand-asr-v1 / hy-asr-3.0-preview) |
| 5 | +""" |
| 6 | + |
| 7 | +from django.utils.translation import gettext_lazy as _, gettext |
| 8 | + |
| 9 | +from common import forms |
| 10 | +from common.exception.app_exception import AppApiException |
| 11 | +from common.forms import BaseForm, TooltipLabel |
| 12 | +from common.utils.logger import maxkb_logger |
| 13 | +from models_provider.base_model_provider import BaseModelCredential, ValidCode |
| 14 | + |
| 15 | + |
| 16 | +class TencentTokenhubSTTModelParams(BaseForm): |
| 17 | + source = forms.SingleSelect( |
| 18 | + label=TooltipLabel(_("Recognition language"), _("Recognition language: zh / en, auto detected when omitted")), |
| 19 | + text_field="value", |
| 20 | + value_field="value", |
| 21 | + option_list=[ |
| 22 | + {"value": "", "label": _("Auto detect")}, |
| 23 | + {"value": "zh", "label": _("Chinese")}, |
| 24 | + {"value": "en", "label": _("English")}, |
| 25 | + ], |
| 26 | + required=False, |
| 27 | + default_value="", |
| 28 | + ) |
| 29 | + voice_encode_format = forms.SingleSelect( |
| 30 | + label=TooltipLabel(_("Audio encoding"), _("pcm / wav / ogg / mp3, auto detected when omitted")), |
| 31 | + text_field="value", |
| 32 | + value_field="value", |
| 33 | + option_list=[ |
| 34 | + {"value": "", "label": _("Auto")}, |
| 35 | + {"value": "pcm", "label": "pcm"}, |
| 36 | + {"value": "wav", "label": "wav"}, |
| 37 | + {"value": "ogg", "label": "ogg"}, |
| 38 | + {"value": "mp3", "label": "mp3"}, |
| 39 | + ], |
| 40 | + required=False, |
| 41 | + default_value="", |
| 42 | + ) |
| 43 | + |
| 44 | + |
| 45 | +class TencentTokenhubSTTModelCredential(BaseForm, BaseModelCredential): |
| 46 | + def is_valid(self, model_type, model_name, model_credential, model_params, provider, raise_exception=False): |
| 47 | + model_type_list = provider.get_model_type_list() |
| 48 | + if not any(list(filter(lambda mt: mt.get("value") == model_type, model_type_list))): |
| 49 | + raise AppApiException( |
| 50 | + ValidCode.valid_error.value, |
| 51 | + gettext("{model_type} Model type is not supported").format(model_type=model_type), |
| 52 | + ) |
| 53 | + if "api_key" not in model_credential: |
| 54 | + if raise_exception: |
| 55 | + raise AppApiException(ValidCode.valid_error.value, gettext("{key} is required").format(key="api_key")) |
| 56 | + return False |
| 57 | + try: |
| 58 | + model = provider.get_model(model_type, model_name, model_credential, **model_params) |
| 59 | + model.check_auth() |
| 60 | + except Exception as e: |
| 61 | + maxkb_logger.error(f"Exception: {e}", exc_info=True) |
| 62 | + if raise_exception: |
| 63 | + raise AppApiException( |
| 64 | + ValidCode.valid_error.value, |
| 65 | + gettext("Verification failed, please check whether the parameters are correct: {error}").format( |
| 66 | + error=str(e) |
| 67 | + ), |
| 68 | + ) |
| 69 | + return False |
| 70 | + return True |
| 71 | + |
| 72 | + def encryption_dict(self, model): |
| 73 | + return {**model, "api_key": super().encryption(model.get("api_key", ""))} |
| 74 | + |
| 75 | + base_url = forms.TextInputField( |
| 76 | + label=TooltipLabel(_("API URL"), _("Tokenhub sync_transcribe endpoint")), |
| 77 | + required=False, |
| 78 | + default_value="https://tokenhub.tencentmaas.com/v1/wand/asrproxy/sync_transcribe", |
| 79 | + ) |
| 80 | + api_key = forms.PasswordInputField(_("API Key"), required=True) |
| 81 | + |
| 82 | + def get_model_params_setting_form(self, model_name): |
| 83 | + return TencentTokenhubSTTModelParams() |
0 commit comments