diff --git a/pkg/providers/claude_provider.go b/pkg/providers/claude_provider.go index ae6aca96d..cf12114b2 100644 --- a/pkg/providers/claude_provider.go +++ b/pkg/providers/claude_provider.go @@ -15,16 +15,19 @@ type ClaudeProvider struct { tokenSource func() (string, error) } -func NewClaudeProvider(token string) *ClaudeProvider { +func NewClaudeProvider(token string, apiBase string) *ClaudeProvider { + if apiBase == "" { + apiBase = "https://api.anthropic.com" + } client := anthropic.NewClient( option.WithAuthToken(token), - option.WithBaseURL("https://api.anthropic.com"), + option.WithBaseURL(apiBase), ) return &ClaudeProvider{client: &client} } -func NewClaudeProviderWithTokenSource(token string, tokenSource func() (string, error)) *ClaudeProvider { - p := NewClaudeProvider(token) +func NewClaudeProviderWithTokenSource(token string, apiBase string, tokenSource func() (string, error)) *ClaudeProvider { + p := NewClaudeProvider(token, apiBase) p.tokenSource = tokenSource return p } diff --git a/pkg/providers/claude_provider_test.go b/pkg/providers/claude_provider_test.go index bbad2d269..c205605fd 100644 --- a/pkg/providers/claude_provider_test.go +++ b/pkg/providers/claude_provider_test.go @@ -175,7 +175,7 @@ func TestClaudeProvider_ChatRoundTrip(t *testing.T) { })) defer server.Close() - provider := NewClaudeProvider("test-token") + provider := NewClaudeProvider("test-token", "") provider.client = createAnthropicTestClient(server.URL, "test-token") messages := []Message{{Role: "user", Content: "Hello"}} @@ -195,7 +195,7 @@ func TestClaudeProvider_ChatRoundTrip(t *testing.T) { } func TestClaudeProvider_GetDefaultModel(t *testing.T) { - p := NewClaudeProvider("test-token") + p := NewClaudeProvider("test-token", "") if got := p.GetDefaultModel(); got != "claude-sonnet-4-5-20250929" { t.Errorf("GetDefaultModel() = %q, want %q", got, "claude-sonnet-4-5-20250929") } diff --git a/pkg/providers/http_provider.go b/pkg/providers/http_provider.go index 4cf2c6db2..138ed4e50 100644 --- a/pkg/providers/http_provider.go +++ b/pkg/providers/http_provider.go @@ -205,7 +205,7 @@ func createClaudeAuthProvider() (LLMProvider, error) { if cred == nil { return nil, fmt.Errorf("no credentials for anthropic. Run: picoclaw auth login --provider anthropic") } - return NewClaudeProviderWithTokenSource(cred.AccessToken, createClaudeTokenSource()), nil + return NewClaudeProviderWithTokenSource(cred.AccessToken, "", createClaudeTokenSource()), nil } func createCodexAuthProvider() (LLMProvider, error) { @@ -257,11 +257,7 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) { if cfg.Providers.Anthropic.AuthMethod == "oauth" || cfg.Providers.Anthropic.AuthMethod == "token" { return createClaudeAuthProvider() } - apiKey = cfg.Providers.Anthropic.APIKey - apiBase = cfg.Providers.Anthropic.APIBase - if apiBase == "" { - apiBase = "https://api.anthropic.com/v1" - } + return NewClaudeProvider(cfg.Providers.Anthropic.APIKey, cfg.Providers.Anthropic.APIBase), nil } case "openrouter": if cfg.Providers.OpenRouter.APIKey != "" { @@ -360,12 +356,7 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) { if cfg.Providers.Anthropic.AuthMethod == "oauth" || cfg.Providers.Anthropic.AuthMethod == "token" { return createClaudeAuthProvider() } - apiKey = cfg.Providers.Anthropic.APIKey - apiBase = cfg.Providers.Anthropic.APIBase - proxy = cfg.Providers.Anthropic.Proxy - if apiBase == "" { - apiBase = "https://api.anthropic.com/v1" - } + return NewClaudeProvider(cfg.Providers.Anthropic.APIKey, cfg.Providers.Anthropic.APIBase), nil case (strings.Contains(lowerModel, "gpt") || strings.HasPrefix(model, "openai/")) && (cfg.Providers.OpenAI.APIKey != "" || cfg.Providers.OpenAI.AuthMethod != ""): if cfg.Providers.OpenAI.AuthMethod == "oauth" || cfg.Providers.OpenAI.AuthMethod == "token" {