chatbot-web-app / config.py
salomonsky's picture
Upload config.py with huggingface_hub
f7f1518 verified
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()