Sintaxis
model acepta string (1 modelo) o array (1 a 8 candidatos ordenados):
Cuándo se activa el fallback
| Caso | Clase | Fallback |
|---|---|---|
| HTTP 429 rate limit | provider | ✅ Sí |
| HTTP 500/502/503 provider down | provider | ✅ Sí |
| HTTP 408/504 timeout | provider | ✅ Sí |
| Network reset / connection refused | provider | ✅ Sí |
| Contexto excedido (input > context window) | provider | ✅ Sí |
| Content policy rechazó el prompt | provider | ✅ Sí |
| HTTP 401/403 auth inválida | user | ❌ No |
| HTTP 400 request malformado | user | ❌ No |
| HTTP 402 saldo insuficiente | user | ❌ No |
| Modelo no existe en el catálogo | user | ❌ No |
Skip por pre-flight
Si un candidato no soporta una capability requerida (zdr: true, response_format) o está bloqueado por la config ZDR del org, se salta en vez de fallar. Aparece en skipped con el motivo:
zdr_not_verified— sin política ZDR verificadazdr_org_required— org exige ZDR y el candidato no está verificadostructured_outputs_not_supported— sin soporte structured outputsmodel_not_found,no_adapter— catálogo o configuración
Respuesta exitosa
Si fallan todos
Costos
El cobro se hace contrageekhub.final_model. Los intentos fallidos no generan cargo de tokens al usuario pero quedan en /dashboard/usage con statusCode ≠ 200.
Streaming
Constream: true el fallback solo funciona si la falla ocurre antes del primer chunk. Una vez que tu cliente recibe tokens, no es posible cambiar de modelo; el error sale como evento SSE y se aborta.