fix: optimizar caché de traducción con hashes SHA256 y normalización de texto para estabilidad en producción

This commit is contained in:
2026-03-06 22:11:29 -06:00
parent ad0e80b15c
commit 6599dfcc23
4 changed files with 148 additions and 58 deletions

View File

@@ -11,10 +11,14 @@ from pydantic import BaseModel
from passlib.hash import pbkdf2_sha256 as hasher
from botdiscord.config import load_config, get_web_config, get_libretranslate_url, get_db_type
load_config() # Cargamos configuración inmediatamente
from botdiscord.database import (
get_ui_translation, save_ui_translation,
get_admins, get_admin_by_username, add_admin, delete_admin
init_db, get_ui_translation, save_ui_translation,
get_admins, get_admin_by_username, add_admin, delete_admin,
_normalize_text
)
init_db() # Aseguramos que las tablas existan antes de que FastAPI atienda peticiones
from botdiscord.translate import translate_text
app = FastAPI(title="Panel de Configuración - Bots de Traducción")
@@ -23,23 +27,36 @@ SCRIPT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
templates = Jinja2Templates(directory=os.path.join(SCRIPT_DIR, "panel", "templates"))
# Caché de memoria para traducciones UI (evita 50 queries SQL por página)
_ui_memory_cache = {}
# Filtro de traducción para Jinja2
def translate_filter(text, lang="es"):
if lang == "es" or not text:
return text
# Buscamos en caché de la base de datos (acceso rápido)
from botdiscord.database import get_ui_translation, save_ui_translation
# NORMALIZACIÓN inmediata
text = _normalize_text(text)
if not text: return ""
# 1. Buscamos en caché de MEMORIA (RAM) - Ultra rápido
cache_key = f"{lang}:{text}"
if cache_key in _ui_memory_cache:
return _ui_memory_cache[cache_key]
# 2. Buscamos en caché de la base de datos (acceso rápido)
cached = get_ui_translation(text, lang)
if cached:
_ui_memory_cache[cache_key] = cached
return cached
# Si no está en caché, traducimos de forma síncrona para la UI
# 3. Si no está en ningún caché, traducimos de forma síncrona
from botdiscord.translate import translate_text_sync
translated = translate_text_sync(text, lang)
if translated and translated != text:
save_ui_translation(text, lang, translated)
_ui_memory_cache[cache_key] = translated
return translated