Spaces:
Running on Zero
Running on Zero
| import { useEffect } from 'react'; | |
| import { getSettingsPreferences, listControlNets, listModels } from '../api/client'; | |
| import { useStore } from '../store/useStore'; | |
| import { getDefaultModel, getModelSelectionUpdates } from '../lib/settings'; | |
| import { useShallow } from 'zustand/react/shallow'; | |
| export function useGenerationBootstrap() { | |
| const { availableModels, setModels, setControlNets, setSettings } = useStore(useShallow((state) => ({ | |
| availableModels: state.availableModels, | |
| setModels: state.setModels, | |
| setControlNets: state.setControlNets, | |
| setSettings: state.setSettings, | |
| }))); | |
| useEffect(() => { | |
| let cancelled = false; | |
| const loadModels = async () => { | |
| try { | |
| const models = await listModels(); | |
| if (cancelled) return; | |
| setModels(models); | |
| const currentSettings = useStore.getState().settings; | |
| if (!currentSettings.model_path && models.length > 0) { | |
| const defaultModel = getDefaultModel(models); | |
| if (defaultModel) { | |
| setSettings(getModelSelectionUpdates(defaultModel, models)); | |
| } | |
| } | |
| } catch (error) { | |
| console.error('Failed to load models', error); | |
| } | |
| }; | |
| const loadControlNets = async () => { | |
| try { | |
| const response = await listControlNets(); | |
| if (!cancelled) { | |
| setControlNets(response.models); | |
| } | |
| } catch (error) { | |
| console.error('Failed to load ControlNet models', error); | |
| } | |
| }; | |
| const loadPreferences = async () => { | |
| try { | |
| const preferences = await getSettingsPreferences(); | |
| if (!cancelled) { | |
| setSettings({ | |
| torch_compile: !!preferences.torch_compile, | |
| vae_autotune: !!preferences.vae_autotune, | |
| }); | |
| } | |
| } catch (error) { | |
| console.error('Failed to load settings preferences', error); | |
| } | |
| }; | |
| if (availableModels.length === 0) { | |
| void loadModels(); | |
| } | |
| void loadControlNets(); | |
| void loadPreferences(); | |
| return () => { | |
| cancelled = true; | |
| }; | |
| }, [availableModels.length, setControlNets, setModels, setSettings]); | |
| } | |