From 46a97d32566dd486f9de317141f6a11dd9d3abad Mon Sep 17 00:00:00 2001 From: Pavel Anni Date: Sun, 15 Mar 2026 20:05:57 -0400 Subject: [PATCH] fix(provider/anthropic): normalize model ID dots to dashes before API call The Anthropic API expects hyphens in model IDs (e.g. claude-sonnet-4-6), but config files use dots (claude-sonnet-4.6). The dot-to-dash normalization only existed in the SDK-based provider, so API-key and anthropic-messages paths sent the dotted name and got a 404. Assisted-By: Claude (Anthropic AI) Signed-off-by: Pavel Anni --- pkg/providers/anthropic_messages/provider.go | 5 ++++- pkg/providers/factory_provider.go | 3 +++ pkg/providers/factory_provider_test.go | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/providers/anthropic_messages/provider.go b/pkg/providers/anthropic_messages/provider.go index 8a83a7058..e4afb853b 100644 --- a/pkg/providers/anthropic_messages/provider.go +++ b/pkg/providers/anthropic_messages/provider.go @@ -161,8 +161,11 @@ func buildRequestBody( return nil, fmt.Errorf("max_tokens is required in options") } + // Normalize model ID: Anthropic API uses hyphens (claude-sonnet-4-6), + // but config may use dots (claude-sonnet-4.6). + apiModel := strings.ReplaceAll(model, ".", "-") result := map[string]any{ - "model": model, + "model": apiModel, "max_tokens": int64(maxTokens), "messages": []any{}, } diff --git a/pkg/providers/factory_provider.go b/pkg/providers/factory_provider.go index b7567f9fc..05cf87b26 100644 --- a/pkg/providers/factory_provider.go +++ b/pkg/providers/factory_provider.go @@ -134,6 +134,9 @@ func CreateProviderFromConfig(cfg *config.ModelConfig) (LLMProvider, string, err ), modelID, nil case "anthropic": + // Normalize model ID: Anthropic API uses hyphens (claude-sonnet-4-6), + // but config may use dots (claude-sonnet-4.6). + modelID = strings.ReplaceAll(modelID, ".", "-") if cfg.AuthMethod == "oauth" || cfg.AuthMethod == "token" { // Use OAuth credentials from auth store provider, err := createClaudeAuthProvider() diff --git a/pkg/providers/factory_provider_test.go b/pkg/providers/factory_provider_test.go index b678a7eb6..2771eda98 100644 --- a/pkg/providers/factory_provider_test.go +++ b/pkg/providers/factory_provider_test.go @@ -236,8 +236,8 @@ func TestCreateProviderFromConfig_Anthropic(t *testing.T) { if provider == nil { t.Fatal("CreateProviderFromConfig() returned nil provider") } - if modelID != "claude-sonnet-4.6" { - t.Errorf("modelID = %q, want %q", modelID, "claude-sonnet-4.6") + if modelID != "claude-sonnet-4-6" { + t.Errorf("modelID = %q, want %q", modelID, "claude-sonnet-4-6") } }