From e2c507664ca10996f0c68018af220120e30c91a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Sch=C3=B8yen?= <99178202+ecschoye@users.noreply.github.com> Date: Fri, 20 Feb 2026 05:00:26 -0500 Subject: [PATCH] fix(provider): surface API key rotation as ineffective warning (#1000) rotate_key() selects the next key in the round-robin but never applies it to the underlying provider (Provider trait has no set_api_key method). The previous info-level log implied rotation was working. Change to warn-level and explicitly state the key is not applied, making the limitation visible to operators instead of silently pretending rotation works. Co-authored-by: Claude Opus 4.6 --- src/providers/reliable.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/providers/reliable.rs b/src/providers/reliable.rs index d3621d5..94c855a 100644 --- a/src/providers/reliable.rs +++ b/src/providers/reliable.rs @@ -356,10 +356,12 @@ impl Provider for ReliableProvider { // so the retry hits a different quota bucket. if rate_limited && !non_retryable_rate_limit { if let Some(new_key) = self.rotate_key() { - tracing::info!( + tracing::warn!( provider = provider_name, error = %error_detail, - "Rate limited, rotated API key (key ending ...{})", + "Rate limited; key rotation selected key ending ...{} \ + but cannot apply (Provider trait has no set_api_key). \ + Retrying with original key.", &new_key[new_key.len().saturating_sub(4)..] ); } @@ -472,10 +474,12 @@ impl Provider for ReliableProvider { if rate_limited && !non_retryable_rate_limit { if let Some(new_key) = self.rotate_key() { - tracing::info!( + tracing::warn!( provider = provider_name, error = %error_detail, - "Rate limited, rotated API key (key ending ...{})", + "Rate limited; key rotation selected key ending ...{} \ + but cannot apply (Provider trait has no set_api_key). \ + Retrying with original key.", &new_key[new_key.len().saturating_sub(4)..] ); } @@ -594,10 +598,12 @@ impl Provider for ReliableProvider { if rate_limited && !non_retryable_rate_limit { if let Some(new_key) = self.rotate_key() { - tracing::info!( + tracing::warn!( provider = provider_name, error = %error_detail, - "Rate limited, rotated API key (key ending ...{})", + "Rate limited; key rotation selected key ending ...{} \ + but cannot apply (Provider trait has no set_api_key). \ + Retrying with original key.", &new_key[new_key.len().saturating_sub(4)..] ); }