ModelProvider wrapper with retry + auth-key rotation. The model_provider Vec exists
for tests to exercise multi-provider failover; production wiring always
passes a single primary. Per-model failover chains are also test-only —
the schema no longer surfaces them.
A Reliable chat request exhausted its candidates after receiving rejected
semantic completions. The provider-reported usage is retained so the turn
loop can account for work that was billed even though no response was
accepted.
The final candidate attempt completed successfully at the transport layer
but supplied neither usable text nor a native tool call. This remains typed
independently from optional rejected-attempt usage so delivery layers can
classify the actual terminal failure without guessing from accounting data.
Check if an error indicates an authentication/authorization failure.
Used by channels to evict cached model_providers whose OAuth tokens may have
expired so the next request triggers a fresh credential resolution.
Run the given future within a provider-fallback scope.
Both record_provider_fallback (inside ReliableModelProvider) and
take_last_provider_fallback (post-loop channel code) must execute
within this scope for the data to be visible.