fix: optimizar caché de traducción con hashes SHA256 y normalización de texto para estabilidad en producción
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user