From 562710fe33a71425cd6e14c132056f8bbf757da8 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 30 Aug 2025 20:05:53 -0400 Subject: [PATCH 1/5] join the url instead of concatenating a string in case the user adds a slash to the end of their configured url. --- backend/open_webui/routers/audio.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index cc5711569d..e1b08fa619 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -4,7 +4,7 @@ import logging import os import uuid from functools import lru_cache -from pathlib import Path + from pydub import AudioSegment from pydub.silence import split_on_silence from concurrent.futures import ThreadPoolExecutor @@ -15,7 +15,7 @@ import aiohttp import aiofiles import requests import mimetypes -from urllib.parse import quote +from urllib.parse import urljoin from fastapi import ( Depends, @@ -308,6 +308,7 @@ def load_speech_pipeline(request): @router.post("/speech") async def speech(request: Request, user=Depends(get_verified_user)): body = await request.body() + tts_model = request.app.state.config.TTS_MODEL name = hashlib.sha256( body + str(request.app.state.config.TTS_ENGINE).encode("utf-8") @@ -337,8 +338,9 @@ async def speech(request: Request, user=Depends(get_verified_user)): async with aiohttp.ClientSession( timeout=timeout, trust_env=True ) as session: + r = await session.post( - url=f"{request.app.state.config.TTS_OPENAI_API_BASE_URL}/audio/speech", + url=urljoin(request.app.state.config.TTS_OPENAI_API_BASE_URL, "/audio/speech"), json=payload, headers={ "Content-Type": "application/json", @@ -466,8 +468,7 @@ async def speech(request: Request, user=Depends(get_verified_user)): timeout=timeout, trust_env=True ) as session: async with session.post( - (base_url or f"https://{region}.tts.speech.microsoft.com") - + "/cognitiveservices/v1", + urljoin(base_url or f"https://{region}.tts.speech.microsoft.com", "/cognitiveservices/v1"), headers={ "Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY, "Content-Type": "application/ssml+xml", From c62f30e22c50efa9846fe1fdd6ed1e11e8deebb7 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 30 Aug 2025 20:12:46 -0400 Subject: [PATCH 2/5] remove whitespace --- backend/open_webui/routers/audio.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index e1b08fa619..2f6703e1c9 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -4,7 +4,6 @@ import logging import os import uuid from functools import lru_cache - from pydub import AudioSegment from pydub.silence import split_on_silence from concurrent.futures import ThreadPoolExecutor @@ -338,7 +337,6 @@ async def speech(request: Request, user=Depends(get_verified_user)): async with aiohttp.ClientSession( timeout=timeout, trust_env=True ) as session: - r = await session.post( url=urljoin(request.app.state.config.TTS_OPENAI_API_BASE_URL, "/audio/speech"), json=payload, From 08b958cfc9607d1b76777b67ba1d92924127d07c Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 30 Aug 2025 20:29:16 -0400 Subject: [PATCH 3/5] re-add used var --- backend/open_webui/routers/audio.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index 2f6703e1c9..b94f5dc60a 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -3,6 +3,7 @@ import json import logging import os import uuid + from functools import lru_cache from pydub import AudioSegment from pydub.silence import split_on_silence @@ -14,7 +15,7 @@ import aiohttp import aiofiles import requests import mimetypes -from urllib.parse import urljoin +from urllib.parse import urljoin, quote from fastapi import ( Depends, From 20b6902b9f0cc42dc0d81b654287ea873a7be724 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 30 Aug 2025 20:30:34 -0400 Subject: [PATCH 4/5] whitespace --- backend/open_webui/routers/audio.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index b94f5dc60a..7ee6fce3df 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -3,7 +3,6 @@ import json import logging import os import uuid - from functools import lru_cache from pydub import AudioSegment from pydub.silence import split_on_silence From 39ae9167ee3b79e7f68fe4563c02570cb9e77f29 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 30 Aug 2025 20:31:13 -0400 Subject: [PATCH 5/5] removed test code. --- backend/open_webui/routers/audio.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/open_webui/routers/audio.py b/backend/open_webui/routers/audio.py index 7ee6fce3df..f71be198af 100644 --- a/backend/open_webui/routers/audio.py +++ b/backend/open_webui/routers/audio.py @@ -307,7 +307,6 @@ def load_speech_pipeline(request): @router.post("/speech") async def speech(request: Request, user=Depends(get_verified_user)): body = await request.body() - tts_model = request.app.state.config.TTS_MODEL name = hashlib.sha256( body + str(request.app.state.config.TTS_ENGINE).encode("utf-8")