Spaces:
Runtime error
Runtime error
| import os | |
| from huggingface_hub import HfApi, HfFolder | |
| from TTS.train import train # API oficial de entrenamiento en v0.22+ | |
| import json | |
| # === Configuración === | |
| HF_TOKEN = os.environ.get("HF_TOKEN") # definir en los Secrets del Space | |
| if not HF_TOKEN: | |
| raise RuntimeError("Falta HF_TOKEN en los Secrets del Space.") | |
| HF_REPO_ID = "sob111/xttsv2-es-finetuned" # tu repo de destino | |
| CONFIG_PATH = os.path.join(os.getcwd(), "config.json") | |
| OUTPUT_PATH = "/tmp/output_model" | |
| # Dataset local | |
| DATA_DIR = "/tmp/voxpopuli_es_500" | |
| META_TRAIN = os.path.join(DATA_DIR, "metadata.json") | |
| AUDIO_DIR = os.path.join(DATA_DIR, "wav_data") | |
| # === Validar dataset === | |
| print("=== Comprobando dataset local ===") | |
| #if not os.path.isfile(META_TRAIN): | |
| # raise FileNotFoundError(f"No se encontró {META_TRAIN}.") | |
| #if not os.path.isdir(AUDIO_DIR): | |
| # raise FileNotFoundError(f"No se encontró el directorio {AUDIO_DIR}.") | |
| num_lines = sum(1 for _ in open(META_TRAIN, "r", encoding="utf-8")) | |
| print(f"metadata.json: {num_lines} líneas") | |
| # === Guardar token de Hugging Face === | |
| print("=== Guardando token de Hugging Face ===") | |
| HfFolder.save_token(HF_TOKEN) | |
| # === Entrenamiento XTTSv2 === | |
| print("=== Iniciando entrenamiento XTTSv2 ===") | |
| try: | |
| train(config_path=CONFIG_PATH) | |
| except Exception as e: | |
| raise RuntimeError("❌ El entrenamiento XTTSv2 falló. Revisa los logs anteriores.") from e | |
| print("=== Entrenamiento finalizado ===") | |
| # === Subir modelo fine-tune a Hugging Face === | |
| print("=== Subiendo modelo fine-tune a Hugging Face ===") | |
| api = HfApi() | |
| api.create_repo(repo_id=HF_REPO_ID, exist_ok=True, token=HF_TOKEN) | |
| api.upload_folder( | |
| folder_path=OUTPUT_PATH, | |
| repo_id=HF_REPO_ID, | |
| repo_type="model", | |
| token=HF_TOKEN | |
| ) | |
| print(f"✅ Fine-tuning completado y subido a {HF_REPO_ID}") | |