|
|
import requests |
|
|
from config import GROQ_API_KEY, GROQ_STT_MODEL |
|
|
|
|
|
def speech_to_text(audio_file: str) -> str: |
|
|
""" |
|
|
Convert audio file to text using Groq's Whisper API (English only) |
|
|
""" |
|
|
if not GROQ_API_KEY: |
|
|
raise RuntimeError("GROQ_API_KEY is not set in config") |
|
|
|
|
|
url = "https://api.groq.com/openai/v1/audio/transcriptions" |
|
|
|
|
|
headers = { |
|
|
"Authorization": f"Bearer {GROQ_API_KEY}" |
|
|
} |
|
|
|
|
|
with open(audio_file, "rb") as audio_data: |
|
|
files = { |
|
|
"file": (audio_file, audio_data, "audio/wav") |
|
|
} |
|
|
data = { |
|
|
"model": GROQ_STT_MODEL, |
|
|
"language": "en", |
|
|
"temperature": 0, |
|
|
"response_format": "json" |
|
|
} |
|
|
|
|
|
try: |
|
|
response = requests.post(url, headers=headers, files=files, data=data, timeout=30) |
|
|
response.raise_for_status() |
|
|
|
|
|
result = response.json() |
|
|
return result.get("text", "") |
|
|
|
|
|
except requests.exceptions.RequestException as e: |
|
|
raise Exception(f"Groq STT API error: {str(e)}") |
|
|
except Exception as e: |
|
|
raise Exception(f"Unexpected error in speech_to_text: {str(e)}") |