From 1a622c3cf0b1adf21f031e57602561cd7fc274ee Mon Sep 17 00:00:00 2001 From: ksieuk Date: Sun, 15 Oct 2023 07:16:43 +0300 Subject: [PATCH] feat: [#56] add handler --- src/assistant/lib/api/v1/handlers/__init__.py | 2 + src/assistant/lib/api/v1/handlers/tts.py | 66 +++++++++++++++++++ src/assistant/lib/app/app.py | 9 ++- 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 src/assistant/lib/api/v1/handlers/tts.py diff --git a/src/assistant/lib/api/v1/handlers/__init__.py b/src/assistant/lib/api/v1/handlers/__init__.py index 00d7189..b5f1da4 100644 --- a/src/assistant/lib/api/v1/handlers/__init__.py +++ b/src/assistant/lib/api/v1/handlers/__init__.py @@ -1,7 +1,9 @@ from .health import basic_router +from .tts import * from .voice_responce_handler import VoiceResponseHandler __all__ = [ + "TTSHandler", "VoiceResponseHandler", "basic_router", ] diff --git a/src/assistant/lib/api/v1/handlers/tts.py b/src/assistant/lib/api/v1/handlers/tts.py new file mode 100644 index 0000000..87bee1b --- /dev/null +++ b/src/assistant/lib/api/v1/handlers/tts.py @@ -0,0 +1,66 @@ +import http + +import fastapi + +import lib.models as models +import lib.tts.services as tts_service + + +class TTSHandler: + def __init__( + self, + tts: tts_service.TTSService, + ): + self.tts = tts + self.router = fastapi.APIRouter() + self.router.add_api_route( + "/fields", + self.get_by_fields, + methods=["POST"], + summary="Получение моделей по полю", + description="Возвращает список моделей с указанными полями", + ) + self.router.add_api_route( + "/name", + self.get_by_name, + methods=["POST"], + summary="Получение модели по имени", + description="Позволяет получить одну модель по её имени", + ) + self.router.add_api_route( + "/", + self.get_all, + methods=["GET"], + summary="Получение всех доступных моделей", + description="Возвращает список всех доступных моделей", + ) + self.router.add_api_route( + "/languages", + self.get_languages, + methods=["GET"], + summary="Получение всех доступных языков", + description="Возвращает список всех доступных языков", + ) + + async def get_by_fields( + self, + data: models.TTSSearchVoiceRequestModel, + ) -> list[models.AVAILABLE_MODELS_TYPE]: + response = await self.tts.get_list_voice_models_by_fields(data) + return response + + async def get_by_name( + self, + model_name: str, + ) -> models.BaseVoiceModel: + response = await self.tts.get_voice_model_by_name(model_name) + if not response: + raise fastapi.HTTPException(status_code=http.HTTPStatus.BAD_REQUEST, detail="Model not found") + return response + + async def get_all(self) -> list[models.AVAILABLE_MODELS_TYPE]: + return await self.tts.get_all_models() + + @classmethod + async def get_languages(cls) -> dict[str, str]: + return {language.name: language.value for language in models.BaseLanguageCodesEnum} diff --git a/src/assistant/lib/app/app.py b/src/assistant/lib/app/app.py index 85729cf..b105cec 100644 --- a/src/assistant/lib/app/app.py +++ b/src/assistant/lib/app/app.py @@ -107,15 +107,15 @@ class Application: # Services logger.info("Initializing services") - stt_service: stt.SpeechService = stt.SpeechService(repository=stt_repository) # type: ignore + stt_service: stt.SpeechService = stt.SpeechService(repository=stt_repository) - tts_service: tts.TTSService = tts.TTSService( # type: ignore + tts_service: tts.TTSService = tts.TTSService( repositories={ models.VoiceModelProvidersEnum.YANDEX: tts_yandex_repository, models.VoiceModelProvidersEnum.ELEVEN_LABS: tts_eleven_labs_repository, }, ) - + # Handlers logger.info("Initializing handlers") @@ -127,6 +127,8 @@ class Application: # tts=tts_service, # TODO ).router + tts_handler = api_v1_handlers.TTSHandler(tts=tts_service).router + logger.info("Creating application") fastapi_app = fastapi.FastAPI( @@ -140,6 +142,7 @@ class Application: # Routes fastapi_app.include_router(liveness_probe_handler, prefix="/api/v1/health", tags=["health"]) fastapi_app.include_router(voice_response_handler, prefix="/api/v1/voice", tags=["voice"]) + fastapi_app.include_router(tts_handler, prefix="/api/v1/tts", tags=["tts"]) application = Application( settings=settings,