mirror of
https://github.com/ijaric/voice_assistant.git
synced 2025-05-24 22:43:26 +00:00
feat: [#49] Working handler
This commit is contained in:
parent
6abd748e45
commit
952456d540
|
@ -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")
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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())
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user