1
0
mirror of https://github.com/ijaric/voice_assistant.git synced 2025-12-17 02:56:18 +00:00

fix: [#28] review fixes

This commit is contained in:
ksieuk
2023-10-11 18:41:10 +03:00
parent 0ef28afa22
commit 48a6f4e167
18 changed files with 258 additions and 227 deletions

View File

@@ -1,17 +1,5 @@
from .repository import *
from .service import *
from .utils import *
from .voice import *
from .protocols import *
__all__ = [
"ElevenLabsListVoiceModelsModel",
"ElevenLabsVoiceModel",
"LIST_VOICE_MODELS_TYPE",
"LIST_VOICE_MODELS_TYPE",
"TTSCreateRequestServiceModel",
"TTSCreateResponseServiceModel",
"TTSRepositoryProtocol",
"VOICE_MODELS_TYPE",
"YandexListVoiceModelsModel",
"YandexVoiceModel",
]

View File

@@ -0,0 +1,14 @@
import typing
import lib.models as models
class TTSRepositoryProtocol(typing.Protocol):
def get_audio_as_bytes(self, request: models.TTSCreateRequestModel) -> models.TTSCreateResponseModel:
...
def get_voice_model_by_name(self, voice_model_name: str) -> models.BaseVoiceModel | None:
...
def get_voice_models_by_fields(self, fields: models.TTSSearchVoiceRequestModel) -> models.LIST_VOICE_MODELS_TYPE:
...

View File

@@ -1,17 +0,0 @@
import typing
import lib.models as models
import lib.tts.models.utils as tts_models_utils
class TTSRepositoryProtocol(typing.Protocol):
def get_audio_as_bytes_from_text(self, text: str) -> models.TTSCreateResponseModel:
...
def get_voice_model_by_name(self, voice_model_name: str) -> models.BaseVoiceModel | None:
...
def get_voice_models_by_fields(
self, fields: models.TTSSearchVoiceRequestModel
) -> tts_models_utils.LIST_VOICE_MODELS_TYPE:
...

View File

@@ -1,9 +0,0 @@
import lib.models as models
class TTSCreateRequestServiceModel(models.TTSCreateRequestModel):
...
class TTSCreateResponseServiceModel(models.TTSCreateResponseModel):
...

View File

@@ -1,4 +0,0 @@
import lib.tts.models.voice as tts_models_voice
VOICE_MODELS_TYPE = tts_models_voice.YandexVoiceModel | tts_models_voice.ElevenLabsVoiceModel
LIST_VOICE_MODELS_TYPE = tts_models_voice.YandexListVoiceModelsModel | tts_models_voice.ElevenLabsListVoiceModelsModel

View File

@@ -1,9 +0,0 @@
from .eleven_labs import *
from .yandex import *
__all__ = [
"ElevenLabsListVoiceModelsModel",
"ElevenLabsVoiceModel",
"YandexListVoiceModelsModel",
"YandexVoiceModel",
]

View File

@@ -1,73 +0,0 @@
import typing
import pydantic
import lib.models as models
class ElevenLabsVoiceModel(models.BaseVoiceModel):
voice_id: str
voice_name: str | None = None
languages: list[models.LANGUAGE_CODES_ENUM_TYPE]
company_name: str = "eleven labs"
class ElevenLabsListVoiceModelsModel(pydantic.BaseModel):
models: list[ElevenLabsVoiceModel] = [
ElevenLabsVoiceModel(
voice_id="eleven_multilingual_v1",
languages=[
models.ElevenLabsLanguageCodesEnum.ENGLISH,
models.ElevenLabsLanguageCodesEnum.GERMAN,
models.ElevenLabsLanguageCodesEnum.POLISH,
models.ElevenLabsLanguageCodesEnum.SPANISH,
models.ElevenLabsLanguageCodesEnum.ITALIAN,
models.ElevenLabsLanguageCodesEnum.FRENCH,
models.ElevenLabsLanguageCodesEnum.PORTUGUESE,
models.ElevenLabsLanguageCodesEnum.HINDI,
models.ElevenLabsLanguageCodesEnum.ARABIC,
],
),
ElevenLabsVoiceModel(
voice_id="eleven_multilingual_v2",
languages=[
models.ElevenLabsLanguageCodesEnum.ENGLISH,
models.ElevenLabsLanguageCodesEnum.JAPANESE,
models.ElevenLabsLanguageCodesEnum.CHINESE,
models.ElevenLabsLanguageCodesEnum.GERMAN,
models.ElevenLabsLanguageCodesEnum.HINDI,
models.ElevenLabsLanguageCodesEnum.FRENCH,
models.ElevenLabsLanguageCodesEnum.KOREAN,
models.ElevenLabsLanguageCodesEnum.PORTUGUESE,
models.ElevenLabsLanguageCodesEnum.ITALIAN,
models.ElevenLabsLanguageCodesEnum.SPANISH,
models.ElevenLabsLanguageCodesEnum.INDONESIAN,
models.ElevenLabsLanguageCodesEnum.DUTCH,
models.ElevenLabsLanguageCodesEnum.TURKISH,
models.ElevenLabsLanguageCodesEnum.FILIPINO,
models.ElevenLabsLanguageCodesEnum.POLISH,
models.ElevenLabsLanguageCodesEnum.SWEDISH,
models.ElevenLabsLanguageCodesEnum.BULGARIAN,
models.ElevenLabsLanguageCodesEnum.ROMANIAN,
models.ElevenLabsLanguageCodesEnum.ARABIC,
models.ElevenLabsLanguageCodesEnum.CZECH,
models.ElevenLabsLanguageCodesEnum.GREEK,
models.ElevenLabsLanguageCodesEnum.FINNISH,
models.ElevenLabsLanguageCodesEnum.CROATIAN,
models.ElevenLabsLanguageCodesEnum.MALAY,
models.ElevenLabsLanguageCodesEnum.SLOVAK,
models.ElevenLabsLanguageCodesEnum.DANISH,
models.ElevenLabsLanguageCodesEnum.TAMIL,
models.ElevenLabsLanguageCodesEnum.UKRAINIAN,
],
),
ElevenLabsVoiceModel(
voice_id="eleven_multilingual_v2",
languages=[models.ElevenLabsLanguageCodesEnum.ENGLISH],
),
]
@classmethod
def from_api(cls, voice_models_from_api: list[dict[str, typing.Any]]) -> typing.Self:
voice_models = [ElevenLabsVoiceModel.model_validate(voice_model) for voice_model in voice_models_from_api]
return ElevenLabsListVoiceModelsModel(models=voice_models)

View File

@@ -1,60 +0,0 @@
import typing
import pydantic
import lib.models as models
class YandexVoiceModel(models.BaseVoiceModel):
voice_id: str
voice_name: str | None = None
languages: list[models.LANGUAGE_CODES_ENUM_TYPE]
company_name: str = "yandex"
role: str | None = None
@pydantic.model_validator(mode="before")
@classmethod
def check_voice_name_exists(cls, data: typing.Any) -> typing.Any:
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.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="ermil", role="good", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="alena", role="neutral", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="alena", role="good", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="jane", role="neutral", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="jane", role="good", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="jane", role="evil", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="omazh", role="neutral", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="omazh", role="evil", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="zahar", role="neutral", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="zahar", role="good", languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="filipp", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="madirus", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="dasha", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="julia", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="lera", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="marina", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="alexander", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="kirill", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="anton", role=None, languages=[models.YandexLanguageCodesEnum.RUSSIAN]),
YandexVoiceModel(voice_id="john", role=None, languages=[models.YandexLanguageCodesEnum.ENGLISH]),
YandexVoiceModel(voice_id="amira", role=None, languages=[models.YandexLanguageCodesEnum.KAZAKH]),
YandexVoiceModel(voice_id="madi", role=None, languages=[models.YandexLanguageCodesEnum.KAZAKH]),
YandexVoiceModel(voice_id="lea", role=None, languages=[models.YandexLanguageCodesEnum.GERMAN]),
YandexVoiceModel(voice_id="naomi", role="modern", languages=[models.YandexLanguageCodesEnum.HEBREW]),
YandexVoiceModel(voice_id="naomi", role="classic", languages=[models.YandexLanguageCodesEnum.HEBREW]),
YandexVoiceModel(voice_id="nigora", role=None, languages=[models.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)