From 8fbffef047d0acc6bf59393be8f75ea2cecc2e05 Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 12 Oct 2024 14:51:41 +0200 Subject: [PATCH] Algunos cambios para adaptar a TranslationConfig --- x3_llm_auto_translate.py | 89 ++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 59 deletions(-) diff --git a/x3_llm_auto_translate.py b/x3_llm_auto_translate.py index ed927a1..561337b 100644 --- a/x3_llm_auto_translate.py +++ b/x3_llm_auto_translate.py @@ -106,13 +106,13 @@ def translate_batch_openai(texts_dict, source_lang, target_lang): return dict(zip(texts_dict.keys(), translations)) -def affinity_batch_openai(tipo_PLC, texts_dict): +def affinity_batch_openai(codigo_tipo_PLC, texts_dict): system_prompt = ( "Evaluate the semantic similarity between the following table of pairs of texts in json format on a scale from 0 to 1. " "Return the similarity scores for every row in JSON format as a list of numbers, without any additional text or formatting." ) original_list = [ - fc.compactar_celda_traducida(tipo_PLC, key) for key in texts_dict.keys() + fc.compactar_celda_traducida(codigo_tipo_PLC, key) for key in texts_dict.keys() ] re_translated_list = list(texts_dict.values()) @@ -204,6 +204,7 @@ def calcular_afinidad(tipo_PLC, texto1, texto2): def main(config: TranslationConfig): + global logger df = fc.read_dataframe_with_cleanup_retries(config.get_translate_path()) source_col = config.codigo_columna_maestra @@ -254,8 +255,7 @@ def main(config: TranslationConfig): logger.info(f"Número total de textos a traducir: {num_texts}") print(f"Número total de textos a traducir: {num_texts}") - # Traducciones - # Hacer las traducciones via LLM en batch + # Traducciones translations = {} for start_idx in range(0, num_texts, batch_size): end_idx = min(start_idx + batch_size, num_texts) @@ -263,101 +263,73 @@ def main(config: TranslationConfig): logger.info(f"Traduciendo: celdas desde {start_idx} a {end_idx}.") print(f"Traduciendo : celdas desde: {start_idx} a :{end_idx}.") - retries = 4 # Número de intentos totales (1 inicial + 1 reintento) + retries = 4 for attempt in range(retries): try: batch_translations = translate_batch_openai( batch_texts, - fc.idiomas_idiomafromcode(codigo_columna_maestra), - target_lang, + fc.idiomas_idiomafromcode(config.codigo_columna_maestra), + fc.idiomas_idiomafromcode(config.codigo_idioma_seleccionado) ) translations.update(batch_translations) - break # Si la traducción es exitosa, salimos del bucle de reintentos + break except Exception as e: - if attempt < retries - 1: # Si no es el último intento - logger.warning( - f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..." - ) - print( - f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..." - ) + if attempt < retries - 1: + logger.warning(f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...") + print(f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...") time.sleep(3) - else: # Si es el último intento - logger.error( - f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}" - ) - print( - f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}" - ) + else: + logger.error(f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}") + print(f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}") logger.info(f"Número total de traducciones recibidas: {len(translations)}") - # Traduccion inversa # Actualizar el DataFrame con las traducciones y hacemos la Traduccion inversa - for index, row in tqdm( - df.iterrows(), total=df.shape[0], desc="Procesando traducciones" - ): + for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="Procesando traducciones"): celda_clave = str(row[source_col]) if celda_clave in translations: df.at[index, target_col] = translations[celda_clave] - # Realizar la traducción de verificación con Google Translate try: google_translation = google_translate( translations[celda_clave], - fc.idiomas_shortcodefromcode(codigo_columna_maestra), + fc.idiomas_shortcodefromcode(config.codigo_columna_maestra) ) df.at[index, check_translate_col] = google_translation except Exception as e: - logger.error( - f"Error en la traducción de Google para el texto '{celda_clave}': {e}" - ) + logger.error(f"Error en la traducción de Google para el texto '{celda_clave}': {e}") df.at[index, check_translate_col] = "Error en la traducción" df.at[index, affinity_col] = 0.0 # Afinidades - # Se calculan las Afinidades affinities = {} - for start_idx in range(0, num_texts, batch_size): # num_text + for start_idx in range(0, num_texts, batch_size): end_idx = min(start_idx + batch_size, num_texts) batch_texts = dict(list(texts_to_translate.items())[start_idx:end_idx]) logger.info(f"Afinidad: celdas desde {start_idx} a {end_idx}.") print(f"Afinidad: celdas desde: {start_idx} a :{end_idx}.") - retries = 2 # Número de intentos totales (1 inicial + 1 reintento) + retries = 2 for attempt in range(retries): try: - batch_affinities = affinity_batch_openai(tipo_PLC, batch_texts) + batch_affinities = affinity_batch_openai(config.codigo_tipo_PLC, batch_texts) affinities.update(batch_affinities) - break # Si la llamada es exitosa, salimos del bucle de reintentos + break except Exception as e: - if attempt < retries - 1: # Si no es el último intento - logger.warning( - f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..." - ) - print( - f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..." - ) + if attempt < retries - 1: + logger.warning(f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...") + print(f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...") time.sleep(3) - else: # Si es el último intento - logger.error( - f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}" - ) - print( - f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}" - ) - # Intentar individualmente si falla en batch + else: + logger.error(f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}") + print(f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}") for key, value in batch_texts.items(): try: - score = calcular_afinidad(tipo_PLC, key, value) + score = calcular_afinidad(config.codigo_tipo_PLC, key, value) affinities[key] = score except Exception as ind_e: affinities[key] = "0" - logger.error( - f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}" - ) - print( - f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}" - ) + logger.error(f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}") + print(f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}") # Actualizar el DataFrame con las Afinidades for index, row in df.iterrows(): @@ -370,7 +342,6 @@ def main(config: TranslationConfig): logger.info(f"Archivo traducido guardado en: {output_path}") print(f"Archivo traducido guardado en: {output_path}") - def run(config: TranslationConfig): global logger logger = fc.configurar_logger(config.work_dir)