Cache elevenlabs voice call (can take 1s)

This commit is contained in:
Craig Quiter 2024-08-16 15:10:41 -07:00
parent 094fdd8943
commit 02577f6a45

View File

@ -477,26 +477,45 @@ def get_available_voices() -> list[dict]:
{"name": "shimmer", "id": "shimmer"}, {"name": "shimmer", "id": "shimmer"},
] ]
elif app.state.config.TTS_ENGINE == "elevenlabs": elif app.state.config.TTS_ENGINE == "elevenlabs":
headers = {
"xi-api-key": app.state.config.TTS_API_KEY,
"Content-Type": "application/json",
}
try: try:
response = requests.get( ret = get_elevenlabs_voices()
"https://api.elevenlabs.io/v1/voices", headers=headers except Exception as e:
) # Avoided @lru_cache with exception
response.raise_for_status() pass
voices_data = response.json()
voices = [] return ret
for voice in voices_data.get("voices", []):
voices.append({"name": voice["name"], "id": voice["voice_id"]})
return voices
except requests.RequestException as e:
log.error(f"Error fetching voices: {str(e)}")
return []
@lru_cache
def get_elevenlabs_voices() -> dict:
"""
Note, set the following in your .env file to use Elevenlabs:
AUDIO_TTS_ENGINE=elevenlabs
AUDIO_TTS_API_KEY=sk_... # Your Elevenlabs API key
AUDIO_TTS_VOICE=EXAVITQu4vr4xnSDxMaL # From https://api.elevenlabs.io/v1/voices
AUDIO_TTS_MODEL=eleven_multilingual_v2
"""
headers = {
"xi-api-key": app.state.config.TTS_API_KEY,
"Content-Type": "application/json",
}
try:
# TODO: Add retries
response = requests.get(
"https://api.elevenlabs.io/v1/voices", headers=headers
)
response.raise_for_status()
voices_data = response.json()
voices = {}
for voice in voices_data.get("voices", []):
voices[voice["voice_id"]] = voice["name"]
except requests.RequestException as e:
# Avoid @lru_cache with exception
log.error(f"Error fetching voices: {str(e)}")
raise RuntimeError(f"Error fetching voices: {str(e)}")
return voices
@app.get("/voices") @app.get("/voices")