join the url instead of concatenating a string in case the user adds a slash to the end of their configured url.

This commit is contained in:
Adam 2025-08-30 20:05:53 -04:00
parent 3111d1bf61
commit 562710fe33

View file

@ -4,7 +4,7 @@ import logging
import os import os
import uuid import uuid
from functools import lru_cache from functools import lru_cache
from pathlib import Path
from pydub import AudioSegment from pydub import AudioSegment
from pydub.silence import split_on_silence from pydub.silence import split_on_silence
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
@ -15,7 +15,7 @@ import aiohttp
import aiofiles import aiofiles
import requests import requests
import mimetypes import mimetypes
from urllib.parse import quote from urllib.parse import urljoin
from fastapi import ( from fastapi import (
Depends, Depends,
@ -308,6 +308,7 @@ def load_speech_pipeline(request):
@router.post("/speech") @router.post("/speech")
async def speech(request: Request, user=Depends(get_verified_user)): async def speech(request: Request, user=Depends(get_verified_user)):
body = await request.body() body = await request.body()
tts_model = request.app.state.config.TTS_MODEL
name = hashlib.sha256( name = hashlib.sha256(
body body
+ str(request.app.state.config.TTS_ENGINE).encode("utf-8") + 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( async with aiohttp.ClientSession(
timeout=timeout, trust_env=True timeout=timeout, trust_env=True
) as session: ) as session:
r = await session.post( 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, json=payload,
headers={ headers={
"Content-Type": "application/json", "Content-Type": "application/json",
@ -466,8 +468,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
timeout=timeout, trust_env=True timeout=timeout, trust_env=True
) as session: ) as session:
async with session.post( async with session.post(
(base_url or f"https://{region}.tts.speech.microsoft.com") urljoin(base_url or f"https://{region}.tts.speech.microsoft.com", "/cognitiveservices/v1"),
+ "/cognitiveservices/v1",
headers={ headers={
"Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY, "Ocp-Apim-Subscription-Key": request.app.state.config.TTS_API_KEY,
"Content-Type": "application/ssml+xml", "Content-Type": "application/ssml+xml",