|
import { useState, useRef, useEffect } from "react"; |
|
|
|
|
|
const SIMULATION_DURATION = 8000; |
|
const STEP_DURATION = SIMULATION_DURATION / 5; |
|
|
|
|
|
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); |
|
|
|
|
|
useEffect(() => { |
|
if (!shouldStart || hasInitializedRef.current) return; |
|
|
|
|
|
hasInitializedRef.current = true; |
|
console.log("Simulation starting with shouldStart =", shouldStart); |
|
|
|
|
|
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); |
|
} |
|
|
|
|
|
const completeTimeout = setTimeout(() => { |
|
console.log("Completing simulation"); |
|
setEvaluationComplete(true); |
|
if (onComplete) { |
|
onComplete(); |
|
} |
|
}, SIMULATION_DURATION); |
|
|
|
timeoutsRef.current.push(completeTimeout); |
|
|
|
return () => { |
|
|
|
timeoutsRef.current.forEach(clearTimeout); |
|
}; |
|
}, [shouldStart, onComplete]); |
|
|
|
return { |
|
startingMessageIndex, |
|
evaluationComplete, |
|
currentMessage: STARTING_MESSAGES[startingMessageIndex], |
|
}; |
|
}; |
|
|