Spaces:
Running
Running
zach
commited on
Commit
·
681c05f
1
Parent(s):
136ff40
Update ElevenLabs integration to randmonly pick a voice from a predefined list of top voices
Browse files
src/integrations/elevenlabs_api.py
CHANGED
|
@@ -21,6 +21,7 @@ Functions:
|
|
| 21 |
# Standard Library Imports
|
| 22 |
from dataclasses import dataclass
|
| 23 |
import logging
|
|
|
|
| 24 |
from typing import Optional
|
| 25 |
# Third-Party Library Imports
|
| 26 |
from elevenlabs import ElevenLabs
|
|
@@ -34,7 +35,8 @@ from src.utils import validate_env_var, truncate_text
|
|
| 34 |
class ElevenLabsConfig:
|
| 35 |
"""Immutable configuration for interacting with the ElevenLabs TTS API."""
|
| 36 |
api_key: str = validate_env_var("ELEVENLABS_API_KEY")
|
| 37 |
-
voice_id: str = "pNInz6obpgDQGcFmaJgB" # Adam (popular ElevenLabs pre-made voice)
|
|
|
|
| 38 |
model_id: str = "eleven_multilingual_v2" # ElevenLab's most emotionally expressive model
|
| 39 |
output_format: str = "mp3_44100_128" # Output format of the generated audio.
|
| 40 |
|
|
@@ -42,12 +44,25 @@ class ElevenLabsConfig:
|
|
| 42 |
# Validate that required attributes are set
|
| 43 |
if not self.api_key:
|
| 44 |
raise ValueError("ElevenLabs API key is not set.")
|
| 45 |
-
if not self.voice_id:
|
| 46 |
-
raise ValueError("ElevenLabs Voice ID is not set.")
|
| 47 |
if not self.model_id:
|
| 48 |
raise ValueError("ElevenLabs Model ID is not set.")
|
| 49 |
if not self.output_format:
|
| 50 |
raise ValueError("ElevenLabs Output Format is not set.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
|
| 52 |
@property
|
| 53 |
def client(self) -> ElevenLabs:
|
|
@@ -96,7 +111,7 @@ def text_to_speech_with_elevenlabs(text: str) -> bytes:
|
|
| 96 |
# Generate audio using the ElevenLabs SDK
|
| 97 |
audio_iterator = elevenlabs_config.client.text_to_speech.convert(
|
| 98 |
text=text,
|
| 99 |
-
voice_id=elevenlabs_config.
|
| 100 |
model_id=elevenlabs_config.model_id,
|
| 101 |
output_format=elevenlabs_config.output_format,
|
| 102 |
)
|
|
|
|
| 21 |
# Standard Library Imports
|
| 22 |
from dataclasses import dataclass
|
| 23 |
import logging
|
| 24 |
+
import random
|
| 25 |
from typing import Optional
|
| 26 |
# Third-Party Library Imports
|
| 27 |
from elevenlabs import ElevenLabs
|
|
|
|
| 35 |
class ElevenLabsConfig:
|
| 36 |
"""Immutable configuration for interacting with the ElevenLabs TTS API."""
|
| 37 |
api_key: str = validate_env_var("ELEVENLABS_API_KEY")
|
| 38 |
+
# voice_id: str = "pNInz6obpgDQGcFmaJgB" # Adam (popular ElevenLabs pre-made voice)
|
| 39 |
+
top_voices: list[str] = None # Predefined top default voices
|
| 40 |
model_id: str = "eleven_multilingual_v2" # ElevenLab's most emotionally expressive model
|
| 41 |
output_format: str = "mp3_44100_128" # Output format of the generated audio.
|
| 42 |
|
|
|
|
| 44 |
# Validate that required attributes are set
|
| 45 |
if not self.api_key:
|
| 46 |
raise ValueError("ElevenLabs API key is not set.")
|
|
|
|
|
|
|
| 47 |
if not self.model_id:
|
| 48 |
raise ValueError("ElevenLabs Model ID is not set.")
|
| 49 |
if not self.output_format:
|
| 50 |
raise ValueError("ElevenLabs Output Format is not set.")
|
| 51 |
+
if not self.top_voices:
|
| 52 |
+
# Predefined top default voice IDs
|
| 53 |
+
object.__setattr__(self, "top_voices", [
|
| 54 |
+
"pNInz6obpgDQGcFmaJgB", # Adam
|
| 55 |
+
"ErXwobaYiN019PkySvjV", # Antoni
|
| 56 |
+
"21m00Tcm4TlvDq8ikWAM", # Rachel
|
| 57 |
+
"txTPZhQpfI89VbqtG6v7", # Matilda
|
| 58 |
+
])
|
| 59 |
+
|
| 60 |
+
@property
|
| 61 |
+
def random_voice_id(self) -> str:
|
| 62 |
+
"""
|
| 63 |
+
Randomly selects a voice ID from the top default voices, ensuring different voices across calls.
|
| 64 |
+
"""
|
| 65 |
+
return random.choice(self.top_voices)
|
| 66 |
|
| 67 |
@property
|
| 68 |
def client(self) -> ElevenLabs:
|
|
|
|
| 111 |
# Generate audio using the ElevenLabs SDK
|
| 112 |
audio_iterator = elevenlabs_config.client.text_to_speech.convert(
|
| 113 |
text=text,
|
| 114 |
+
voice_id=elevenlabs_config.random_voice_id, # Randomly chosen voice ID
|
| 115 |
model_id=elevenlabs_config.model_id,
|
| 116 |
output_format=elevenlabs_config.output_format,
|
| 117 |
)
|