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

@@ -94,24 +94,29 @@ async def translate_text(text: str, target_lang: str) -> str:
return "".join(translated_segments)
def translate_text_sync(text: str, target_lang: str) -> str:
"""Versión síncrona de translate_text para usar en filtros de Jinja2."""
"""Versión síncrona de translate_text utilizando un hilo separado."""
if not text or not target_lang or target_lang == "es":
return text
try:
import nest_asyncio
nest_asyncio.apply()
except ImportError:
# Si no está instalado, no podemos usar el bridge en FastAPI
return text
try:
loop = asyncio.get_event_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return loop.run_until_complete(translate_text(text, target_lang))
import threading
result = []
def target():
# Creamos un nuevo bucle de eventos exclusivo para este hilo
new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(new_loop)
try:
res = new_loop.run_until_complete(translate_text(text, target_lang))
result.append(res)
finally:
new_loop.close()
# Ejecutamos la traducción en un hilo aparte para no interferir con el loop de FastAPI
thread = threading.Thread(target=target)
thread.start()
thread.join(timeout=15) # Esperamos máximo 15 segundos
return result[0] if result else text
def get_lang_mapping(bot_type: str = None) -> dict:
load_lang_mappings(bot_type)