5. Multi-Model config
5. Multi-Model config
Una sola sesión puede usar varios modelos con propósitos distintos. Esta feature es central en Goose y diferencia su filosofía de la de Claude Code (un modelo) o Cursor (un modelo por turno).
El argumento económico
Modelos grandes (Claude Sonnet, GPT-5) son 5–20x más caros que modelos chicos (Haiku, GPT-5-mini). Pero no toda decisión del agente requiere razonamiento profundo:
- Decidir qué archivo leer: tarea barata. Modelo chico.
- Resumir un PR: barata. Modelo chico.
- Implementar una refactorización compleja: cara. Modelo grande.
La idea de multi-model: reservar el modelo caro para los pasos que lo necesitan y delegar el resto al barato.
flowchart LR
T[Tarea entrante] --> P["Planner - modelo barato"]
P -->|plan paso a paso| E["Executor - modelo caro"]
E -->|cambios| Out[Resultado]
P -.tasks rutinarias.-> Quick["Modelo chico responde directo"]
A escala de equipo, la diferencia de costo es brutal. Hay reportes de 60-80% de reducción de bill manteniendo calidad equivalente.
Configurar planner + executor
# ~/.config/goose/config.yaml
goose_provider: openai
goose_model: claude-sonnet-4.5
multi_model:
planner:
provider: openai
model: claude-haiku-4.5
base_url: https://openrouter.ai/api/v1
executor:
provider: claude-code
model: claude-sonnet-4.5
Tres roles posibles:
- planner: decide qué hacer, en qué orden.
- executor: ejecuta los pasos, escribe el código.
- default: fallback si nada más matchea.
Si no especificás multi_model, Goose usa el goose_model para todo (modo single-model).
Estrategias comunes
Planner barato + executor potente (la más popular)
multi_model:
planner:
provider: openai
model: claude-haiku-4.5
executor:
provider: claude-code
model: claude-sonnet-4.5
Costo: ~80% planner barato + 20% executor caro = ahorra 60-70% vs all-Sonnet.
Local planner + cloud executor
Para datos sensibles, planificás localmente y solo mandás partes filtradas al cloud:
multi_model:
planner:
provider: openai
model: llama3.1
base_url: http://localhost:11434/v1
executor:
provider: claude-code
model: claude-sonnet-4.5
Cloud planner + local executor
Inverso: planificás con el modelo grande, ejecutás cambios con un modelo local que ya conoce tu estilo de código.
multi_model:
planner:
provider: claude-code
model: claude-sonnet-4.5
executor:
provider: openai
model: deepseek-coder-33b
base_url: http://localhost:11434/v1
Especialización por dominio
Goose en algunas versiones soporta asignar modelos por tipo de tarea:
multi_model:
code_review:
provider: openai
model: claude-sonnet-4.5
documentation:
provider: openai
model: gpt-4o-mini
test_generation:
provider: openai
model: deepseek-coder-33b
(Verificá tu versión de Goose — esta sintaxis puede variar.)
Switching dentro de la sesión
Aunque tu config tenga multi-model definido, podés forzar uno puntual:
> /model planner
[OK] next response will use planner: claude-haiku-4.5
> /model executor
[OK] next response will use executor: claude-sonnet-4.5
O directo por nombre:
> /model claude-haiku-4.5
Útil cuando estás haciendo una tarea simple y querés forzar el modelo barato.
Cuándo NO usar multi-model
- Tareas chicas e individuales: el overhead de coordinación entre modelos no compensa.
- Modelos con feature mismatch: si solo el grande tiene tool use confiable, el chico va a fallar como planner.
- Simplicidad operativa: dos providers significan dos cosas que pueden romperse.
Regla del pulgar: empezá con single-model. Si el bill duele, pasá a multi-model con planner barato.
Fallback por latencia / errores
Algunos providers permiten fallbacks automáticos:
multi_model:
executor:
primary:
provider: claude-code
model: claude-sonnet-4.5
fallback:
- provider: openai
model: gpt-5
base_url: https://openrouter.ai/api/v1
- provider: openai
model: gemini-2.5-pro
base_url: https://openrouter.ai/api/v1
Si el primario falla por timeout / rate limit / error 5xx, Goose intenta los fallbacks en orden.
Esto importa cuando tu workload es crítico: en lugar de morir si Anthropic tiene un blip, automáticamente saltás a otro provider.
Costo y observabilidad
Goose puede registrar costos por modelo si configurás los precios:
pricing:
claude-sonnet-4.5:
input_per_1k_tokens: 0.003
output_per_1k_tokens: 0.015
claude-haiku-4.5:
input_per_1k_tokens: 0.0008
output_per_1k_tokens: 0.004
logging:
cost_tracking: true
Después podés ver:
goose stats --since "1 week ago"
# Tokens: 1.4M in / 320k out
# Cost: $4.21 (claude-sonnet: $3.80, claude-haiku: $0.41)
# Sessions: 47
Esto convierte multi-model de “es más barato, supuestamente” a “ahorro $X medible”.
Anti-patterns
Planner que no se entera de los resultados
# Mal
multi_model:
planner:
model: cheap-model
isolated: true # planner no ve outputs de executor
Sin compartir state, el planner sigue ciegamente su plan inicial sin adaptarse a errores. Mantené isolated: false o no configures multi-model.
Modelo chico para tool use complejo
Modelos chicos a veces fallan generando JSON estructurado para tool_use. Si tu planner usa muchas tool calls, vas a tener errores raros. Subí al modelo grande para ese rol o tester con goose bench.
Multi-model sin métrica de éxito
Si no medís costo y calidad antes/después, estás adivinando. Medí: corré la misma tarea 10 veces con single-model y 10 veces con multi-model y comparás cost + correctness.
¿Qué viene?
Tenés providers configurados, multi-model si lo necesitás. En el próximo capítulo cubrimos sesiones persistentes, proyectos y persistent instructions — el segundo pilar de la productividad con Goose.