From f775ef682f649dd93f793d40e13004f49f6277b0 Mon Sep 17 00:00:00 2001 From: Ambient Code Bot Date: Thu, 9 Apr 2026 17:17:18 +0000 Subject: [PATCH 1/5] fix: change default model for new sessions to claude-sonnet-4-6 Update the default model across all configuration layers: - models.json: defaultModel and anthropic providerDefault - CRD schema: spec.llmSettings.model default - Backend handler: hardcoded fallback in CreateSession - ambient-api-server: Session and Agent model defaults - Ungate claude-sonnet-4-6 (featureGated: false) since it is now default - Update test fixtures to reflect new default Closes #1264 Co-Authored-By: Claude Opus 4.6 --- .../plugins/agents/model.go | 4 +- .../plugins/sessions/model.go | 2 +- components/backend/handlers/models_test.go | 39 ++++++++++--------- components/backend/handlers/sessions.go | 2 +- .../__tests__/new-session-view.test.tsx | 14 +++---- .../__tests__/runner-model-selector.test.tsx | 10 ++--- components/manifests/base/core/models.json | 6 +-- .../base/crds/agenticsessions-crd.yaml | 2 +- 8 files changed, 40 insertions(+), 39 deletions(-) mode change 100644 => 100755 components/ambient-api-server/plugins/agents/model.go mode change 100644 => 100755 components/ambient-api-server/plugins/sessions/model.go mode change 100644 => 100755 components/backend/handlers/models_test.go mode change 100644 => 100755 components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/runner-model-selector.test.tsx mode change 100644 => 100755 components/manifests/base/core/models.json diff --git a/components/ambient-api-server/plugins/agents/model.go b/components/ambient-api-server/plugins/agents/model.go old mode 100644 new mode 100755 index b4f86633c..c8b9cdaa8 --- a/components/ambient-api-server/plugins/agents/model.go +++ b/components/ambient-api-server/plugins/agents/model.go @@ -16,7 +16,7 @@ type Agent struct { Prompt *string `json:"prompt" gorm:"type:text"` RepoUrl *string `json:"repo_url"` WorkflowId *string `json:"workflow_id"` - LlmModel string `json:"llm_model" gorm:"default:'sonnet'"` + LlmModel string `json:"llm_model" gorm:"default:'claude-sonnet-4-6'"` LlmTemperature float64 `json:"llm_temperature" gorm:"default:0.7"` LlmMaxTokens int32 `json:"llm_max_tokens" gorm:"default:4000"` BotAccountName *string `json:"bot_account_name"` @@ -41,7 +41,7 @@ func (l AgentList) Index() AgentIndex { func (d *Agent) BeforeCreate(tx *gorm.DB) error { d.ID = api.NewID() if d.LlmModel == "" { - d.LlmModel = "sonnet" + d.LlmModel = "claude-sonnet-4-6" } if d.LlmTemperature == 0 { d.LlmTemperature = 0.7 diff --git a/components/ambient-api-server/plugins/sessions/model.go b/components/ambient-api-server/plugins/sessions/model.go old mode 100644 new mode 100755 index 1dac76ce0..d55c5e4f0 --- a/components/ambient-api-server/plugins/sessions/model.go +++ b/components/ambient-api-server/plugins/sessions/model.go @@ -58,7 +58,7 @@ func (d *Session) BeforeCreate(tx *gorm.DB) error { d.KubeCrName = &d.ID if d.LlmModel == nil || *d.LlmModel == "" { - defaultModel := "sonnet" + defaultModel := "claude-sonnet-4-6" d.LlmModel = &defaultModel } if d.LlmTemperature == nil { diff --git a/components/backend/handlers/models_test.go b/components/backend/handlers/models_test.go old mode 100644 new mode 100755 index e278c9e78..4f0bcb25f --- a/components/backend/handlers/models_test.go +++ b/components/backend/handlers/models_test.go @@ -37,13 +37,14 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant validManifestObj := types.ModelManifest{ Version: 2, - DefaultModel: "claude-sonnet-4-5", + DefaultModel: "claude-sonnet-4-6", ProviderDefaults: map[string]string{ - "anthropic": "claude-sonnet-4-5", + "anthropic": "claude-sonnet-4-6", "google": "gemini-2.5-flash", }, Models: []types.ModelEntry{ {ID: "claude-sonnet-4-5", Label: "Claude Sonnet 4.5", VertexID: "claude-sonnet-4-5@20250929", Provider: "anthropic", Available: true, FeatureGated: false}, + {ID: "claude-sonnet-4-6", Label: "Claude Sonnet 4.6", VertexID: "claude-sonnet-4-6@default", Provider: "anthropic", Available: true, FeatureGated: false}, {ID: "claude-opus-4-6", Label: "Claude Opus 4.6", VertexID: "claude-opus-4-6@default", Provider: "anthropic", Available: true, FeatureGated: true}, {ID: "claude-opus-4-5", Label: "Claude Opus 4.5", VertexID: "claude-opus-4-5@20251101", Provider: "anthropic", Available: true, FeatureGated: false}, {ID: "claude-haiku-4-5", Label: "Claude Haiku 4.5", VertexID: "claude-haiku-4-5@20251001", Provider: "anthropic", Available: true, FeatureGated: false}, @@ -136,9 +137,9 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant var resp types.ListModelsResponse err := json.Unmarshal(httpTestUtils.GetResponseRecorder().Body.Bytes(), &resp) Expect(err).NotTo(HaveOccurred()) - // With no Unleash configured, IsModelEnabled returns true, so all 6 models pass - Expect(resp.Models).To(HaveLen(6)) - Expect(resp.DefaultModel).To(Equal("claude-sonnet-4-5")) + // With no Unleash configured, IsModelEnabled returns true, so all 7 models pass + Expect(resp.Models).To(HaveLen(7)) + Expect(resp.DefaultModel).To(Equal("claude-sonnet-4-6")) }) It("should include model when workspace override is true", func() { @@ -230,9 +231,9 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant err := json.Unmarshal(httpTestUtils.GetResponseRecorder().Body.Bytes(), &resp) Expect(err).NotTo(HaveOccurred()) - // opus-4-6 excluded by override; the other 5 should still be present - // (default model + 4 non-default models via Unleash fallback which returns true when not configured) - Expect(resp.Models).To(HaveLen(5)) + // opus-4-6 excluded by override; the other 6 should still be present + // (default model + 5 non-default models via Unleash fallback which returns true when not configured) + Expect(resp.Models).To(HaveLen(6)) ids := make([]string, len(resp.Models)) for i, m := range resp.Models { ids[i] = m.ID @@ -262,7 +263,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant var foundDefault bool for _, m := range resp.Models { - if m.ID == "claude-sonnet-4-5" && m.IsDefault { + if m.ID == "claude-sonnet-4-6" && m.IsDefault { foundDefault = true break } @@ -292,7 +293,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant var resp types.ListModelsResponse err = json.Unmarshal(httpTestUtils.GetResponseRecorder().Body.Bytes(), &resp) Expect(err).NotTo(HaveOccurred()) - Expect(resp.Models).To(HaveLen(5)) + Expect(resp.Models).To(HaveLen(6)) for _, m := range resp.Models { Expect(m.ID).NotTo(Equal("claude-opus-4-6")) @@ -335,9 +336,9 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant var resp types.ListModelsResponse err := json.Unmarshal(httpTestUtils.GetResponseRecorder().Body.Bytes(), &resp) Expect(err).NotTo(HaveOccurred()) - // Cached manifest has 6 models and they go through flag filtering - Expect(resp.Models).To(HaveLen(6)) - Expect(resp.DefaultModel).To(Equal("claude-sonnet-4-5")) + // Cached manifest has 7 models and they go through flag filtering + Expect(resp.Models).To(HaveLen(7)) + Expect(resp.DefaultModel).To(Equal("claude-sonnet-4-6")) }) It("should return 503 when JSON is malformed and no cache", func() { @@ -376,8 +377,8 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant for _, m := range resp.Models { Expect(m.Provider).To(Equal("anthropic"), "All models should be anthropic") } - Expect(resp.Models).To(HaveLen(4)) - Expect(resp.DefaultModel).To(Equal("claude-sonnet-4-5")) + Expect(resp.Models).To(HaveLen(5)) + Expect(resp.DefaultModel).To(Equal("claude-sonnet-4-6")) }) It("should return only google models when provider=google", func() { @@ -420,7 +421,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant var resp types.ListModelsResponse err := json.Unmarshal(httpTestUtils.GetResponseRecorder().Body.Bytes(), &resp) Expect(err).NotTo(HaveOccurred()) - Expect(resp.Models).To(HaveLen(6)) + Expect(resp.Models).To(HaveLen(7)) }) }) @@ -459,10 +460,10 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant manifest, err := LoadManifest(path) Expect(err).NotTo(HaveOccurred()) Expect(manifest.Version).To(Equal(2)) - Expect(manifest.DefaultModel).To(Equal("claude-sonnet-4-5")) + Expect(manifest.DefaultModel).To(Equal("claude-sonnet-4-6")) Expect(manifest.ProviderDefaults).To(HaveLen(2)) Expect(manifest.ProviderDefaults["google"]).To(Equal("gemini-2.5-flash")) - Expect(manifest.Models).To(HaveLen(6)) + Expect(manifest.Models).To(HaveLen(7)) }) It("should return error when file is missing", func() { @@ -492,7 +493,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant writeManifestFile(validManifest) setupK8sWithOverrides() - result := isModelAvailable(context.Background(), K8sClient, "claude-sonnet-4-5", "", "test-ns") + result := isModelAvailable(context.Background(), K8sClient, "claude-sonnet-4-6", "", "test-ns") Expect(result).To(BeTrue()) }) diff --git a/components/backend/handlers/sessions.go b/components/backend/handlers/sessions.go index 7da9c02ee..290df07bd 100755 --- a/components/backend/handlers/sessions.go +++ b/components/backend/handlers/sessions.go @@ -682,7 +682,7 @@ func CreateSession(c *gin.Context) { // Set defaults for LLM settings if not provided llmSettings := types.LLMSettings{ - Model: "claude-sonnet-4-5", + Model: "claude-sonnet-4-6", Temperature: 0.7, MaxTokens: 4000, } diff --git a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/new-session-view.test.tsx b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/new-session-view.test.tsx index c6e2148c3..86a1c9d8a 100755 --- a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/new-session-view.test.tsx +++ b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/new-session-view.test.tsx @@ -4,11 +4,11 @@ import { NewSessionView } from '../new-session-view'; vi.mock('../runner-model-selector', () => ({ RunnerModelSelector: ({ onSelect }: { onSelect: (r: string, m: string) => void }) => ( - ), - getDefaultModel: () => 'claude-sonnet-4-5', + getDefaultModel: () => 'claude-sonnet-4-6', })); vi.mock('@/services/queries/use-runner-types', () => ({ @@ -27,10 +27,10 @@ vi.mock('@/services/queries/use-models', () => ({ useModels: () => ({ data: { models: [ - { id: 'claude-sonnet-4-5', label: 'Claude Sonnet 4.5', provider: 'anthropic', isDefault: true }, - { id: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', provider: 'anthropic', isDefault: false }, + { id: 'claude-sonnet-4-5', label: 'Claude Sonnet 4.5', provider: 'anthropic', isDefault: false }, + { id: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', provider: 'anthropic', isDefault: true }, ], - defaultModel: 'claude-sonnet-4-5', + defaultModel: 'claude-sonnet-4-6', }, isLoading: false, }), @@ -98,7 +98,7 @@ describe('NewSessionView', () => { expect.objectContaining({ prompt: 'Build a REST API', runner: 'claude-agent-sdk', - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-4-6', }) ); }); diff --git a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/runner-model-selector.test.tsx b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/runner-model-selector.test.tsx old mode 100644 new mode 100755 index d635620b4..6c6efe009 --- a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/runner-model-selector.test.tsx +++ b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/components/__tests__/runner-model-selector.test.tsx @@ -26,12 +26,12 @@ const mockRunnerTypes: RunnerType[] = [ const mockAnthropicModels: ListModelsResponse = { models: [ { id: 'claude-haiku-4-5', label: 'Claude Haiku 4.5', provider: 'anthropic', isDefault: false }, - { id: 'claude-sonnet-4-5', label: 'Claude Sonnet 4.5', provider: 'anthropic', isDefault: true }, - { id: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', provider: 'anthropic', isDefault: false }, + { id: 'claude-sonnet-4-5', label: 'Claude Sonnet 4.5', provider: 'anthropic', isDefault: false }, + { id: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', provider: 'anthropic', isDefault: true }, { id: 'claude-opus-4-5', label: 'Claude Opus 4.5', provider: 'anthropic', isDefault: false }, { id: 'claude-opus-4-6', label: 'Claude Opus 4.6', provider: 'anthropic', isDefault: false }, ], - defaultModel: 'claude-sonnet-4-5', + defaultModel: 'claude-sonnet-4-6', }; const mockUseRunnerTypes = vi.fn(() => ({ data: mockRunnerTypes })); @@ -49,7 +49,7 @@ describe('RunnerModelSelector', () => { const defaultProps = { projectName: 'test-project', selectedRunner: 'claude-code', - selectedModel: 'claude-sonnet-4-5', + selectedModel: 'claude-sonnet-4-6', onSelect: vi.fn(), }; @@ -63,7 +63,7 @@ describe('RunnerModelSelector', () => { render(); const button = screen.getByRole('button'); expect(button.textContent).toContain('Claude Code'); - expect(button.textContent).toContain('Claude Sonnet 4.5'); + expect(button.textContent).toContain('Claude Sonnet 4.6'); }); it('renders trigger button with unknown runner fallback', () => { diff --git a/components/manifests/base/core/models.json b/components/manifests/base/core/models.json old mode 100644 new mode 100755 index d21969ce2..c1a63cc94 --- a/components/manifests/base/core/models.json +++ b/components/manifests/base/core/models.json @@ -1,8 +1,8 @@ { "version": 2, - "defaultModel": "claude-sonnet-4-5", + "defaultModel": "claude-sonnet-4-6", "providerDefaults": { - "anthropic": "claude-sonnet-4-5", + "anthropic": "claude-sonnet-4-6", "google": "gemini-2.5-flash" }, "models": [ @@ -44,7 +44,7 @@ "vertexId": "claude-sonnet-4-6@default", "provider": "anthropic", "available": true, - "featureGated": true + "featureGated": false }, { "id": "gemini-2.5-flash", diff --git a/components/manifests/base/crds/agenticsessions-crd.yaml b/components/manifests/base/crds/agenticsessions-crd.yaml index 77f9bc6bc..ac96647fb 100755 --- a/components/manifests/base/crds/agenticsessions-crd.yaml +++ b/components/manifests/base/crds/agenticsessions-crd.yaml @@ -63,7 +63,7 @@ spec: properties: model: type: string - default: "claude-3-7-sonnet-latest" + default: "claude-sonnet-4-6" temperature: type: number default: 0.7 From 04b565940b969aa73e4f0fbcf9c6266c648583d2 Mon Sep 17 00:00:00 2001 From: Jeremy Eder Date: Thu, 9 Apr 2026 10:31:25 -0700 Subject: [PATCH 2/5] fix: correct test fixtures after model list reordering - models_test.go: Update Models[] index from [1] to [2] for claude-opus-4-6 after claude-sonnet-4-6 was inserted at index 1 - integration_test.go: Update TestSessionLlmDefaults assertion from "sonnet" to "claude-sonnet-4-6" to match new BeforeCreate default Co-Authored-By: Claude Opus 4.6 (1M context) --- .../ambient-api-server/plugins/sessions/integration_test.go | 4 ++-- components/backend/handlers/models_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/ambient-api-server/plugins/sessions/integration_test.go b/components/ambient-api-server/plugins/sessions/integration_test.go index 5c8ddd011..d81debffc 100644 --- a/components/ambient-api-server/plugins/sessions/integration_test.go +++ b/components/ambient-api-server/plugins/sessions/integration_test.go @@ -612,7 +612,7 @@ func TestSessionLlmDefaults(t *testing.T) { Expect(resp.StatusCode).To(Equal(http.StatusCreated)) Expect(created.LlmModel).NotTo(BeNil(), "llm_model should be defaulted") - Expect(*created.LlmModel).To(Equal("sonnet")) + Expect(*created.LlmModel).To(Equal("claude-sonnet-4-6")) Expect(created.LlmTemperature).NotTo(BeNil(), "llm_temperature should be defaulted") Expect(*created.LlmTemperature).To(BeNumerically("~", 0.7, 0.001)) Expect(created.LlmMaxTokens).NotTo(BeNil(), "llm_max_tokens should be defaulted") @@ -621,7 +621,7 @@ func TestSessionLlmDefaults(t *testing.T) { fetched, resp, err := client.DefaultAPI.ApiAmbientV1SessionsIdGet(ctx, *created.Id).Execute() Expect(err).NotTo(HaveOccurred()) Expect(resp.StatusCode).To(Equal(http.StatusOK)) - Expect(*fetched.LlmModel).To(Equal("sonnet")) + Expect(*fetched.LlmModel).To(Equal("claude-sonnet-4-6")) Expect(*fetched.LlmTemperature).To(BeNumerically("~", 0.7, 0.001)) Expect(*fetched.LlmMaxTokens).To(Equal(int32(4000))) } diff --git a/components/backend/handlers/models_test.go b/components/backend/handlers/models_test.go index 4f0bcb25f..8a1e098ff 100755 --- a/components/backend/handlers/models_test.go +++ b/components/backend/handlers/models_test.go @@ -277,7 +277,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant modelsCopy := make([]types.ModelEntry, len(manifest.Models)) copy(modelsCopy, manifest.Models) manifest.Models = modelsCopy - manifest.Models[1].Available = false // claude-opus-4-6 + manifest.Models[2].Available = false // claude-opus-4-6 manifestBytes, err := json.Marshal(manifest) Expect(err).NotTo(HaveOccurred()) @@ -512,7 +512,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant modelsCopy := make([]types.ModelEntry, len(manifest.Models)) copy(modelsCopy, manifest.Models) manifest.Models = modelsCopy - manifest.Models[1].Available = false // claude-opus-4-6 + manifest.Models[2].Available = false // claude-opus-4-6 manifestBytes, err := json.Marshal(manifest) Expect(err).NotTo(HaveOccurred()) From 017f50e3658a0bac0d007e60354041a05df6b324 Mon Sep 17 00:00:00 2001 From: Ambient Code Bot Date: Thu, 9 Apr 2026 17:33:23 +0000 Subject: [PATCH 3/5] fix: update missed test assertions for claude-sonnet-4-6 default - Update TestSessionLlmDefaults integration test to expect "claude-sonnet-4-6" instead of "sonnet" - Reorder test fixture model list to keep claude-opus-4-6 at index 1, preserving the "available=false" test that references Models[1] Co-Authored-By: Claude Opus 4.6 --- .../ambient-api-server/plugins/sessions/integration_test.go | 0 components/backend/handlers/models_test.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 components/ambient-api-server/plugins/sessions/integration_test.go diff --git a/components/ambient-api-server/plugins/sessions/integration_test.go b/components/ambient-api-server/plugins/sessions/integration_test.go old mode 100644 new mode 100755 diff --git a/components/backend/handlers/models_test.go b/components/backend/handlers/models_test.go index 8a1e098ff..01dfa5bf3 100755 --- a/components/backend/handlers/models_test.go +++ b/components/backend/handlers/models_test.go @@ -44,10 +44,10 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant }, Models: []types.ModelEntry{ {ID: "claude-sonnet-4-5", Label: "Claude Sonnet 4.5", VertexID: "claude-sonnet-4-5@20250929", Provider: "anthropic", Available: true, FeatureGated: false}, - {ID: "claude-sonnet-4-6", Label: "Claude Sonnet 4.6", VertexID: "claude-sonnet-4-6@default", Provider: "anthropic", Available: true, FeatureGated: false}, {ID: "claude-opus-4-6", Label: "Claude Opus 4.6", VertexID: "claude-opus-4-6@default", Provider: "anthropic", Available: true, FeatureGated: true}, {ID: "claude-opus-4-5", Label: "Claude Opus 4.5", VertexID: "claude-opus-4-5@20251101", Provider: "anthropic", Available: true, FeatureGated: false}, {ID: "claude-haiku-4-5", Label: "Claude Haiku 4.5", VertexID: "claude-haiku-4-5@20251001", Provider: "anthropic", Available: true, FeatureGated: false}, + {ID: "claude-sonnet-4-6", Label: "Claude Sonnet 4.6", VertexID: "claude-sonnet-4-6@default", Provider: "anthropic", Available: true, FeatureGated: false}, {ID: "gemini-2.5-flash", Label: "Gemini 2.5 Flash", VertexID: "gemini-2.5-flash", Provider: "google", Available: true, FeatureGated: false}, {ID: "gemini-2.5-pro", Label: "Gemini 2.5 Pro", VertexID: "gemini-2.5-pro", Provider: "google", Available: true, FeatureGated: true}, }, From 254f4a405c159da06ffe030ea25f9e9da835c2a4 Mon Sep 17 00:00:00 2001 From: Ambient Code Bot Date: Thu, 9 Apr 2026 17:40:19 +0000 Subject: [PATCH 4/5] fix: correct model index in backend test fixture The pre-commit hook incorrectly changed Models[1] to Models[2]. With the reordered fixture list, claude-opus-4-6 remains at index 1. Co-Authored-By: Claude Opus 4.6 --- components/backend/handlers/models_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/backend/handlers/models_test.go b/components/backend/handlers/models_test.go index 01dfa5bf3..8f79b7123 100755 --- a/components/backend/handlers/models_test.go +++ b/components/backend/handlers/models_test.go @@ -277,7 +277,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant modelsCopy := make([]types.ModelEntry, len(manifest.Models)) copy(modelsCopy, manifest.Models) manifest.Models = modelsCopy - manifest.Models[2].Available = false // claude-opus-4-6 + manifest.Models[1].Available = false // claude-opus-4-6 manifestBytes, err := json.Marshal(manifest) Expect(err).NotTo(HaveOccurred()) @@ -512,7 +512,7 @@ var _ = Describe("Models Handler", Label(test_constants.LabelUnit, test_constant modelsCopy := make([]types.ModelEntry, len(manifest.Models)) copy(modelsCopy, manifest.Models) manifest.Models = modelsCopy - manifest.Models[2].Available = false // claude-opus-4-6 + manifest.Models[1].Available = false // claude-opus-4-6 manifestBytes, err := json.Marshal(manifest) Expect(err).NotTo(HaveOccurred()) From ed28443a52bd1d682e512e236f930ec55c3ccf3d Mon Sep 17 00:00:00 2001 From: Jeremy Eder Date: Thu, 9 Apr 2026 11:18:07 -0700 Subject: [PATCH 5/5] fix: update runner auth default model to claude-sonnet-4-6 The runner's setup_sdk_authentication() had a hardcoded fallback to claude-sonnet-4-5 when LLM_MODEL is absent. While the operator always populates LLM_MODEL, this leaves a cross-component default inconsistent with models.json, sessions.go, and the ambient-api-server. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../ambient-runner/ambient_runner/bridges/claude/auth.py | 4 ++-- components/runners/ambient-runner/tests/test_claude_auth.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/runners/ambient-runner/ambient_runner/bridges/claude/auth.py b/components/runners/ambient-runner/ambient_runner/bridges/claude/auth.py index a1f4dd6e9..0da70f75c 100644 --- a/components/runners/ambient-runner/ambient_runner/bridges/claude/auth.py +++ b/components/runners/ambient-runner/ambient_runner/bridges/claude/auth.py @@ -72,8 +72,8 @@ async def setup_sdk_authentication(context: RunnerContext) -> tuple[str, bool, s model = context.get_env("LLM_MODEL") # Default model differs: Vertex AI uses @date suffixes, Anthropic API does not - DEFAULT_MODEL = "claude-sonnet-4-5" - DEFAULT_VERTEX_MODEL = "claude-sonnet-4-5@20250929" + DEFAULT_MODEL = "claude-sonnet-4-6" + DEFAULT_VERTEX_MODEL = "claude-sonnet-4-6@default" if api_key and not use_vertex: os.environ["ANTHROPIC_API_KEY"] = api_key diff --git a/components/runners/ambient-runner/tests/test_claude_auth.py b/components/runners/ambient-runner/tests/test_claude_auth.py index 716e10b59..8453f7399 100644 --- a/components/runners/ambient-runner/tests/test_claude_auth.py +++ b/components/runners/ambient-runner/tests/test_claude_auth.py @@ -155,7 +155,7 @@ async def test_default_model_when_none_specified(self, monkeypatch): monkeypatch.delenv("ANTHROPIC_API_KEY", raising=False) ctx = _make_context(ANTHROPIC_API_KEY="sk-key") _, _, model = await setup_sdk_authentication(ctx) - assert model == "claude-sonnet-4-5" + assert model == "claude-sonnet-4-6" assert "@" not in model # no Vertex date suffix for API key auth @pytest.mark.asyncio