Spaces:
Runtime error
Runtime error
import customtkinter as ctk | |
import yaml | |
import threading | |
import google.generativeai as genai | |
from huggingface_utils import HuggingFaceUtils | |
class ConfigTab: | |
def __init__(self, parent_tab, config): | |
self.config = config.get('api_keys', {}) | |
# Frame principal | |
self.frame = ctk.CTkFrame(parent_tab) | |
self.frame.pack(fill="both", expand=True, padx=10, pady=10) | |
# Título | |
config_title = ctk.CTkLabel( | |
self.frame, | |
text="Configuración de APIs", | |
font=("Arial", 16, "bold") | |
) | |
config_title.pack(pady=10) | |
# Frame para API de HuggingFace | |
hf_frame = ctk.CTkFrame(self.frame) | |
hf_frame.pack(fill="x", padx=10, pady=5) | |
hf_label = ctk.CTkLabel(hf_frame, text="🤗 HuggingFace API Token:") | |
hf_label.pack(side="left", padx=5) | |
self.hf_token_entry = ctk.CTkEntry( | |
hf_frame, | |
width=300, | |
show="•" | |
) | |
self.hf_token_entry.pack(side="left", padx=5) | |
self.hf_token_entry.insert(0, self.config.get('HUGGINGFACE_TOKEN', '')) | |
# Frame para API de Google | |
google_frame = ctk.CTkFrame(self.frame) | |
google_frame.pack(fill="x", padx=10, pady=5) | |
google_label = ctk.CTkLabel(google_frame, text="🔑 Google API Key:") | |
google_label.pack(side="left", padx=5) | |
self.google_key_entry = ctk.CTkEntry( | |
google_frame, | |
width=300, | |
show="•" | |
) | |
self.google_key_entry.pack(side="left", padx=5) | |
self.google_key_entry.insert(0, self.config.get('GOOGLE_API_KEY', '')) | |
# Frame para ElevenLabs | |
eleven_frame = ctk.CTkFrame(self.frame) | |
eleven_frame.pack(fill="x", padx=10, pady=5) | |
eleven_label = ctk.CTkLabel(eleven_frame, text="🎙️ ElevenLabs API Key:") | |
eleven_label.pack(side="left", padx=5) | |
self.eleven_key_entry = ctk.CTkEntry( | |
eleven_frame, | |
width=300, | |
show="•" | |
) | |
self.eleven_key_entry.pack(side="left", padx=5) | |
self.eleven_key_entry.insert(0, self.config.get('ELEVENLABS_API_KEY', '')) | |
# Frame para botones | |
button_frame = ctk.CTkFrame(self.frame) | |
button_frame.pack(pady=20) | |
# Botón para mostrar/ocultar tokens | |
self.show_tokens_button = ctk.CTkButton( | |
button_frame, | |
text="👁️ Mostrar Tokens", | |
command=self.toggle_token_visibility, | |
width=120 | |
) | |
self.show_tokens_button.pack(side="left", padx=5) | |
# Botón para guardar | |
save_button = ctk.CTkButton( | |
button_frame, | |
text="💾 Guardar", | |
command=self.save_config, | |
width=120 | |
) | |
save_button.pack(side="left", padx=5) | |
# Botón para probar APIs | |
test_button = ctk.CTkButton( | |
button_frame, | |
text="🔄 Probar APIs", | |
command=self.test_apis, | |
width=120 | |
) | |
test_button.pack(side="left", padx=5) | |
def load_config(self): | |
"""Cargar configuración desde YAML""" | |
try: | |
with open('config.yaml', 'r') as file: | |
return yaml.safe_load(file) | |
except FileNotFoundError: | |
return {'api_keys': {'HUGGINGFACE_TOKEN': '', 'GOOGLE_API_KEY': '', 'ELEVENLABS_API_KEY': ''}} | |
def toggle_token_visibility(self): | |
"""Alternar visibilidad de tokens""" | |
if self.hf_token_entry.cget('show') == '•': | |
self.hf_token_entry.configure(show="") | |
self.google_key_entry.configure(show="") | |
self.eleven_key_entry.configure(show="") | |
self.show_tokens_button.configure(text="🔒 Ocultar Tokens") | |
else: | |
self.hf_token_entry.configure(show="•") | |
self.google_key_entry.configure(show="•") | |
self.eleven_key_entry.configure(show="•") | |
self.show_tokens_button.configure(text="👁️ Mostrar Tokens") | |
def save_config(self): | |
"""Guardar configuración en YAML""" | |
try: | |
with open('config.yaml', 'r') as file: | |
current_config = yaml.safe_load(file) or {} | |
# Actualizar solo las claves de API | |
current_config['api_keys'] = { | |
'HUGGINGFACE_TOKEN': self.hf_token_entry.get(), | |
'GOOGLE_API_KEY': self.google_key_entry.get(), | |
'ELEVENLABS_API_KEY': self.eleven_key_entry.get() | |
} | |
with open('config.yaml', 'w') as file: | |
yaml.dump(current_config, file) | |
self.show_message("✅ Configuración guardada correctamente") | |
return True | |
except Exception as e: | |
self.show_message(f"❌ Error guardando configuración: {e}") | |
return False | |
def test_apis(self): | |
"""Probar conexión con las APIs""" | |
def test_in_thread(): | |
try: | |
# Probar HuggingFace | |
huggingface = HuggingFaceUtils(token=self.hf_token_entry.get()) | |
hf_response = huggingface.generate_response("Test", max_length=10) | |
hf_ok = "✅" if hf_response else "❌" | |
# Probar Gemini | |
try: | |
genai.configure(api_key=self.google_key_entry.get()) | |
model = genai.GenerativeModel('gemini-pro') | |
gemini_response = model.generate_content("Test") | |
gemini_ok = "✅" if gemini_response else "❌" | |
except Exception: | |
gemini_ok = "❌" | |
# Probar ElevenLabs | |
try: | |
elevenlabs = ElevenLabsUtils(api_key=self.eleven_key_entry.get()) | |
elevenlabs_response = elevenlabs.generate_response("Test") | |
elevenlabs_ok = "✅" if elevenlabs_response else "❌" | |
except Exception: | |
elevenlabs_ok = "❌" | |
self.show_message( | |
f"HuggingFace: {hf_ok}\n" | |
f"Google Gemini: {gemini_ok}\n" | |
f"ElevenLabs: {elevenlabs_ok}" | |
) | |
except Exception as e: | |
self.show_message(f"❌ Error probando APIs: {e}") | |
threading.Thread(target=test_in_thread, daemon=True).start() | |
def show_message(self, message): | |
"""Mostrar mensaje en ventana emergente""" | |
dialog = ctk.CTkInputDialog( | |
text=message, | |
title="Mensaje", | |
button_text="OK" | |
) | |
dialog.get_input() |