LightDiffusion-Next / frontend /src /hooks /use-generation-bootstrap.ts
Aatricks's picture
Deploy ZeroGPU Gradio Space snapshot
b701455
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]);
}