diff --git a/src/contexts/InferenceContext.tsx b/src/contexts/InferenceContext.tsx index 08dea4a..48a35a8 100644 --- a/src/contexts/InferenceContext.tsx +++ b/src/contexts/InferenceContext.tsx @@ -78,26 +78,56 @@ export function InferenceContextProvider({ children }: InferenceProviderProps) { setAuthStateVersion(prev => prev + 1); }, []); + // Helper function to restore provider and load models + const restoreProviderWithModels = useCallback(async (restoredProvider: InferenceProvider) => { + setProviderState(restoredProvider); + setAuthStateVersion(prev => prev + 1); + + try { + await restoredProvider.loadModels(); + + // Restore saved model selection + const savedModelId = localStorage.getItem('selected_model_id'); + + if (savedModelId && restoredProvider.models.find(m => m.id === savedModelId)) { + restoredProvider.selectModel(savedModelId); + setSelectedModelId(savedModelId); + } else { + // Clear invalid saved model + if (savedModelId) { + localStorage.removeItem('selected_model_id'); + } + setSelectedModelId(restoredProvider.selectedModel?.id); + } + + // Force a re-render to update context with loaded models + setAuthStateVersion(prev => prev + 1); + } catch (error) { + console.error('Failed to load models on provider restore:', error); + setError(error instanceof Error ? error.message : 'Failed to load models'); + } + }, []); + // Auto-restore provider with stored credentials on mount useEffect(() => { const tryRestoreProvider = async () => { // Try API provider first const apiProvider = new OpenRouterApiProvider(); if (apiProvider.isAuthenticated) { - setProvider(apiProvider); + await restoreProviderWithModels(apiProvider); return; } // Try OAuth provider const oauthProvider = new OpenRouterOAuthProvider(); if (oauthProvider.isAuthenticated) { - setProvider(oauthProvider); + await restoreProviderWithModels(oauthProvider); return; } }; tryRestoreProvider().catch(console.error); - }, [setProvider]); + }, [restoreProviderWithModels]); const generateResponse = useCallback(async (request: InferenceRequest): Promise => { if (!provider) { @@ -194,6 +224,7 @@ export function InferenceContextProvider({ children }: InferenceProviderProps) { isAuthenticated: provider?.isAuthenticated || false, }; + return ( {children}