37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
import requests
|
|
import json
|
|
|
|
class Action:
|
|
def __init__(self):
|
|
# L'URL interne au réseau Docker défini dans ton compose
|
|
self.api_url = "http://audio-api:7860/api/predict"
|
|
|
|
async def action(self, body: dict, __user__: dict = None, __event_emitter__=None):
|
|
# 1. Récupérer le dernier message (le prompt)
|
|
last_message = body['messages'][-1]['content']
|
|
|
|
await __event_emitter__({
|
|
"type": "status",
|
|
"data": {"description": "🎵 Génération de la musique en cours...", "done": False}
|
|
})
|
|
|
|
try:
|
|
# 2. Appel au container Audio-API (Gradio/FastAPI)
|
|
response = requests.post(self.api_url, json={
|
|
"data": [last_message, 10] # Prompt + Durée
|
|
}, timeout=120)
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
file_url = result['data'][0] # Chemin du .wav généré
|
|
|
|
await __event_emitter__({
|
|
"type": "status",
|
|
"data": {"description": "✅ Musique prête !", "done": True}
|
|
})
|
|
|
|
# 3. Envoyer le lien du fichier à l'étudiant
|
|
return f"Voici votre création : {file_url}"
|
|
|
|
except Exception as e:
|
|
return f"❌ Erreur de connexion au studio audio : {str(e)}" |