From cdf620e6eedd797a01a984e510bc67761a051b14 Mon Sep 17 00:00:00 2001
From: Coleton M <root@pococraft.org>
Date: Fri, 21 Feb 2025 04:41:45 -0600
Subject: [PATCH 1/2] Update audio.py to fetch custom URL voices and models

---
 backend/open_webui/routers/audio.py | 40 ++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py
index a970366d1..a8cd3d14a 100644
--- a/backend/open_webui/routers/audio.py
+++ b/backend/open_webui/routers/audio.py
@@ -679,8 +679,21 @@ def transcription(
 
 def get_available_models(request: Request) -> list[dict]:
     available_models = []
+    """if request.app.state.config.TTS_ENGINE == "openai":
+        available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]"""
     if request.app.state.config.TTS_ENGINE == "openai":
-        available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]
+        # 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"}]
     elif request.app.state.config.TTS_ENGINE == "elevenlabs":
         try:
             response = requests.get(
@@ -710,7 +723,7 @@ async def get_models(request: Request, user=Depends(get_verified_user)):
 def get_available_voices(request) -> dict:
     """Returns {voice_id: voice_name} dict"""
     available_voices = {}
-    if request.app.state.config.TTS_ENGINE == "openai":
+    """if request.app.state.config.TTS_ENGINE == "openai":
         available_voices = {
             "alloy": "alloy",
             "echo": "echo",
@@ -718,7 +731,28 @@ def get_available_voices(request) -> dict:
             "onyx": "onyx",
             "nova": "nova",
             "shimmer": "shimmer",
-        }
+        }"""
+    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 = {
+                "alloy": "alloy",
+                "echo": "echo",
+                "fable": "fable",
+                "onyx": "onyx",
+                "nova": "nova",
+                "shimmer": "shimmer",
+            }
     elif request.app.state.config.TTS_ENGINE == "elevenlabs":
         try:
             available_voices = get_elevenlabs_voices(

From f789ad59a9e57b15e8218e7b5d36293051fbf44f Mon Sep 17 00:00:00 2001
From: Synergyst <coletonm97@gmail.com>
Date: Fri, 21 Feb 2025 04:47:46 -0600
Subject: [PATCH 2/2] Update audio.py

Removed original code that was commented out
---
 backend/open_webui/routers/audio.py | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py
index a8cd3d14a..12c9dbc6d 100644
--- a/backend/open_webui/routers/audio.py
+++ b/backend/open_webui/routers/audio.py
@@ -679,8 +679,6 @@ def transcription(
 
 def get_available_models(request: Request) -> list[dict]:
     available_models = []
-    """if request.app.state.config.TTS_ENGINE == "openai":
-        available_models = [{"id": "tts-1"}, {"id": "tts-1-hd"}]"""
     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"):
@@ -723,15 +721,6 @@ async def get_models(request: Request, user=Depends(get_verified_user)):
 def get_available_voices(request) -> dict:
     """Returns {voice_id: voice_name} dict"""
     available_voices = {}
-    """if request.app.state.config.TTS_ENGINE == "openai":
-        available_voices = {
-            "alloy": "alloy",
-            "echo": "echo",
-            "fable": "fable",
-            "onyx": "onyx",
-            "nova": "nova",
-            "shimmer": "shimmer",
-        }"""
     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"):