This commit is contained in:
Saifeddine ALOUI 2024-09-13 01:19:22 +02:00
parent 70a3d081c3
commit 30c11e3f4b
5 changed files with 72 additions and 5 deletions

View File

@ -164,7 +164,7 @@ openai_tts_voice: "alloy"
elevenlabs_tts_key: "" elevenlabs_tts_key: ""
elevenlabs_tts_model_id: "eleven_monolingual_v2" elevenlabs_tts_model_id: "eleven_turbo_v2_5"
elevenlabs_tts_voice_stability: 0.5 elevenlabs_tts_voice_stability: 0.5
elevenlabs_tts_voice_boost: 0.5 elevenlabs_tts_voice_boost: 0.5
elevenlabs_tts_voice_id: EXAVITQu4vr4xnSDxMaL elevenlabs_tts_voice_id: EXAVITQu4vr4xnSDxMaL

View File

@ -28,6 +28,11 @@ import re
import subprocess import subprocess
from typing import Optional from typing import Optional
from fastapi import FastAPI, Query, HTTPException
from fastapi.responses import FileResponse, StreamingResponse
from pydantic import BaseModel
import io
def validate_file_path(path): def validate_file_path(path):
try: try:
sanitized_path = sanitize_path(path, allow_absolute_path=False) sanitized_path = sanitize_path(path, allow_absolute_path=False)
@ -47,7 +52,11 @@ from utilities.execution_engines.graphviz_execution_engine import execute_graphv
from utilities.execution_engines.svg_execution_engine import execute_svg from utilities.execution_engines.svg_execution_engine import execute_svg
import os
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse
import tempfile
import shutil
# ----------------------- Defining router and main class ------------------------------ # ----------------------- Defining router and main class ------------------------------
@ -513,3 +522,61 @@ def stop_recording(data:Identification):
else: else:
return "" return ""
@router.post("/transcribe")
async def transcribe_audio(file: UploadFile = File(...)):
with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as temp_file:
# Copy the contents of the uploaded file to the temporary file
shutil.copyfileobj(file.file, temp_file)
temp_file_path = temp_file.name
try:
if hasattr(lollmsElfServer, 'stt') and lollmsElfServer.stt:
text = lollmsElfServer.stt.transcribe(temp_file_path)
return JSONResponse(content={"transcription": text})
else:
return JSONResponse(content={"error": "STT service not available"}, status_code=503)
finally:
# Clean up the temporary file
os.unlink(temp_file_path)
class TTSRequest(BaseModel):
text: str
speaker: str = None
language: str = "en"
@router.post("/tts/file")
async def text_to_speech_file(request: TTSRequest):
try:
file_path = lollmsElfServer.tts.tts_file(
text=request.text,
file_name_or_path="output.wav",
speaker=request.speaker,
language=request.language
)
return FileResponse(file_path, media_type="audio/wav", filename="speech.wav")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/tts/stream")
async def text_to_speech_stream(request: TTSRequest):
try:
audio_data = lollmsElfServer.tts.tts_audio(
text=request.text,
speaker=request.speaker,
language=request.language
)
return StreamingResponse(io.BytesIO(audio_data), media_type="audio/wav")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.get("/tts/voices")
async def get_available_voices():
try:
voices = lollmsElfServer.tts.get_voices()
return JSONResponse(content={"voices": voices})
except Exception as e:
return JSONResponse(content={"error": str(e)}, status_code=500)

@ -1 +1 @@
Subproject commit a1c63689f79b61ed644a37b124adbed1e6faee69 Subproject commit fe562543b4e6811f98bc42e58aa06c46dd441c46

@ -1 +1 @@
Subproject commit 6323528d9626cbef69f40614f0b5ac773be1ef28 Subproject commit 358a64a034c7651a8b551cf20bd9bb2059f8835a

@ -1 +1 @@
Subproject commit 128a7e360ba8fb876465a297b2e266fc8e0d1104 Subproject commit 299134098a0b43b920e2194d43fb70f936c2dd62