import logging from homeassistant.components.stt import AudioCodecs from tencentcloud.common import credential from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.asr.v20190614.asr_client import AsrClient from tencentcloud.asr.v20190614.models import SentenceRecognitionRequest, SentenceRecognitionResponse _LOGGER = logging.getLogger(__name__) SentenceRecognitionSourceTypePost = 1 SentenceRecognitionSourceTypeURL = 0 ModuleSupportLanguage = { "8k_zh": ["zh-cn"], "8k_en": ["en"], "16k_zh": ["zh-cn"], "16k_zh-PY": ["zh-cn", "en", "zh-hk"], "16k_zh_medical": ["zh-cn"], "16k_en": ["en"], "16k_yue": ["zh-hk"], "16k_ja": ["ja"], "16k_ko": ["ko"], "16k_vi": ["vi"], "16k_ms": ["ms"], "16k_id": ["id"], "16k_fil": ["fil"], "16k_th": ["th"], "16k_pt": ["pt"], "16k_tr": ["tr"], "16k_ar": ["ar"], "16k_es": ["es"], "16k_hi": ["hi"], "16k_fr": ["fr"], "16k_de": ["de"], "16k_zh_dialect": ["zh"], } DefaultModel = "16k_zh" class TencentCloudAsrAPi(object): def __init__(self, secretId, secretKey): cred = credential.Credential(secretId, secretKey) region = "" self.asrClient = AsrClient(cred, region) def SentenceRecognition( self, engSerViceType, data: str, data_len: int, filter_dirty: str, filter_modal: bool, filter_punc: bool, convert_num_mode: bool, ) -> tuple[bool, str | None]: req = SentenceRecognitionRequest() req.EngSerViceType = engSerViceType req.SourceType = SentenceRecognitionSourceTypePost req.VoiceFormat = AudioCodecs.PCM req.ProjectId = 0 req.SubServiceType = 2 req.UsrAudioKey = "" req.Data = data req.DataLen = data_len req.FilterDirty = int(filter_dirty) req.FilterModal = int(filter_modal) req.FilterPunc = int(filter_punc) req.ConvertNumMode = int(convert_num_mode) try: res: SentenceRecognitionResponse = self.asrClient.SentenceRecognition(req) return True, res.Result except TencentCloudSDKException as err: _LOGGER.error("recognition failed:%s", err.message) return False, str(err)