# Fallback: OpenAI first, then Anthropic, then Gemini

A. OpenAI fails with each status (no client retries). Does the call move on?
  OpenAI 400 -> thrown   requests: openai=1 anthropic=0 gemini=0  trail: [openai: failed with status 400]
  OpenAI 401 -> thrown   requests: openai=1 anthropic=0 gemini=0  trail: [openai: failed with status 401]
  OpenAI 429 -> answered requests: openai=1 anthropic=1 gemini=0  trail: [openai: failed with status 429, anthropic: ok]
  OpenAI 500 -> answered requests: openai=1 anthropic=1 gemini=0  trail: [openai: failed with status 500, anthropic: ok]
  OpenAI 503 -> answered requests: openai=1 anthropic=1 gemini=0  trail: [openai: failed with status 503, anthropic: ok]

B. The same 503 with the client's own retries switched on (maxRetries 2)
  OpenAI 503 -> answered requests: openai=3 anthropic=1 gemini=0

C. Gemini retries in two layers: the Google SDK (HttpRetryOptions.attempts) and Spring AI's RetryTemplate
  SDK attempts=1, RetryTemplate retries=0 -> 1 request(s) for one call
  SDK attempts=1, RetryTemplate retries=2 -> 3 request(s) for one call
  SDK attempts=3, RetryTemplate retries=0 -> 3 request(s) for one call
  SDK attempts=3, RetryTemplate retries=2 -> 9 request(s) for one call
  nothing configured at all              -> 5 requests for one call, and it took more than 5 seconds: true

D. Everything down: the last provider's failure is the one you see
  all three 503 -> thrown  requests: openai=1 anthropic=1 gemini=1
  trail: [openai: failed with status 503, anthropic: failed with status 503, gemini: failed with status 503]
