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:
@@ -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",
|
||||
]
|
||||
|
||||
14
src/assistant/lib/tts/models/protocols.py
Normal file
14
src/assistant/lib/tts/models/protocols.py
Normal 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:
|
||||
...
|
||||
@@ -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:
|
||||
...
|
||||
@@ -1,9 +0,0 @@
|
||||
import lib.models as models
|
||||
|
||||
|
||||
class TTSCreateRequestServiceModel(models.TTSCreateRequestModel):
|
||||
...
|
||||
|
||||
|
||||
class TTSCreateResponseServiceModel(models.TTSCreateResponseModel):
|
||||
...
|
||||
@@ -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
|
||||
@@ -1,9 +0,0 @@
|
||||
from .eleven_labs import *
|
||||
from .yandex import *
|
||||
|
||||
__all__ = [
|
||||
"ElevenLabsListVoiceModelsModel",
|
||||
"ElevenLabsVoiceModel",
|
||||
"YandexListVoiceModelsModel",
|
||||
"YandexVoiceModel",
|
||||
]
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user