From fdfbffc9adf3eeac7879ce72c5c1a1a5d37a83ae Mon Sep 17 00:00:00 2001 From: ayattara Date: Wed, 9 Sep 2026 04:05:25 +0000 Subject: [PATCH] fix: honor auto fallback when model selection is unsupported --- .../internal/agent/runtime/lifecycle/start_model.go | 7 +++++++ .../lifecycle/start_model_executor_authority_test.go | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/apps/backend/internal/agent/runtime/lifecycle/start_model.go b/apps/backend/internal/agent/runtime/lifecycle/start_model.go index 28d252be85..4965022913 100644 --- a/apps/backend/internal/agent/runtime/lifecycle/start_model.go +++ b/apps/backend/internal/agent/runtime/lifecycle/start_model.go @@ -140,6 +140,13 @@ func applyStartModelPolicy( decision.SetModelCalled = true if err := applier.SetModel(ctx, policy.Model); err != nil { if sessionmodel.IsMethodNotFound(err) { + if policy.AutoFallback { + log.Debug("agent does not support model selection, continuing on provider default", + zap.String("model", policy.Model), zap.Error(err)) + decision = providerDefaultDecision(state, policy, ModelSelectionReasonSelectionUnsupported) + decision.SetModelCalled = true + return decision, nil + } unsupported, unavailableErr := unavailableStartModel(state, policy, ModelSelectionReasonSelectionUnsupported) unsupported.SetModelCalled = true return unsupported, unavailableErr diff --git a/apps/backend/internal/agent/runtime/lifecycle/start_model_executor_authority_test.go b/apps/backend/internal/agent/runtime/lifecycle/start_model_executor_authority_test.go index 7faf00a833..0542413564 100644 --- a/apps/backend/internal/agent/runtime/lifecycle/start_model_executor_authority_test.go +++ b/apps/backend/internal/agent/runtime/lifecycle/start_model_executor_authority_test.go @@ -79,6 +79,16 @@ func TestApplyStartModelPolicyExecutorAuthority(t *testing.T) { wantCalls: []string{"requested"}, wantErr: `requested model "requested" is unavailable (reason: selection_unsupported)`, }, + { + name: "auto fallback allows unsupported model selection", + state: modelState("requested"), + policy: StartModelPolicy{Model: "requested", AutoFallback: true}, + applierErrors: []error{methodNotFoundErr()}, + wantCalls: []string{"requested"}, + wantOutcome: ModelSelectionOutcomeProviderDefault, + wantReason: ModelSelectionReasonSelectionUnsupported, + wantWarning: true, + }, { name: "auto fallback allows absent requested model", state: modelState("executor-default"),