5. Multi-Model config

Por: Artiko
goosemulti-modelplannerexecutorcost-optimization

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:

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:

Si no especificás multi_model, Goose usa el goose_model para todo (modo single-model).


Estrategias comunes

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

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.