1
0
mirror of https://github.com/ijaric/voice_assistant.git synced 2025-05-24 14:33:26 +00:00

feat: [#56] add handler

This commit is contained in:
ksieuk 2023-10-15 07:16:43 +03:00
parent 71387f5e8c
commit 1a622c3cf0
3 changed files with 74 additions and 3 deletions

View File

@ -1,7 +1,9 @@
from .health import basic_router from .health import basic_router
from .tts import *
from .voice_responce_handler import VoiceResponseHandler from .voice_responce_handler import VoiceResponseHandler
__all__ = [ __all__ = [
"TTSHandler",
"VoiceResponseHandler", "VoiceResponseHandler",
"basic_router", "basic_router",
] ]

View File

@ -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}

View File

@ -107,15 +107,15 @@ class Application:
# Services # Services
logger.info("Initializing 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={ repositories={
models.VoiceModelProvidersEnum.YANDEX: tts_yandex_repository, models.VoiceModelProvidersEnum.YANDEX: tts_yandex_repository,
models.VoiceModelProvidersEnum.ELEVEN_LABS: tts_eleven_labs_repository, models.VoiceModelProvidersEnum.ELEVEN_LABS: tts_eleven_labs_repository,
}, },
) )
# Handlers # Handlers
logger.info("Initializing handlers") logger.info("Initializing handlers")
@ -127,6 +127,8 @@ class Application:
# tts=tts_service, # TODO # tts=tts_service, # TODO
).router ).router
tts_handler = api_v1_handlers.TTSHandler(tts=tts_service).router
logger.info("Creating application") logger.info("Creating application")
fastapi_app = fastapi.FastAPI( fastapi_app = fastapi.FastAPI(
@ -140,6 +142,7 @@ class Application:
# Routes # Routes
fastapi_app.include_router(liveness_probe_handler, prefix="/api/v1/health", tags=["health"]) 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(voice_response_handler, prefix="/api/v1/voice", tags=["voice"])
fastapi_app.include_router(tts_handler, prefix="/api/v1/tts", tags=["tts"])
application = Application( application = Application(
settings=settings, settings=settings,