Téléverser les fichiers vers "/"
autres fichiers
This commit is contained in:
52
tts_server.py
Normal file
52
tts_server.py
Normal file
@ -0,0 +1,52 @@
|
||||
import os
|
||||
import subprocess
|
||||
import uuid
|
||||
from flask import Flask, request, send_file, jsonify
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# CONFIGURATION
|
||||
PIPER_MODEL = "/workspace/voice.onnx"
|
||||
OUTPUT_DIR = "/workspace/temp_audio"
|
||||
|
||||
# Créer le dossier temporaire s'il n'existe pas
|
||||
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
||||
|
||||
@app.route('/v1/audio/speech', methods=['POST'])
|
||||
def text_to_speech():
|
||||
data = request.json
|
||||
text = data.get("input")
|
||||
|
||||
if not text:
|
||||
return jsonify({"error": "No input text provided"}), 400
|
||||
|
||||
# Générer un nom de fichier unique
|
||||
file_id = str(uuid.uuid4())
|
||||
output_file = os.path.join(OUTPUT_DIR, f"{file_id}.wav")
|
||||
|
||||
try:
|
||||
# Commande Piper : lit le texte via stdin et écrit dans un fichier
|
||||
# On utilise echo pour envoyer le texte à Piper
|
||||
command = f'echo "{text}" | piper --model {PIPER_MODEL} --output_file {output_file}'
|
||||
|
||||
# Exécution de la commande
|
||||
subprocess.run(command, shell=True, check=True)
|
||||
|
||||
# Envoyer le fichier généré à Open WebUI
|
||||
return send_file(output_file, mimetype="audio/wav")
|
||||
|
||||
except subprocess.CalledProcessError as e:
|
||||
return jsonify({"error": f"Piper failed: {str(e)}"}), 500
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@app.route('/v1/models', methods=['GET'])
|
||||
def list_models():
|
||||
# Nécessaire pour que certaines interfaces valident la connexion
|
||||
return jsonify({
|
||||
"data": [{"id": "voice.onnx", "object": "model", "owned_by": "piper"}]
|
||||
})
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Le serveur écoute sur toutes les interfaces sur le port 8000
|
||||
app.run(host='0.0.0.0', port=8000)
|
||||
Reference in New Issue
Block a user