diff --git a/packages/cli/src/ui/hooks/useQuotaAndFallback.test.ts b/packages/cli/src/ui/hooks/useQuotaAndFallback.test.ts index 7480075576..d0f81bea60 100644 --- a/packages/cli/src/ui/hooks/useQuotaAndFallback.test.ts +++ b/packages/cli/src/ui/hooks/useQuotaAndFallback.test.ts @@ -341,6 +341,46 @@ Your admin might have disabled the access. Contact them to enable the Preview Re expect(result.current.proQuotaRequest).toBeNull(); }); + + it('should handle ModelNotFoundError with invalid model correctly', async () => { + const { result } = renderHook(() => + useQuotaAndFallback({ + config: mockConfig, + historyManager: mockHistoryManager, + userTier: UserTierId.FREE, + setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError, + onShowAuthSelection: mockOnShowAuthSelection, + }), + ); + + const handler = setFallbackHandlerSpy.mock + .calls[0][0] as FallbackModelHandler; + + let promise: Promise; + const error = new ModelNotFoundError('model not found', 404); + + act(() => { + promise = handler('invalid-model', 'gemini-2.5-pro', error); + }); + + const request = result.current.proQuotaRequest; + expect(request).not.toBeNull(); + expect(request?.failedModel).toBe('invalid-model'); + expect(request?.isModelNotFoundError).toBe(true); + + const message = request!.message; + expect(message).toBe( + `Model "invalid-model" was not found or is invalid. +/model to switch models.`, + ); + + act(() => { + result.current.handleProQuotaChoice('retry_always'); + }); + + const intent = await promise!; + expect(intent).toBe('retry_always'); + }); }); }); diff --git a/packages/cli/src/ui/hooks/useQuotaAndFallback.ts b/packages/cli/src/ui/hooks/useQuotaAndFallback.ts index e00460eb15..60c91f3143 100644 --- a/packages/cli/src/ui/hooks/useQuotaAndFallback.ts +++ b/packages/cli/src/ui/hooks/useQuotaAndFallback.ts @@ -83,16 +83,21 @@ export function useQuotaAndFallback({ `/auth to switch to API key.`, ].filter(Boolean); message = messageLines.join('\n'); - } else if ( - error instanceof ModelNotFoundError && - VALID_GEMINI_MODELS.has(failedModel) - ) { + } else if (error instanceof ModelNotFoundError) { isModelNotFoundError = true; - const messageLines = [ - `It seems like you don't have access to ${failedModel}.`, - `Your admin might have disabled the access. Contact them to enable the Preview Release Channel.`, - ]; - message = messageLines.join('\n'); + if (VALID_GEMINI_MODELS.has(failedModel)) { + const messageLines = [ + `It seems like you don't have access to ${failedModel}.`, + `Your admin might have disabled the access. Contact them to enable the Preview Release Channel.`, + ]; + message = messageLines.join('\n'); + } else { + const messageLines = [ + `Model "${failedModel}" was not found or is invalid.`, + `/model to switch models.`, + ]; + message = messageLines.join('\n'); + } } else { const messageLines = [ `We are currently experiencing high demand.`,