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

feat: [#49] Working handler

This commit is contained in:
Григорич 2023-10-14 02:19:55 +03:00
parent 6abd748e45
commit 952456d540
4 changed files with 23 additions and 25 deletions

View File

@ -13,7 +13,7 @@ COPY poetry.toml /opt/app/poetry.toml
WORKDIR /opt/app WORKDIR /opt/app
RUN pip install poetry \ RUN pip install poetry \
&& poetry install --no-dev && poetry install --no-dev
COPY bin /opt/app/bin COPY bin /opt/app/bin

View File

@ -1,6 +1,8 @@
import fastapi import io
import fastapi
import http
import lib.models.tts.voice as models_tts_voice
import lib.stt.services as stt_services import lib.stt.services as stt_services
@ -16,13 +18,17 @@ class VoiceResponseHandler:
self.voice_response, self.voice_response,
methods=["POST"], methods=["POST"],
summary="Ответ голосового помощника", summary="Ответ голосового помощника",
description="Ответ голосового помощника", description="Маршрут возвращает потоковый ответ аудио",
) )
async def voice_response( async def voice_response(
self, self,
voice: bytes = fastapi.File(...), voice: bytes = fastapi.File(...),
voice_model: models_tts_voice.VoiceModelProvidersEnum = fastapi.Depends(), ) -> fastapi.responses.StreamingResponse:
) -> dict[str, str]:
voice_text: str = await self.stt.recognize(voice) voice_text: str = await self.stt.recognize(voice)
return {"text": voice_text} if voice_text == "":
raise fastapi.HTTPException(status_code=http.HTTPStatus.BAD_REQUEST, detail="Speech recognition failed")
# TODO: Добавить обработку текста через клиента openai
# TODO: Добавить синтез речи через клиента tts
# TODO: Заменить заглушку на реальный ответ
return fastapi.responses.StreamingResponse(io.BytesIO(voice), media_type="audio/ogg")

View File

@ -86,6 +86,8 @@ class Application:
logger.info("Initializing handlers") logger.info("Initializing handlers")
liveness_probe_handler = api_v1_handlers.basic_router liveness_probe_handler = api_v1_handlers.basic_router
# TODO: объявить сервисы tts и openai и добавить их в voice_response_handler
voice_response_handler = api_v1_handlers.VoiceResponseHandler(stt=stt_service).router voice_response_handler = api_v1_handlers.VoiceResponseHandler(stt=stt_service).router
logger.info("Creating application") logger.info("Creating application")

View File

@ -1,24 +1,14 @@
import pydantic
import pydantic_settings import pydantic_settings
import lib.app.split_settings as app_split_settings import lib.app.split_settings as app_split_settings
class Settings(pydantic_settings.BaseSettings): class Settings(pydantic_settings.BaseSettings):
api: app_split_settings.ApiSettings = pydantic.Field(default_factory=lambda: app_split_settings.ApiSettings()) api: app_split_settings.ApiSettings = app_split_settings.ApiSettings()
app: app_split_settings.AppSettings = pydantic.Field(default_factory=lambda: app_split_settings.AppSettings()) app: app_split_settings.AppSettings = app_split_settings.AppSettings()
postgres: app_split_settings.PostgresSettings = pydantic.Field( postgres: app_split_settings.PostgresSettings = app_split_settings.PostgresSettings()
default_factory=lambda: app_split_settings.PostgresSettings() logger: app_split_settings.LoggingSettings = app_split_settings.LoggingSettings()
) openai: app_split_settings.OpenaiSettings = app_split_settings.OpenaiSettings()
logger: app_split_settings.LoggingSettings = pydantic.Field( project: app_split_settings.ProjectSettings = app_split_settings.ProjectSettings()
default_factory=lambda: app_split_settings.LoggingSettings() proxy: app_split_settings.ProxySettings = app_split_settings.ProxySettings()
) voice: app_split_settings.VoiceSettings = app_split_settings.VoiceSettings()
openai: app_split_settings.OpenaiSettings = pydantic.Field(
default_factory=lambda: app_split_settings.OpenaiSettings()
)
project: app_split_settings.ProjectSettings = pydantic.Field(
default_factory=lambda: app_split_settings.ProjectSettings()
)
proxy: app_split_settings.ProxySettings = pydantic.Field(default_factory=lambda: app_split_settings.ProxySettings())
voice: app_split_settings.VoiceSettings = pydantic.Field(default_factory=lambda: app_split_settings.VoiceSettings())