[IMPROVED] Calcular tarifa de bash como 0.4 veces la tarifa de devops obtenida

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-03-12 12:35:21 -05:00
parent 466aff762b
commit e5f9004fb4
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26

View file

@ -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)
# 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)
# Variable para almacenar la tarifa
rate = None
# 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}")
# Si la API está disponible, intentar consultarla
if api_available:
logger.info(f"Consultando tarifa para {programmer_type}")
try:
# Consultar a Perplexity
rate = query_perplexity(prompt, model)
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)
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}")
# 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