Merge pull request #10501 from Synergyst/feature/openai-tts-custom-url-fix-dev

fix: Custom OpenAI-TTS URL to fetch actual voices and models
This commit is contained in:
Timothy Jaeryang Baek 2025-02-21 10:52:41 -08:00 committed by GitHub
commit b0a19a9801
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -680,6 +680,17 @@ def transcription(
def get_available_models(request: Request) -> list[dict]: def get_available_models(request: Request) -> list[dict]:
available_models = [] available_models = []
if request.app.state.config.TTS_ENGINE == "openai": if request.app.state.config.TTS_ENGINE == "openai":
# Use custom endpoint if not using the official OpenAI API URL
if not request.app.state.config.TTS_OPENAI_API_BASE_URL.startswith("https://api.openai.com"):
try:
response = requests.get(f"{request.app.state.config.TTS_OPENAI_API_BASE_URL}/audio/models")
response.raise_for_status()
data = response.json()
available_models = data.get("models", [])
except Exception as e:
log.error(f"Error fetching models from custom endpoint: {str(e)}")
available_models = []
else:
available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}] available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]
elif request.app.state.config.TTS_ENGINE == "elevenlabs": elif request.app.state.config.TTS_ENGINE == "elevenlabs":
try: try:
@ -711,6 +722,18 @@ def get_available_voices(request) -> dict:
"""Returns {voice_id: voice_name} dict""" """Returns {voice_id: voice_name} dict"""
available_voices = {} available_voices = {}
if request.app.state.config.TTS_ENGINE == "openai": if request.app.state.config.TTS_ENGINE == "openai":
# Use custom endpoint if not using the official OpenAI API URL
if not request.app.state.config.TTS_OPENAI_API_BASE_URL.startswith("https://api.openai.com"):
try:
response = requests.get(f"{request.app.state.config.TTS_OPENAI_API_BASE_URL}/audio/voices")
response.raise_for_status()
data = response.json()
voices_list = data.get("voices", [])
available_voices = {voice["id"]: voice["name"] for voice in voices_list}
except Exception as e:
log.error(f"Error fetching voices from custom endpoint: {str(e)}")
available_voices = {}
else:
available_voices = { available_voices = {
"alloy": "alloy", "alloy": "alloy",
"echo": "echo", "echo": "echo",