Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import { useState, useRef, useEffect } from "react"; | |
// Simulation time in milliseconds for pre-calculated documents | |
const SIMULATION_DURATION = 8000; // 8 secondes au total | |
const STEP_DURATION = SIMULATION_DURATION / 5; // Durée de chaque étape | |
// Starting messages with their timing | |
const STARTING_MESSAGES = [ | |
{ message: "Initializing evaluation environment", step: 1, totalSteps: 5 }, | |
{ message: "Finding available model providers", step: 2, totalSteps: 5 }, | |
{ message: "Starting evaluation process", step: 3, totalSteps: 5 }, | |
{ message: "Evaluating models", step: 4, totalSteps: 5 }, | |
{ message: "Storing evaluation results", step: 5, totalSteps: 5 }, | |
]; | |
export const useSimulation = (onComplete, shouldStart = false) => { | |
const [startingMessageIndex, setStartingMessageIndex] = useState(0); | |
const [evaluationComplete, setEvaluationComplete] = useState(false); | |
const timeoutsRef = useRef([]); | |
const hasInitializedRef = useRef(false); | |
// Effet pour démarrer la simulation si shouldStart est true | |
useEffect(() => { | |
if (!shouldStart || hasInitializedRef.current) return; | |
// Marquer comme initialisé | |
hasInitializedRef.current = true; | |
console.log("Simulation starting with shouldStart =", shouldStart); | |
// Programmer des timeouts séquentiels pour chaque étape | |
for (let i = 1; i < STARTING_MESSAGES.length; i++) { | |
const timeout = setTimeout(() => { | |
console.log(`Setting message index to ${i}`); | |
setStartingMessageIndex(i); | |
}, i * STEP_DURATION); | |
timeoutsRef.current.push(timeout); | |
} | |
// Programmer la fin de la simulation | |
const completeTimeout = setTimeout(() => { | |
console.log("Completing simulation"); | |
setEvaluationComplete(true); | |
if (onComplete) { | |
onComplete(); | |
} | |
}, SIMULATION_DURATION); | |
timeoutsRef.current.push(completeTimeout); | |
return () => { | |
// Nettoyer tous les timeouts lors du démontage | |
timeoutsRef.current.forEach(clearTimeout); | |
}; | |
}, [shouldStart, onComplete]); | |
return { | |
startingMessageIndex, | |
evaluationComplete, | |
currentMessage: STARTING_MESSAGES[startingMessageIndex], | |
}; | |
}; | |