from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponse from pydantic import BaseModel from gtts import gTTS import os class AudioRequest(BaseModel): request_id: str text: str language: str app = FastAPI( title="Stupid TTS API", description="A simple API to generate TTS audio using Google's gTTS", version="1.0.0" ) @app.get("/") async def read_root(): return {"message": "Welcome to the Stupid TTS API! Use POST /generate_audio to create audio."} @app.post("/generate_audio") async def generate_audio(audio_request: AudioRequest): if not audio_request.request_id or not audio_request.text or not audio_request.language: raise HTTPException(status_code=400, detail="All fields (request_id, text, language) are required") try: # Dùng /tmp thay vì thư mục audio output_file = f"/tmp/{audio_request.request_id}.mp3" # Không cần tạo thư mục vì /tmp đã tồn tại trong container tts = gTTS(text=audio_request.text, lang=audio_request.language, slow=False) tts.save(output_file) return FileResponse(output_file, media_type="audio/mpeg", filename=f"{audio_request.request_id}.mp3") except Exception as e: raise HTTPException(status_code=500, detail=f"Error generating audio: {str(e)}")