File size: 1,627 Bytes
587fe4f 1e7709f c45f0d6 16153ee 1e7709f a71355d c45f0d6 a71355d c45f0d6 16153ee c45f0d6 587fe4f 16153ee 587fe4f c45f0d6 587fe4f 1e7709f c45f0d6 1e7709f c45f0d6 587fe4f c45f0d6 a71355d c45f0d6 a71355d c45f0d6 a71355d c45f0d6 a71355d c45f0d6 | 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import requests
import uuid
import os
from pathlib import Path
from config import GROQ_TTS_API_KEY, GROQ_TTS_MODEL
def text_to_speech(
text: str,
voice: str = "Aaliyah-PlayAI",
fmt: str = "wav"
) -> str:
"""
Convert text to speech using Groq's TTS API (English only)
"""
if not GROQ_TTS_API_KEY:
raise RuntimeError("GROQ_TTS_API_KEY is not set in config")
if not text or not text.strip():
raise ValueError("Text cannot be empty")
url = "https://api.groq.com/openai/v1/audio/speech"
headers = {
"Authorization": f"Bearer {GROQ_TTS_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": GROQ_TTS_MODEL,
"input": text.strip(),
"voice": voice,
"response_format": fmt
}
try:
# Create temp directory for audio files
temp_dir = Path("temp_audio")
temp_dir.mkdir(exist_ok=True)
# Unique filename
output_filename = f"tts_{uuid.uuid4().hex[:8]}.{fmt}"
output_path = temp_dir / output_filename
# Call Groq API
response = requests.post(url, headers=headers, json=payload, timeout=30)
response.raise_for_status()
# Save audio file
with open(output_path, "wb") as f:
f.write(response.content)
return str(output_path)
except requests.exceptions.RequestException as e:
raise Exception(f"Groq TTS API error: {str(e)}")
except Exception as e:
raise Exception(f"Unexpected error in text_to_speech: {str(e)}") |