fix(provider): do not retry auth errors

Carlos Alexandro Becker created

If auth failed... its unlikely it'll work next time

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Change summary

internal/llm/provider/anthropic.go |  7 +------
internal/llm/provider/gemini.go    | 10 +---------
internal/llm/provider/openai.go    |  7 +------
internal/llm/provider/provider.go  |  2 +-
4 files changed, 4 insertions(+), 22 deletions(-)

Detailed changes

internal/llm/provider/anthropic.go 🔗

@@ -493,12 +493,7 @@ func (a *anthropicClient) shouldRetry(attempts int, err error) (bool, int64, err
 	}
 
 	if apiErr.StatusCode == 401 {
-		a.providerOptions.apiKey, err = config.Get().Resolve(a.providerOptions.config.APIKey)
-		if err != nil {
-			return false, 0, fmt.Errorf("failed to resolve API key: %w", err)
-		}
-		a.client = createAnthropicClient(a.providerOptions, a.tp)
-		return true, 0, nil
+		return false, 0, err
 	}
 
 	// Handle context limit exceeded error (400 Bad Request)

internal/llm/provider/gemini.go 🔗

@@ -436,15 +436,7 @@ func (g *geminiClient) shouldRetry(attempts int, err error) (bool, int64, error)
 
 	// Check for token expiration (401 Unauthorized)
 	if contains(errMsg, "unauthorized", "invalid api key", "api key expired") {
-		g.providerOptions.apiKey, err = config.Get().Resolve(g.providerOptions.config.APIKey)
-		if err != nil {
-			return false, 0, fmt.Errorf("failed to resolve API key: %w", err)
-		}
-		g.client, err = createGeminiClient(g.providerOptions)
-		if err != nil {
-			return false, 0, fmt.Errorf("failed to create Gemini client after API key refresh: %w", err)
-		}
-		return true, 0, nil
+		return false, 0, err
 	}
 
 	// Check for common rate limit error messages

internal/llm/provider/openai.go 🔗

@@ -514,12 +514,7 @@ func (o *openaiClient) shouldRetry(attempts int, err error) (bool, int64, error)
 	if errors.As(err, &apiErr) {
 		// Check for token expiration (401 Unauthorized)
 		if apiErr.StatusCode == 401 {
-			o.providerOptions.apiKey, err = config.Get().Resolve(o.providerOptions.config.APIKey)
-			if err != nil {
-				return false, 0, fmt.Errorf("failed to resolve API key: %w", err)
-			}
-			o.client = createOpenAIClient(o.providerOptions)
-			return true, 0, nil
+			return false, 0, err
 		}
 
 		if apiErr.StatusCode != 429 && apiErr.StatusCode != 500 {

internal/llm/provider/provider.go 🔗

@@ -13,7 +13,7 @@ import (
 
 type EventType string
 
-const maxRetries = 8
+const maxRetries = 3
 
 const (
 	EventContentStart   EventType = "content_start"