From e5f9004fb4c72e88905e21d84990281331ff455e Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Wed, 12 Mar 2025 12:35:21 -0500 Subject: [PATCH] [IMPROVED] Calcular tarifa de bash como 0.4 veces la tarifa de devops obtenida MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/rate_update.py | 127 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 101 insertions(+), 26 deletions(-) diff --git a/bin/rate_update.py b/bin/rate_update.py index 6816e5f..f8a3d94 100755 --- a/bin/rate_update.py +++ b/bin/rate_update.py @@ -446,6 +446,75 @@ def update_rate_files(): programmer_types = get_programmer_types() logger.info(f"Procesando {len(programmer_types)} tipos de programadores.") + # Procesamos primero devops si bash está pendiente + devops_rate = None + need_devops_for_bash = 'bash' in programmer_types and not (RATES_DIR / "bash.rate").exists() + need_process_devops = 'devops' in programmer_types and not (RATES_DIR / "devops.rate").exists() + + # Si necesitamos la tarifa de devops para bash, la procesamos primero + if need_devops_for_bash and need_process_devops: + logger.info("Procesando tarifa de devops primero para calcular bash") + + # Obtener tarifa para devops + devops_rate_file = RATES_DIR / "devops.rate" + prompt = generate_prompt_base('devops') + + # Variable para almacenar la tarifa + if api_available: + logger.info("Consultando tarifa para devops") + + try: + # Consultar a Perplexity + devops_rate = query_perplexity(prompt, model) + + if devops_rate is not None: + logger.info(f"Tarifa obtenida correctamente para devops: {devops_rate:.2f}") + else: + logger.error("No se pudo obtener la tarifa para devops") + except Exception as e: + logger.error(f"Error al consultar tarifa para devops: {e}") + time.sleep(2) + + # Si la API falló o no está disponible, usar valor predeterminado + if devops_rate is None: + logger.warning("Usando valor predeterminado para devops") + devops_rate = get_default_rate('devops') + logger.info(f"Valor predeterminado para devops: {devops_rate:.2f}") + + # Limitar a tarifas menores de 200 USD/hora + max_rate = 200.00 + if devops_rate > max_rate: + logger.warning(f"Ajustando tarifa {devops_rate:.2f} al máximo permitido de {max_rate}") + devops_rate = max_rate + + # Guardar el resultado en el archivo + with open(devops_rate_file, 'w', encoding='utf-8') as f: + f.write(f"{devops_rate:.2f}") + + # Mostrar el resultado en la consola + result_message = f"Tarifa para devops: {devops_rate:.2f} USD/hora" + logger.info(f"Creado archivo {devops_rate_file} con valor: {devops_rate:.2f}") + show_result(result_message) + + # Actualizamos la lista de tipos pendientes + if 'devops' in programmer_types: + programmer_types.remove('devops') + + # Pequeña pausa para no sobrecargar la API + time.sleep(1) + + # Si ya existe un archivo para devops pero necesitamos la tarifa para bash + elif need_devops_for_bash and not need_process_devops: + # Leer la tarifa guardada de devops + devops_rate_file = RATES_DIR / "devops.rate" + try: + with open(devops_rate_file, 'r', encoding='utf-8') as f: + devops_rate = float(f.read().strip()) + logger.info(f"Tarifa leída para devops: {devops_rate:.2f}") + except (FileNotFoundError, ValueError) as e: + logger.error(f"Error al leer tarifa de devops: {e}") + devops_rate = get_default_rate('devops') + # Procesar cada tipo de programador for programmer_type in programmer_types: # Comprobar si ya existe el archivo para este tipo de programador @@ -456,34 +525,40 @@ def update_rate_files(): logger.info(f"El archivo {rate_file} ya existe. Saltando.") continue - # Generar el prompt para la consulta - prompt = generate_prompt_base(programmer_type) - - # Variable para almacenar la tarifa - rate = None - - # Si la API está disponible, intentar consultarla - if api_available: - logger.info(f"Consultando tarifa para {programmer_type}") + # Caso especial para bash: calculamos como 0.4 veces la tarifa de devops + if programmer_type == 'bash' and devops_rate is not None: + logger.info(f"Calculando tarifa para bash como 0.4 * {devops_rate:.2f}") + rate = 0.4 * devops_rate + logger.info(f"Tarifa calculada para bash: {rate:.2f}") + else: + # Para otros tipos, procedemos como antes + prompt = generate_prompt_base(programmer_type) - try: - # Consultar a Perplexity - rate = query_perplexity(prompt, model) + # Variable para almacenar la tarifa + rate = None + + # Si la API está disponible, intentar consultarla + if api_available: + logger.info(f"Consultando tarifa para {programmer_type}") - if rate is not None: - logger.info(f"Tarifa obtenida correctamente: {rate:.2f}") - else: - logger.error(f"No se pudo obtener la tarifa para {programmer_type}") - except Exception as e: - logger.error(f"Error al consultar tarifa para {programmer_type}: {e}") - # Pequeña pausa tras un error para evitar sobrecargar la API - time.sleep(2) - - # Si la API falló o no está disponible, usar valor predeterminado - if rate is None: - logger.warning(f"Usando valor predeterminado para {programmer_type}") - rate = get_default_rate(programmer_type) - logger.info(f"Valor predeterminado: {rate:.2f}") + try: + # Consultar a Perplexity + rate = query_perplexity(prompt, model) + + if rate is not None: + logger.info(f"Tarifa obtenida correctamente: {rate:.2f}") + else: + logger.error(f"No se pudo obtener la tarifa para {programmer_type}") + except Exception as e: + logger.error(f"Error al consultar tarifa para {programmer_type}: {e}") + # Pequeña pausa tras un error para evitar sobrecargar la API + time.sleep(2) + + # Si la API falló o no está disponible, usar valor predeterminado + if rate is None: + logger.warning(f"Usando valor predeterminado para {programmer_type}") + rate = get_default_rate(programmer_type) + logger.info(f"Valor predeterminado: {rate:.2f}") # Limitar a tarifas menores de 200 USD/hora max_rate = 200.00