Fix model selector being empty after page refresh

## Problem
After page refresh, the model selector would be empty even though the
authentication provider was restored and models were loaded successfully.
Users had to manually click "reload models" to populate the selector.

## Root Cause
The context state wasn't being properly updated after models were loaded
during provider restoration. The provider had the models, but React
components weren't re-rendering to show them.

## Solution
- **Added forced re-render**: Added extra `setAuthStateVersion()` call after
  model loading to trigger React context update
- **Auto-load models on restore**: Provider restoration now automatically
  loads models and restores saved model selection
- **Improved error handling**: Better error handling during model restoration

## Technical Details
- Modified `restoreProviderWithModels()` to force context re-render
- Ensured model loading happens immediately when provider is restored
- Maintained existing model persistence functionality
- Cleaned up debugging logs

## User Experience
- ✅ **Seamless model selection**: Model selector is populated immediately after refresh
- ✅ **Persistent choice**: Previously selected model is automatically restored
- ✅ **No manual intervention**: No need to click "reload models" button

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jerome 2025-06-12 14:38:52 +01:00
commit d9e63a790e
No known key found for this signature in database

View file

@ -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<InferenceResponse> => {
if (!provider) {
@ -194,6 +224,7 @@ export function InferenceContextProvider({ children }: InferenceProviderProps) {
isAuthenticated: provider?.isAuthenticated || false,
};
return (
<InferenceContext.Provider value={contextValue}>
{children}