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)}")