Docs / Architect Labs / Lab 16

Lab 16 — Competitive Eval: Modelo vs Modelo

Usa architect eval para ejecutar la misma tarea con N modelos diferentes en paralelo. El reporte comparativo muestra tests pasados, coste, tiempo y archivos generados.

Concepto clave

Nivel: Avanzado

Duración estimada: 25 minutos. Features: eval, parallel, reports.

architect eval usa parallel runs para ejecutar la misma tarea con N modelos diferentes. El reporte comparativo muestra: tests pasados, coste, tiempo y archivos generados.

Setup

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

src/string_utils.py

python
# To be implemented by different models
pass

tests/test_string_utils.py

python
from src.string_utils import (
    reverse_words, capitalize_words, count_vowels,
    is_palindrome, caesar_cipher
)

def test_reverse_words():
    assert reverse_words("hello world") == "world hello"

def test_capitalize_words():
    assert capitalize_words("hello world") == "Hello World"

def test_count_vowels():
    assert count_vowels("hello") == 2

def test_is_palindrome():
    assert is_palindrome("racecar") == True
    assert is_palindrome("hello") == False

def test_caesar_cipher():
    assert caesar_cipher("abc", 1) == "bcd"
    assert caesar_cipher("xyz", 3) == "abc"

def test_caesar_cipher_decrypt():
    assert caesar_cipher("bcd", -1) == "abc"

.architect.yaml

yaml
llm:
  api_base: http://localhost:4000/v1
  api_key_env: LITELLM_API_KEY
bash
git add -A && git commit -m "initial: eval setup"

Ejercicio 1: Eval con 3 modelos

bash
architect eval "Implementa las funciones en src/string_utils.py: \
  reverse_words, capitalize_words, count_vowels, is_palindrome, \
  caesar_cipher. Todos los tests en tests/test_string_utils.py \
  deben pasar." \
  --models openai/gpt-4.1,anthropic/claude-sonnet-4-20250514,deepseek/deepseek-chat \
  --check "pytest tests/test_string_utils.py -v" \
  --config .architect.yaml \
  --confirm-mode yolo \
  --report-file reports/eval-comparison.json

Qué observar: 3 ejecuciones paralelas, una por modelo. Cada una en su worktree aislado.

Importante

Necesitas LiteLLM configurado con los 3 providers para que funcione. Si solo tienes uno, usa --models openai/gpt-4.1,openai/gpt-4o-mini para comparar modelos del mismo provider.

Ejercicio 2: Analizar resultados

python
import json

report = json.load(open("reports/eval-comparison.json"))

print("=" * 60)
print(f"{'Model':<35} {'Tests':>6} {'Cost':>8} {'Time':>8}")
print("=" * 60)

for result in report.get("results", []):
    model = result.get("model", "?")
    tests = result.get("tests_passed", "?")
    cost = result.get("cost", 0)
    time = result.get("duration", 0)
    passed = "PASS" if result.get("all_checks_passed") else "FAIL"
    print(f"{passed} {model:<33} {tests:>6} ${cost:>7.4f} {time:>6.1f}s")

print("=" * 60)

Ejercicio 3: Eval con tarea más compleja

Crea un escenario más exigente:

src/data_structures.py

python
# To be implemented
pass

tests/test_data_structures.py

python
from src.data_structures import Stack, Queue, LinkedList

def test_stack_push_pop():
    s = Stack()
    s.push(1)
    s.push(2)
    assert s.pop() == 2
    assert s.pop() == 1

def test_stack_empty():
    s = Stack()
    assert s.is_empty() == True
    s.push(1)
    assert s.is_empty() == False

def test_queue_enqueue_dequeue():
    q = Queue()
    q.enqueue(1)
    q.enqueue(2)
    assert q.dequeue() == 1
    assert q.dequeue() == 2

def test_linked_list():
    ll = LinkedList()
    ll.append(1)
    ll.append(2)
    ll.append(3)
    assert ll.to_list() == [1, 2, 3]
    assert ll.length() == 3

def test_linked_list_remove():
    ll = LinkedList()
    ll.append(1)
    ll.append(2)
    ll.append(3)
    ll.remove(2)
    assert ll.to_list() == [1, 3]
bash
git add -A && git commit -m "add data structures eval"

architect eval "Implementa Stack, Queue, y LinkedList en \
  src/data_structures.py. Todos los tests deben pasar." \
  --models openai/gpt-4.1,anthropic/claude-sonnet-4-20250514 \
  --check "pytest tests/test_data_structures.py -v" \
  --config .architect.yaml \
  --confirm-mode yolo \
  --budget 0.30 \
  --report-file reports/eval-structures.json

Resumen

FlagDescripción
architect evalEjecuta la misma tarea con múltiples modelos
--models a,b,cLista de modelos a comparar (separados por coma)
--check CMDComando de verificación (mismo para todos)
ReporteComparativa por modelo: tests, coste, tiempo
RequiereLiteLLM configurado con múltiples providers

Siguiente lab

Lab 17: Self-Healing CI/CD — Arquitectura completa end-to-end.

END OF DOCUMENT

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