Docs / Architect Labs / Lab 10

Lab 10 — Budget & Cost Control

Configura límites de presupuesto por ejecución para controlar el gasto de LLM. Esencial para pipelines de CI/CD donde Architect ejecuta sin supervisión humana.

Setup

Nivel: Intermedio

Duración estimada: 20 minutos. Features: budget, costs, reports.

bash
mkdir -p ~/architect-labs/lab-10 && cd ~/architect-labs/lab-10
git init && mkdir -p src tests reports

src/data_processor.py

python
def process_csv(filepath):
    # TODO: implement
    pass

def validate_row(row):
    # TODO: implement
    pass

tests/test_processor.py

python
from src.data_processor import process_csv, validate_row

def test_process_csv_exists():
    assert callable(process_csv)

def test_validate_row_exists():
    assert callable(validate_row)

.architect.yaml

yaml
llm:
  model: openai/gpt-4.1
  api_base: http://localhost:4000/v1
  api_key_env: LITELLM_API_KEY

costs:
  enabled: true
  budget_usd: 0.25
  warn_at_usd: 0.15
bash
git add -A && git commit -m "initial"

Ejercicio 1: Budget en config

bash
architect run "Implementa process_csv y validate_row con funcionalidad \
  completa. process_csv debe leer un CSV, validar cada fila, y retornar \
  las filas válidas. validate_row debe verificar que tiene campos \
  name, email, age (age > 0). Añade tests completos." \
  --config .architect.yaml \
  --confirm-mode yolo \
  --report-file reports/budget-test.json

Al terminar, revisa el coste:

bash
python3 -c "
import json
r = json.load(open('reports/budget-test.json'))
print(f'Coste total: \${r[\"total_cost\"]:.4f}')
print(f'Steps: {r[\"steps\"]}')
print(f'Status: {r[\"status\"]}')
"

Consejo

El campo warn_at_usd imprime un warning cuando se alcanza el 60% del budget. Úsalo para monitorear el coste en ejecuciones largas.

Ejercicio 2: Budget explícito por CLI

bash
# Budget muy bajo — forzar que se detenga por presupuesto
architect run "Genera un módulo completo de analytics con 10 funciones \
  diferentes para análisis estadístico, cada una con tests exhaustivos." \
  --config .architect.yaml \
  --confirm-mode yolo \
  --budget 0.05 \
  --report-file reports/low-budget.json

echo "Exit code: $?"

Verifica por qué se detuvo:

bash
python3 -c "
import json
r = json.load(open('reports/low-budget.json'))
print(f'Status: {r[\"status\"]}')
print(f'Coste: \${r[\"total_cost\"]:.4f}')
print(f'Stop reason: {r.get(\"stop_reason\", \"N/A\")}')
"

Importante

El flag --budget del CLI hace override del costs.budget_usd del YAML. Esto te permite ajustar el presupuesto por ejecución sin modificar la configuración base.

Ejercicio 3: Budget en Ralph Loop

bash
architect loop "Implementa src/data_processor.py completo con manejo \
  de errores robusto." \
  --check "pytest tests/ -v" \
  --config .architect.yaml \
  --confirm-mode yolo \
  --max-iterations 10 \
  --budget 0.30 \
  --report-file reports/loop-budget.json

Qué observar: El loop se detiene por el primero que se alcance: max_iterations O budget.

Ejercicio 4: Análisis de costes post-ejecución

Script para analizar todos los reportes generados:

python
import json, os

reports_dir = "reports"
total_cost = 0

for f in sorted(os.listdir(reports_dir)):
    if f.endswith(".json"):
        data = json.load(open(os.path.join(reports_dir, f)))
        cost = data.get("total_cost", 0)
        total_cost += cost
        print(f"  {f}: ${cost:.4f} ({data.get('status', '?')})")

print(f"\nTotal gastado: ${total_cost:.4f}")

Consejo

Mantén un directorio reports/ por proyecto y automatiza el análisis de costes. En CI/CD, puedes agregar un step que suba los costes a un dashboard o alerte si se excede un umbral.

Resumen

Config/FlagDescripción
costs.budget_usdHard limit en config YAML
costs.warn_at_usdWarning threshold
--budget N.NNOverride de budget por CLI
total_cost en reportCoste real de la ejecución
stop_reasonPor qué se detuvo (budget, iterations, success)

Siguiente lab

Lab 11: Sessions & Checkpoints — Persistencia y reanudación de tareas.

END OF DOCUMENT

¿Necesitas más? Volver a la Librería →