diff --git a/README.fr.md b/README.fr.md index 248ebe44f..21913f6ba 100644 --- a/README.fr.md +++ b/README.fr.md @@ -838,8 +838,8 @@ Cette conception permet également le **support multi-agent** avec une sélectio "api_key": "sk-your-openai-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -879,8 +879,8 @@ Cette conception permet également le **support multi-agent** avec une sélectio **Anthropic (avec OAuth)** ```json { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "auth_method": "oauth" } ``` diff --git a/README.ja.md b/README.ja.md index 4404c4b7c..c0e40883d 100644 --- a/README.ja.md +++ b/README.ja.md @@ -774,8 +774,8 @@ HEARTBEAT_OK 応答 ユーザーが直接結果を受け取る "api_key": "sk-your-openai-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -815,8 +815,8 @@ HEARTBEAT_OK 応答 ユーザーが直接結果を受け取る **Anthropic (OAuth使用)** ```json { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "auth_method": "oauth" } ``` diff --git a/README.md b/README.md index f921bd17c..468350409 100644 --- a/README.md +++ b/README.md @@ -222,8 +222,8 @@ picoclaw onboard "api_key": "your-api-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "your-anthropic-key" } ], @@ -733,8 +733,8 @@ This design also enables **multi-agent support** with flexible provider selectio "api_key": "sk-your-openai-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -783,8 +783,8 @@ This design also enables **multi-agent support** with flexible provider selectio **Anthropic (with OAuth)** ```json { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "auth_method": "oauth" } ``` diff --git a/README.pt-br.md b/README.pt-br.md index b31264731..44f27813c 100644 --- a/README.pt-br.md +++ b/README.pt-br.md @@ -839,8 +839,8 @@ Este design também possibilita o **suporte multi-agent** com seleção flexíve "api_key": "sk-your-openai-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -880,8 +880,8 @@ Este design também possibilita o **suporte multi-agent** com seleção flexíve **Anthropic (com OAuth)** ```json { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "auth_method": "oauth" } ``` diff --git a/README.vi.md b/README.vi.md index ed0dcfa5f..08fa3dccd 100644 --- a/README.vi.md +++ b/README.vi.md @@ -816,8 +816,8 @@ Thiết kế này cũng cho phép **hỗ trợ đa tác nhân** với lựa ch "api_key": "sk-your-openai-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -857,8 +857,8 @@ Thiết kế này cũng cho phép **hỗ trợ đa tác nhân** với lựa ch **Anthropic (với OAuth)** ```json { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "auth_method": "oauth" } ``` diff --git a/README.zh.md b/README.zh.md index 87ccbd6b4..4827e66ea 100644 --- a/README.zh.md +++ b/README.zh.md @@ -231,8 +231,8 @@ picoclaw onboard "api_key": "your-api-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "your-anthropic-key" } ], @@ -610,8 +610,8 @@ Agent 读取 HEARTBEAT.md "api_key": "sk-your-openai-key" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -660,8 +660,8 @@ Agent 读取 HEARTBEAT.md **Anthropic (使用 OAuth)** ```json { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "auth_method": "oauth" } ``` diff --git a/cmd/picoclaw/cmd_auth.go b/cmd/picoclaw/cmd_auth.go index e7c3f14fc..da39db851 100644 --- a/cmd/picoclaw/cmd_auth.go +++ b/cmd/picoclaw/cmd_auth.go @@ -284,13 +284,13 @@ func authLoginPasteToken(provider string) { } if !found { appCfg.ModelList = append(appCfg.ModelList, config.ModelConfig{ - ModelName: "claude-sonnet-4", - Model: "anthropic/claude-sonnet-4-20250514", + ModelName: "claude-sonnet-4.6", + Model: "anthropic/claude-sonnet-4.6", AuthMethod: "token", }) } // Update default model - appCfg.Agents.Defaults.Model = "claude-sonnet-4" + appCfg.Agents.Defaults.Model = "claude-sonnet-4.6" case "openai": appCfg.Providers.OpenAI.AuthMethod = "token" // Update ModelList diff --git a/config/config.example.json b/config/config.example.json index 3526c266c..e14d4fa63 100644 --- a/config/config.example.json +++ b/config/config.example.json @@ -17,8 +17,8 @@ "api_base": "https://api.openai.com/v1" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key", "api_base": "https://api.anthropic.com/v1" }, diff --git a/docs/design/provider-refactoring.md b/docs/design/provider-refactoring.md index 20a927159..a214d9857 100644 --- a/docs/design/provider-refactoring.md +++ b/docs/design/provider-refactoring.md @@ -66,7 +66,7 @@ Problem: Agent needs to know both `provider` and `model`, adding complexity. Inspired by [LiteLLM](https://docs.litellm.ai/docs/proxy/configs) design: 1. **Model-centric**: Users care about models, not providers -2. **Protocol prefix**: Use `protocol/model_name` format, e.g., `openai/gpt-5.2`, `anthropic/claude-sonnet-4` +2. **Protocol prefix**: Use `protocol/model_name` format, e.g., `openai/gpt-5.2`, `anthropic/claude-sonnet-4.6` 3. **Configuration-driven**: Adding new Providers only requires config changes, no code changes ### 2.2 New Configuration Structure @@ -86,8 +86,8 @@ Inspired by [LiteLLM](https://docs.litellm.ai/docs/proxy/configs) design: "api_key": "sk-xxx" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4-20250514", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-xxx" }, { @@ -184,7 +184,7 @@ Identify protocol via prefix in `model` field: "system_prompt": "You are a coding assistant..." }, "translator": { - "model": "claude-sonnet-4" + "model": "claude-sonnet-4.6" } } } diff --git a/docs/migration/model-list-migration.md b/docs/migration/model-list-migration.md index 03765ca03..0682bae1a 100644 --- a/docs/migration/model-list-migration.md +++ b/docs/migration/model-list-migration.md @@ -58,8 +58,8 @@ The new `model_list` configuration offers several advantages: "api_base": "https://api.openai.com/v1" }, { - "model_name": "claude-sonnet-4", - "model": "anthropic/claude-sonnet-4", + "model_name": "claude-sonnet-4.6", + "model": "anthropic/claude-sonnet-4.6", "api_key": "sk-ant-your-key" }, { @@ -85,10 +85,10 @@ The `model` field uses a protocol prefix format: `[protocol/]model-identifier` | `openai/` | OpenAI API (default) | `openai/gpt-5.2` | | `anthropic/` | Anthropic API | `anthropic/claude-opus-4` | | `antigravity/` | Google via Antigravity OAuth | `antigravity/gemini-2.0-flash` | -| `claude-cli/` | Claude CLI (local) | `claude-cli/claude-sonnet-4` | +| `claude-cli/` | Claude CLI (local) | `claude-cli/claude-sonnet-4.6` | | `codex-cli/` | Codex CLI (local) | `codex-cli/codex-4` | | `github-copilot/` | GitHub Copilot | `github-copilot/gpt-4o` | -| `openrouter/` | OpenRouter | `openrouter/anthropic/claude-sonnet-4` | +| `openrouter/` | OpenRouter | `openrouter/anthropic/claude-sonnet-4.6` | | `groq/` | Groq API | `groq/llama-3.1-70b` | | `deepseek/` | DeepSeek API | `deepseek/deepseek-chat` | | `cerebras/` | Cerebras API | `cerebras/llama-3.3-70b` | diff --git a/pkg/config/config.go b/pkg/config/config.go index 2dd188572..92f3d0fe1 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -350,7 +350,7 @@ type OpenAIProviderConfig struct { type ModelConfig struct { // Required fields ModelName string `json:"model_name"` // User-facing alias for the model - Model string `json:"model"` // Protocol/model-identifier (e.g., "openai/gpt-4o", "anthropic/claude-sonnet-4") + Model string `json:"model"` // Protocol/model-identifier (e.g., "openai/gpt-4o", "anthropic/claude-sonnet-4.6") // HTTP-based providers APIBase string `json:"api_base,omitempty"` // API endpoint URL diff --git a/pkg/config/defaults.go b/pkg/config/defaults.go index 0ce950298..537ad5637 100644 --- a/pkg/config/defaults.go +++ b/pkg/config/defaults.go @@ -113,8 +113,8 @@ func DefaultConfig() *Config { // Anthropic Claude - https://console.anthropic.com/settings/keys { - ModelName: "claude-sonnet-4", - Model: "anthropic/claude-sonnet-4-20250514", + ModelName: "claude-sonnet-4.6", + Model: "anthropic/claude-sonnet-4.6", APIBase: "https://api.anthropic.com/v1", APIKey: "", }, diff --git a/pkg/config/migration.go b/pkg/config/migration.go index 2e0323cd6..689e2312f 100644 --- a/pkg/config/migration.go +++ b/pkg/config/migration.go @@ -78,7 +78,7 @@ func ConvertProvidersToModelList(cfg *Config) []ModelConfig { } return ModelConfig{ ModelName: "anthropic", - Model: "anthropic/claude-sonnet-4", + Model: "anthropic/claude-sonnet-4.6", APIKey: p.Anthropic.APIKey, APIBase: p.Anthropic.APIBase, Proxy: p.Anthropic.Proxy, diff --git a/pkg/config/migration_test.go b/pkg/config/migration_test.go index 6e128d221..b9a333f9e 100644 --- a/pkg/config/migration_test.go +++ b/pkg/config/migration_test.go @@ -58,8 +58,8 @@ func TestConvertProvidersToModelList_Anthropic(t *testing.T) { if result[0].ModelName != "anthropic" { t.Errorf("ModelName = %q, want %q", result[0].ModelName, "anthropic") } - if result[0].Model != "anthropic/claude-sonnet-4" { - t.Errorf("Model = %q, want %q", result[0].Model, "anthropic/claude-sonnet-4") + if result[0].Model != "anthropic/claude-sonnet-4.6" { + t.Errorf("Model = %q, want %q", result[0].Model, "anthropic/claude-sonnet-4.6") } } @@ -513,9 +513,9 @@ func TestBuildModelWithProtocol_AlreadyHasPrefix(t *testing.T) { } func TestBuildModelWithProtocol_DifferentPrefix(t *testing.T) { - result := buildModelWithProtocol("anthropic", "openrouter/claude-sonnet-4") - if result != "openrouter/claude-sonnet-4" { - t.Errorf("buildModelWithProtocol(anthropic, openrouter/claude-sonnet-4) = %q, want %q", result, "openrouter/claude-sonnet-4") + result := buildModelWithProtocol("anthropic", "openrouter/claude-sonnet-4.6") + if result != "openrouter/claude-sonnet-4.6" { + t.Errorf("buildModelWithProtocol(anthropic, openrouter/claude-sonnet-4.6) = %q, want %q", result, "openrouter/claude-sonnet-4.6") } } diff --git a/pkg/providers/anthropic/provider.go b/pkg/providers/anthropic/provider.go index 8f46aa70c..a27a25a2d 100644 --- a/pkg/providers/anthropic/provider.go +++ b/pkg/providers/anthropic/provider.go @@ -85,7 +85,7 @@ func (p *Provider) Chat(ctx context.Context, messages []Message, tools []ToolDef } func (p *Provider) GetDefaultModel() string { - return "claude-sonnet-4-5-20250929" + return "claude-sonnet-4.6" } func (p *Provider) BaseURL() string { diff --git a/pkg/providers/anthropic/provider_test.go b/pkg/providers/anthropic/provider_test.go index 6a1dabafb..08ac9c829 100644 --- a/pkg/providers/anthropic/provider_test.go +++ b/pkg/providers/anthropic/provider_test.go @@ -15,14 +15,14 @@ func TestBuildParams_BasicMessage(t *testing.T) { messages := []Message{ {Role: "user", Content: "Hello"}, } - params, err := buildParams(messages, nil, "claude-sonnet-4-5-20250929", map[string]interface{}{ + params, err := buildParams(messages, nil, "claude-sonnet-4.6", map[string]interface{}{ "max_tokens": 1024, }) if err != nil { t.Fatalf("buildParams() error: %v", err) } - if string(params.Model) != "claude-sonnet-4-5-20250929" { - t.Errorf("Model = %q, want %q", params.Model, "claude-sonnet-4-5-20250929") + if string(params.Model) != "claude-sonnet-4.6" { + t.Errorf("Model = %q, want %q", params.Model, "claude-sonnet-4.6") } if params.MaxTokens != 1024 { t.Errorf("MaxTokens = %d, want 1024", params.MaxTokens) @@ -37,7 +37,7 @@ func TestBuildParams_SystemMessage(t *testing.T) { {Role: "system", Content: "You are helpful"}, {Role: "user", Content: "Hi"}, } - params, err := buildParams(messages, nil, "claude-sonnet-4-5-20250929", map[string]interface{}{}) + params, err := buildParams(messages, nil, "claude-sonnet-4.6", map[string]interface{}{}) if err != nil { t.Fatalf("buildParams() error: %v", err) } @@ -68,7 +68,7 @@ func TestBuildParams_ToolCallMessage(t *testing.T) { }, {Role: "tool", Content: `{"temp": 72}`, ToolCallID: "call_1"}, } - params, err := buildParams(messages, nil, "claude-sonnet-4-5-20250929", map[string]interface{}{}) + params, err := buildParams(messages, nil, "claude-sonnet-4.6", map[string]interface{}{}) if err != nil { t.Fatalf("buildParams() error: %v", err) } @@ -94,7 +94,7 @@ func TestBuildParams_WithTools(t *testing.T) { }, }, } - params, err := buildParams([]Message{{Role: "user", Content: "Hi"}}, tools, "claude-sonnet-4-5-20250929", map[string]interface{}{}) + params, err := buildParams([]Message{{Role: "user", Content: "Hi"}}, tools, "claude-sonnet-4.6", map[string]interface{}{}) if err != nil { t.Fatalf("buildParams() error: %v", err) } @@ -178,7 +178,7 @@ func TestProvider_ChatRoundTrip(t *testing.T) { provider := NewProviderWithClient(createAnthropicTestClient(server.URL, "test-token")) messages := []Message{{Role: "user", Content: "Hello"}} - resp, err := provider.Chat(t.Context(), messages, nil, "claude-sonnet-4-5-20250929", map[string]interface{}{"max_tokens": 1024}) + resp, err := provider.Chat(t.Context(), messages, nil, "claude-sonnet-4.6", map[string]interface{}{"max_tokens": 1024}) if err != nil { t.Fatalf("Chat() error: %v", err) } @@ -195,8 +195,8 @@ func TestProvider_ChatRoundTrip(t *testing.T) { func TestProvider_GetDefaultModel(t *testing.T) { p := NewProvider("test-token") - if got := p.GetDefaultModel(); got != "claude-sonnet-4-5-20250929" { - t.Errorf("GetDefaultModel() = %q, want %q", got, "claude-sonnet-4-5-20250929") + if got := p.GetDefaultModel(); got != "claude-sonnet-4.6" { + t.Errorf("GetDefaultModel() = %q, want %q", got, "claude-sonnet-4.6") } } @@ -247,7 +247,7 @@ func TestProvider_ChatUsesTokenSource(t *testing.T) { return "refreshed-token", nil }, server.URL) - _, err := p.Chat(t.Context(), []Message{{Role: "user", Content: "hello"}}, nil, "claude-sonnet-4-5-20250929", map[string]interface{}{}) + _, err := p.Chat(t.Context(), []Message{{Role: "user", Content: "hello"}}, nil, "claude-sonnet-4.6", map[string]interface{}{}) if err != nil { t.Fatalf("Chat() error: %v", err) } diff --git a/pkg/providers/claude_cli_provider_test.go b/pkg/providers/claude_cli_provider_test.go index 2c68e6809..945f5bd4f 100644 --- a/pkg/providers/claude_cli_provider_test.go +++ b/pkg/providers/claude_cli_provider_test.go @@ -336,7 +336,7 @@ func TestChat_PassesModelFlag(t *testing.T) { _, err := p.Chat(context.Background(), []Message{ {Role: "user", Content: "Hi"}, - }, nil, "claude-sonnet-4-5-20250929", nil) + }, nil, "claude-sonnet-4.6", nil) if err != nil { t.Fatalf("Chat() error = %v", err) } @@ -346,7 +346,7 @@ func TestChat_PassesModelFlag(t *testing.T) { if !strings.Contains(args, "--model") { t.Errorf("CLI args missing --model, got: %s", args) } - if !strings.Contains(args, "claude-sonnet-4-5-20250929") { + if !strings.Contains(args, "claude-sonnet-4.6") { t.Errorf("CLI args missing model name, got: %s", args) } } @@ -417,9 +417,9 @@ func TestChat_EmptyWorkspaceDoesNotSetDir(t *testing.T) { func TestCreateProvider_ClaudeCli(t *testing.T) { cfg := config.DefaultConfig() cfg.ModelList = []config.ModelConfig{ - {ModelName: "claude-sonnet-4", Model: "claude-cli/claude-sonnet-4-20250514", Workspace: "/test/ws"}, + {ModelName: "claude-sonnet-4.6", Model: "claude-cli/claude-sonnet-4.6", Workspace: "/test/ws"}, } - cfg.Agents.Defaults.Model = "claude-sonnet-4" + cfg.Agents.Defaults.Model = "claude-sonnet-4.6" provider, _, err := CreateProvider(cfg) if err != nil { diff --git a/pkg/providers/claude_provider_test.go b/pkg/providers/claude_provider_test.go index 13bbde1fc..b1bcd8b40 100644 --- a/pkg/providers/claude_provider_test.go +++ b/pkg/providers/claude_provider_test.go @@ -48,7 +48,7 @@ func TestClaudeProvider_ChatRoundTrip(t *testing.T) { provider := newClaudeProviderWithDelegate(delegate) messages := []Message{{Role: "user", Content: "Hello"}} - resp, err := provider.Chat(t.Context(), messages, nil, "claude-sonnet-4-5-20250929", map[string]interface{}{"max_tokens": 1024}) + resp, err := provider.Chat(t.Context(), messages, nil, "claude-sonnet-4.6", map[string]interface{}{"max_tokens": 1024}) if err != nil { t.Fatalf("Chat() error: %v", err) } @@ -65,8 +65,8 @@ func TestClaudeProvider_ChatRoundTrip(t *testing.T) { func TestClaudeProvider_GetDefaultModel(t *testing.T) { 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") + if got := p.GetDefaultModel(); got != "claude-sonnet-4.6" { + t.Errorf("GetDefaultModel() = %q, want %q", got, "claude-sonnet-4.6") } } diff --git a/pkg/providers/factory_provider.go b/pkg/providers/factory_provider.go index c1b13434d..74fe8a36c 100644 --- a/pkg/providers/factory_provider.go +++ b/pkg/providers/factory_provider.go @@ -40,7 +40,7 @@ func createCodexAuthProvider() (LLMProvider, error) { // If no prefix is specified, it defaults to "openai". // Examples: // - "openai/gpt-4o" -> ("openai", "gpt-4o") -// - "anthropic/claude-3" -> ("anthropic", "claude-3") +// - "anthropic/claude-sonnet-4.6" -> ("anthropic", "claude-sonnet-4.6") // - "gpt-4o" -> ("openai", "gpt-4o") // default protocol func ExtractProtocol(model string) (protocol, modelID string) { model = strings.TrimSpace(model) diff --git a/pkg/providers/factory_provider_test.go b/pkg/providers/factory_provider_test.go index 78781c0b2..6b133101a 100644 --- a/pkg/providers/factory_provider_test.go +++ b/pkg/providers/factory_provider_test.go @@ -26,9 +26,9 @@ func TestExtractProtocol(t *testing.T) { }, { name: "anthropic with prefix", - model: "anthropic/claude-3-sonnet", + model: "anthropic/claude-sonnet-4.6", wantProtocol: "anthropic", - wantModelID: "claude-3-sonnet", + wantModelID: "claude-sonnet-4.6", }, { name: "no prefix - defaults to openai", @@ -134,7 +134,7 @@ func TestCreateProviderFromConfig_DefaultAPIBase(t *testing.T) { func TestCreateProviderFromConfig_Anthropic(t *testing.T) { cfg := &config.ModelConfig{ ModelName: "test-anthropic", - Model: "anthropic/claude-3-sonnet", + Model: "anthropic/claude-sonnet-4.6", APIKey: "test-key", } @@ -145,8 +145,8 @@ func TestCreateProviderFromConfig_Anthropic(t *testing.T) { if provider == nil { t.Fatal("CreateProviderFromConfig() returned nil provider") } - if modelID != "claude-3-sonnet" { - t.Errorf("modelID = %q, want %q", modelID, "claude-3-sonnet") + if modelID != "claude-sonnet-4.6" { + t.Errorf("modelID = %q, want %q", modelID, "claude-sonnet-4.6") } } @@ -171,7 +171,7 @@ func TestCreateProviderFromConfig_Antigravity(t *testing.T) { func TestCreateProviderFromConfig_ClaudeCLI(t *testing.T) { cfg := &config.ModelConfig{ ModelName: "test-claude-cli", - Model: "claude-cli/claude-sonnet-4-20250514", + Model: "claude-cli/claude-sonnet-4.6", } provider, modelID, err := CreateProviderFromConfig(cfg) @@ -181,8 +181,8 @@ func TestCreateProviderFromConfig_ClaudeCLI(t *testing.T) { if provider == nil { t.Fatal("CreateProviderFromConfig() returned nil provider") } - if modelID != "claude-sonnet-4-20250514" { - t.Errorf("modelID = %q, want %q", modelID, "claude-sonnet-4-20250514") + if modelID != "claude-sonnet-4.6" { + t.Errorf("modelID = %q, want %q", modelID, "claude-sonnet-4.6") } } diff --git a/pkg/providers/factory_test.go b/pkg/providers/factory_test.go index c676e40ec..5680f23b3 100644 --- a/pkg/providers/factory_test.go +++ b/pkg/providers/factory_test.go @@ -79,7 +79,7 @@ func TestResolveProviderSelection(t *testing.T) { { name: "anthropic oauth routes to claude auth provider", setup: func(cfg *config.Config) { - cfg.Agents.Defaults.Model = "claude-sonnet-4-5-20250929" + cfg.Agents.Defaults.Model = "claude-sonnet-4.6" cfg.Providers.Anthropic.AuthMethod = "oauth" }, wantType: providerTypeClaudeAuth, @@ -276,7 +276,7 @@ func TestCreateProviderReturnsClaudeProviderForAnthropicOAuth(t *testing.T) { cfg.ModelList = []config.ModelConfig{ { ModelName: "test-claude-oauth", - Model: "anthropic/claude-3-sonnet", + Model: "anthropic/claude-sonnet-4.6", AuthMethod: "oauth", }, }