[REFACTORED] Usar prompt de archivo rates.prompt para consultas de tarifas

- Leer el prompt desde el archivo rates.prompt en lugar de tenerlo hardcoded
- Traducir tipos de programadores a sus equivalentes en inglés
- Adaptar sistema de prompts para trabajar con textos en inglés
- Mejorar instrucciones al modelo para obtener solo valores numéricos
- Agregar manejo de errores si el archivo del prompt no existe

🤖 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:17:17 -05:00
parent 2aa0ad44d3
commit 7b01fbf6ee
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26

View file

@ -164,7 +164,7 @@ def query_perplexity(prompt, model="sonar"):
"messages": [ "messages": [
{ {
"role": "system", "role": "system",
"content": "You are a helpful assistant that provides accurate salary information for developers worldwide. Respond only with numeric values in USD with 2 decimal places." "content": "You are a helpful assistant that provides accurate salary information for developers worldwide. Respond only with numeric values in USD with 2 decimal places. Do not include any text, currency symbols, or other characters."
}, },
{ {
"role": "user", "role": "user",
@ -503,32 +503,42 @@ def update_rate_files():
def generate_prompt_base(programmer_type): def generate_prompt_base(programmer_type):
""" """
Genera un prompt para consultar la tarifa base por hora para un tipo de programador. Genera un prompt para consultar la tarifa base por hora para un tipo de programador.
Utiliza el prompt definido en el archivo rates.prompt.
""" """
# Mapa para traducir tipos de programador a términos en inglés
programmer_map = { programmer_map = {
'bash': 'programador de scripts Bash/Shell', 'bash': 'Bash/Shell',
'python': 'desarrollador Python', 'python': 'Python',
'fullstack': 'desarrollador Full Stack', 'fullstack': 'Full Stack',
'frontend': 'desarrollador Frontend', 'frontend': 'Frontend',
'backend': 'desarrollador Backend', 'backend': 'Backend',
'devops': 'ingeniero DevOps', 'devops': 'DevOps',
'mobile': 'desarrollador de aplicaciones móviles', 'mobile': 'Mobile App',
'java': 'desarrollador Java', 'java': 'Java',
'php': 'desarrollador PHP', 'php': 'PHP',
'ruby': 'desarrollador Ruby', 'ruby': 'Ruby',
'dotnet': 'desarrollador .NET', 'dotnet': '.NET',
'data': 'científico de datos', 'data': 'Data Science',
'ml': 'ingeniero de Machine Learning', 'ml': 'Machine Learning',
'cloud': 'arquitecto Cloud', 'cloud': 'Cloud',
'odoo': 'desarrollador Odoo' 'odoo': 'Odoo'
} }
programmer_description = programmer_map.get(programmer_type, f'desarrollador {programmer_type}') programmer_description = programmer_map.get(programmer_type, programmer_type)
# Usamos el año actual para la consulta principal # Cargar el prompt desde el archivo
current_year = time.strftime("%Y") prompt_template = ""
prompt = f"""¿Cuál es la tarifa POR HORA promedio mundial en dólares estadounidenses (USD) para un {programmer_description} en {current_year}? prompt_file = CONFIG_DIR / 'rates.prompt'
IMPORTANTE: Responde ÚNICAMENTE con el valor numérico con dos decimales. Es ESENCIAL que sea el valor POR HORA.""" try:
with open(prompt_file, 'r', encoding='utf-8') as f:
prompt_template = f.read().strip()
except FileNotFoundError:
# Si no se encuentra el archivo, usar un prompt predeterminado
prompt_template = "What is the average hourly rate in USD for a [developer type] developer, expressed as a numerical value with two decimal places?"
# Reemplazar [developer type] con el tipo de programador específico
prompt = prompt_template.replace('[developer type]', programmer_description)
return prompt return prompt