feat(providers): model failover chain + API key rotation
- Add model_fallbacks and api_keys to ReliabilityConfig - Implement per-model fallback chain in ReliableProvider - Add API key rotation on auth failures (401/403) - Add retry-after header parsing and exponential backoff - Integrate failover into chat_with_system and chat_with_history - 20 unit tests covering failover, rotation, and retry logic
This commit is contained in:
parent
fa9cdabbcb
commit
9a5db46cf7
3 changed files with 476 additions and 104 deletions
|
|
@ -635,6 +635,14 @@ pub struct ReliabilityConfig {
|
|||
/// Fallback provider chain (e.g. `["anthropic", "openai"]`).
|
||||
#[serde(default)]
|
||||
pub fallback_providers: Vec<String>,
|
||||
/// Additional API keys for round-robin rotation on rate-limit (429) errors.
|
||||
/// The primary `api_key` is always tried first; these are extras.
|
||||
#[serde(default)]
|
||||
pub api_keys: Vec<String>,
|
||||
/// Per-model fallback chains. When a model fails, try these alternatives in order.
|
||||
/// Example: `{ "claude-opus-4-20250514" = ["claude-sonnet-4-20250514", "gpt-4o"] }`
|
||||
#[serde(default)]
|
||||
pub model_fallbacks: std::collections::HashMap<String, Vec<String>>,
|
||||
/// Initial backoff for channel/daemon restarts.
|
||||
#[serde(default = "default_channel_backoff_secs")]
|
||||
pub channel_initial_backoff_secs: u64,
|
||||
|
|
@ -679,6 +687,8 @@ impl Default for ReliabilityConfig {
|
|||
provider_retries: default_provider_retries(),
|
||||
provider_backoff_ms: default_provider_backoff_ms(),
|
||||
fallback_providers: Vec::new(),
|
||||
api_keys: Vec::new(),
|
||||
model_fallbacks: std::collections::HashMap::new(),
|
||||
channel_initial_backoff_secs: default_channel_backoff_secs(),
|
||||
channel_max_backoff_secs: default_channel_backoff_max_secs(),
|
||||
scheduler_poll_secs: default_scheduler_poll_secs(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue