mirror of
https://github.com/ijaric/voice_assistant.git
synced 2025-05-24 14:33:26 +00:00
100 lines
4.9 KiB
Python
100 lines
4.9 KiB
Python
import typing
|
|
|
|
import pydantic
|
|
|
|
import lib.models.tts.voice.base as models_tts_base
|
|
import lib.models.tts.voice.languages as models_tts_languages
|
|
|
|
|
|
class YandexVoiceModel(models_tts_base.BaseVoiceModel):
|
|
voice_id: str
|
|
voice_name: str | None = None
|
|
languages: list[models_tts_languages.LANGUAGE_CODES_ENUM_TYPE]
|
|
provider: models_tts_base.VoiceModelProvidersEnum = models_tts_base.VoiceModelProvidersEnum.YANDEX
|
|
role: str | None = None
|
|
|
|
@pydantic.model_validator(mode="before")
|
|
@classmethod
|
|
def check_voice_name_exists(cls, data: typing.Any) -> typing.Any:
|
|
if not data:
|
|
return data
|
|
voice_id = data.get("voice_id")
|
|
voice_name = data.get("voice_name")
|
|
role = data.get("role")
|
|
if not voice_name and voice_id:
|
|
data["voice_name"] = f"{voice_id} {role}" if role else voice_id
|
|
return data
|
|
|
|
|
|
class YandexListVoiceModelsModel(pydantic.BaseModel):
|
|
models: list[YandexVoiceModel] = [
|
|
YandexVoiceModel(
|
|
voice_id="ermil", role="neutral", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="ermil", role="good", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="alena", role="neutral", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="alena", role="good", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="jane", role="neutral", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="jane", role="good", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="jane", role="evil", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="omazh", role="neutral", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="omazh", role="evil", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="zahar", role="neutral", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="zahar", role="good", languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="filipp", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="madirus", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(voice_id="dasha", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]),
|
|
YandexVoiceModel(voice_id="julia", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]),
|
|
YandexVoiceModel(voice_id="lera", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]),
|
|
YandexVoiceModel(
|
|
voice_id="marina", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="alexander", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="kirill", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]
|
|
),
|
|
YandexVoiceModel(voice_id="anton", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.RUSSIAN]),
|
|
YandexVoiceModel(voice_id="john", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.ENGLISH]),
|
|
YandexVoiceModel(voice_id="amira", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.KAZAKH]),
|
|
YandexVoiceModel(voice_id="madi", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.KAZAKH]),
|
|
YandexVoiceModel(voice_id="lea", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.GERMAN]),
|
|
YandexVoiceModel(
|
|
voice_id="naomi", role="modern", languages=[models_tts_languages.YandexLanguageCodesEnum.HEBREW]
|
|
),
|
|
YandexVoiceModel(
|
|
voice_id="naomi", role="classic", languages=[models_tts_languages.YandexLanguageCodesEnum.HEBREW]
|
|
),
|
|
YandexVoiceModel(voice_id="nigora", role=None, languages=[models_tts_languages.YandexLanguageCodesEnum.UZBEK]),
|
|
]
|
|
|
|
@classmethod
|
|
def from_api(cls, voice_models_from_api: list[dict[str, typing.Any]]) -> typing.Self:
|
|
voice_models = [YandexVoiceModel.model_validate(voice_model) for voice_model in voice_models_from_api]
|
|
return YandexListVoiceModelsModel(models=voice_models)
|