File size: 850 Bytes
815b978
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c44df3b
 
 
 
815b978
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from typing import Annotated

from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import Response

from app.models.speech import SynthesizeRequest
from app.security.jwt_auth import verify_jwt

router = APIRouter()


@router.post("")
async def synthesize_endpoint(
    request: Request,
    payload: SynthesizeRequest,
    _: Annotated[dict, Depends(verify_jwt)],
) -> Response:
    tts_client = request.app.state.tts_client
    if not tts_client.is_configured:
        raise HTTPException(
            status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
            detail="TTS service is not configured.",
        )

    audio_bytes = await tts_client.synthesize(
        payload.text.strip(),
        voice=payload.voice.strip().lower(),
    )
    return Response(content=audio_bytes, media_type="audio/wav")