0notexist0 commited on
Commit
e8f826b
·
verified ·
1 Parent(s): 002e398

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -19
app.py CHANGED
@@ -2,44 +2,66 @@ import gradio as gr
2
  from huggingface_hub import InferenceClient
3
  import os
4
 
5
- # Usa os.environ.get per richiamare il Secret che hai creato senza scriverlo in chiaro
6
  API_TOKEN = os.environ.get("htoken")
7
 
8
- # Inizializza il client ufficiale
9
- client = InferenceClient(token=API_TOKEN)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- def genera_audio(testo, modello):
12
  try:
13
- if not testo.strip():
14
- return "Errore: Inserisci del testo.", None
15
-
16
- # Determina l'ID esatto del modello
17
- model_id = "suno/bark-small" if modello == "Suno Bark" else "facebook/mms-tts-ita"
18
 
19
- # Chiamata API ufficiale per l'audio text-to-speech
20
  audio_bytes = client.text_to_speech(testo, model=model_id)
21
 
22
- # Gradio gestisce i byte e crea il player audio in automatico
23
- return "Generazione completata con successo!", audio_bytes
24
 
25
  except Exception as e:
26
- return f"Errore durante l'inferenza: {str(e)}", None
 
 
 
 
 
 
 
 
 
27
 
28
  # Creazione dell'interfaccia UI
29
  with gr.Blocks(theme=gr.themes.Soft()) as interfaccia:
30
- gr.Markdown("# Generatore Audio IA (Backend Diretto)")
 
31
 
32
  with gr.Row():
33
- testo_input = gr.Textbox(label="Testo da generare", placeholder="Scrivi qui...")
34
  modello_dropdown = gr.Dropdown(
35
- choices=["Suno Bark", "Facebook MMS Ita"],
36
- value="Suno Bark",
37
- label="Scegli il Modello"
38
  )
39
 
40
  pulsante = gr.Button("Genera Audio", variant="primary")
41
 
42
- status_output = gr.Textbox(label="Stato Console")
43
  audio_output = gr.Audio(label="Player Audio", autoplay=True)
44
 
45
  # Collegamento dell'interfaccia alla logica Python
 
2
  from huggingface_hub import InferenceClient
3
  import os
4
 
5
+ # Recupera il token in modo sicuro (Se restituisce None, lo segnaleremo nell'interfaccia)
6
  API_TOKEN = os.environ.get("htoken")
7
 
8
+ # Dizionario dei migliori modelli gratuiti e Open Source disponibili per Text-to-Speech
9
+ MODELLI_DISPONIBILI = {
10
+ "Suno Bark Small (Multilingua, Espressivo ma lento)": "suno/bark-small",
11
+ "Microsoft SpeechT5 (Inglese, Veloce e stabilissimo)": "microsoft/speecht5_tts",
12
+ "Facebook MMS Italiano (Italiano, Veloce)": "facebook/mms-tts-ita",
13
+ "Facebook MMS Inglese (Inglese, Veloce)": "facebook/mms-tts-eng",
14
+ "ESPnet VITS (Inglese, Altissima qualità vocale)": "espnet/kan-bayashi_ljspeech_vits"
15
+ }
16
+
17
+ def genera_audio(testo, nome_modello):
18
+ # 1. Controllo hardware: Verifichiamo che il container abbia letto il token
19
+ if not API_TOKEN:
20
+ return "ERRORE CRITICO: Il Token è vuoto. Devi fare 'Restart this Space' nelle impostazioni per caricare il Secret 'htoken'.", None
21
+
22
+ if not testo.strip():
23
+ return "Errore: Inserisci del testo.", None
24
+
25
+ # 2. Recupera l'ID esatto del modello in base alla scelta dell'utente
26
+ model_id = MODELLI_DISPONIBILI.get(nome_modello)
27
 
 
28
  try:
29
+ # Inizializza il client ufficiale
30
+ client = InferenceClient(token=API_TOKEN)
 
 
 
31
 
32
+ # Chiamata API ufficiale per l'audio
33
  audio_bytes = client.text_to_speech(testo, model=model_id)
34
 
35
+ return f"Successo! Audio generato utilizzando il modello: {model_id}", audio_bytes
 
36
 
37
  except Exception as e:
38
+ errore_str = str(e)
39
+ messaggio_errore = f"Errore durante l'inferenza: {errore_str}\n\n"
40
+
41
+ # Analisi degli errori più comuni per aiutarti nel debug
42
+ if "401" in errore_str or "Invalid username" in errore_str:
43
+ messaggio_errore += "💡 SOLUZIONE: Il tuo Token non ha i permessi corretti o lo Space non è stato riavviato. Controlla che il token sia 'Finegrained' e fai Restart."
44
+ elif "503" in errore_str or "loading" in errore_str.lower():
45
+ messaggio_errore += "💡 SOLUZIONE: Questo specifico modello è in letargo sui server. Riprova tra 30 secondi o scegli un altro modello dal menu."
46
+
47
+ return messaggio_errore, None
48
 
49
  # Creazione dell'interfaccia UI
50
  with gr.Blocks(theme=gr.themes.Soft()) as interfaccia:
51
+ gr.Markdown("# Generatore Audio IA Multi-Modello")
52
+ gr.Markdown("Scegli tra i migliori modelli Open Source gratuiti. *Nota: i modelli inglesi hanno spesso una qualità vocale superiore su Hugging Face.*")
53
 
54
  with gr.Row():
55
+ testo_input = gr.Textbox(label="Testo da generare", placeholder="Scrivi qui il tuo prompt...", lines=3)
56
  modello_dropdown = gr.Dropdown(
57
+ choices=list(MODELLI_DISPONIBILI.keys()),
58
+ value="Suno Bark Small (Multilingua, Espressivo ma lento)",
59
+ label="Scegli il Modello IA"
60
  )
61
 
62
  pulsante = gr.Button("Genera Audio", variant="primary")
63
 
64
+ status_output = gr.Textbox(label="Stato Console", lines=4)
65
  audio_output = gr.Audio(label="Player Audio", autoplay=True)
66
 
67
  # Collegamento dell'interfaccia alla logica Python