diff --git a/src/features/background-agent/fallback-retry-handler.test.ts b/src/features/background-agent/fallback-retry-handler.test.ts index 9eb34355d..2f53ab755 100644 --- a/src/features/background-agent/fallback-retry-handler.test.ts +++ b/src/features/background-agent/fallback-retry-handler.test.ts @@ -431,26 +431,26 @@ describe("tryFallbackRetry", () => { }) describe("#given disconnected fallback providers with connected preferred provider", () => { - test("keeps fallback entry and selects connected preferred provider", async () => { + test("skips explicit-provider fallback entries when none of their providers are connected", async () => { readProviderModelsCacheMock.mockReturnValueOnce({ connected: ["provider-a"], models: {}, updatedAt: new Date("2026-05-16T00:00:00.000Z").toISOString(), }) - selectFallbackProviderMock.mockImplementationOnce( - (_providers: string[], preferredProviderID?: string) => preferredProviderID ?? "provider-b", - ) const args = createDefaultArgs({ fallbackChain: [{ model: "fallback-model-1", providers: ["provider-b"], variant: undefined }], model: { providerID: "provider-a", modelID: "original-model" }, }) + const providerCallsBefore = selectFallbackProviderMock.mock.calls.length + const result = await tryFallbackRetry(args) - expect(result).toBe(true) + expect(result).toBe(false) expect(args.task.model?.providerID).toBe("provider-a") - expect(args.task.model?.modelID).toBe("fallback-model-1") + expect(args.task.model?.modelID).toBe("original-model") + expect(selectFallbackProviderMock.mock.calls.length).toBe(providerCallsBefore) }) }) diff --git a/src/features/background-agent/fallback-retry-handler.ts b/src/features/background-agent/fallback-retry-handler.ts index f01807c2e..7335659a3 100644 --- a/src/features/background-agent/fallback-retry-handler.ts +++ b/src/features/background-agent/fallback-retry-handler.ts @@ -80,14 +80,10 @@ export async function tryFallbackRetry(args: { const providerModelsCache = deps.readProviderModelsCache() const connectedProviders = providerModelsCache?.connected ?? deps.readConnectedProvidersCache() const connectedSet = connectedProviders ? new Set(connectedProviders.map(p => p.toLowerCase())) : null - const preferredProvider = task.model?.providerID?.toLowerCase() const isReachable = (entry: FallbackEntry): boolean => { if (!connectedSet) return true - if (entry.providers.some((provider) => connectedSet.has(provider.toLowerCase()))) { - return true - } - return preferredProvider ? connectedSet.has(preferredProvider) : false + return entry.providers.some((provider) => connectedSet.has(provider.toLowerCase())) } let selectedAttemptCount = attemptCount