Resilience

Fallback chains that keep the conversation alive.

Give any agent an ordered list of backends. The router tries each in turn and falls through on any failure — HTTP error, unreachable host, out of credits, missing key — logging a warning each time. Set it once for chat, TTS, or a shared defaults block.

served
fell through
failed
tts chain · agent: dante
01 elevenlabs connection refused error
02 openai · kokoro (local) 180ms · x-tts-provider served
warn  elevenlabs unreachable, falling back
ok    tts_provider=openai/kokoro
Shared defaults

One chain, inherited by every agent that needs it.

Any agent that omits llm/a2a inherits defaults.llm; any agent that omits tts inherits defaults.tts. An agent can still carry its own chain instead of the shared one — an agent with no chat backend anywhere is a config error at startup, not a silent failure.

config/agents.yaml
defaults:
  llm:
    - base_url: http://host.docker.internal:11434/v1
      model: llama3.2
    # fallback if the local server is down
    - base_url: https://api.openai.com/v1
      model: gpt-4o-mini
      api_key: ${OPENAI_API_KEY}
  tts:
    - provider: minimax
      voice_id: ${MINIMAX_DEFAULT_VOICE_ID}

Ready to route your own voice stack?