Spaces:
Runtime error
Runtime error
File size: 6,863 Bytes
f7f1518 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
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() |