File size: 2,018 Bytes
81e0b0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { useState, useRef, useEffect } from "react";

// Simulation time in milliseconds for pre-calculated documents
const SIMULATION_DURATION = 120000; // 2 minutes

// 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) => {
  const [startingMessageIndex, setStartingMessageIndex] = useState(0);
  const [evaluationComplete, setEvaluationComplete] = useState(false);
  const simulationTimeoutRef = useRef(null);
  const startingMessageIntervalRef = useRef(null);

  useEffect(() => {
    // Configure automatic interval for message changes
    startingMessageIntervalRef.current = setInterval(() => {
      setStartingMessageIndex((prev) => {
        if (prev < STARTING_MESSAGES.length - 1) {
          return prev + 1;
        }
        return prev;
      });
    }, SIMULATION_DURATION / STARTING_MESSAGES.length);

    // Complete after simulation duration
    simulationTimeoutRef.current = setTimeout(() => {
      setEvaluationComplete(true);
      if (startingMessageIntervalRef.current) {
        clearInterval(startingMessageIntervalRef.current);
      }
      setStartingMessageIndex(STARTING_MESSAGES.length - 1);
      if (onComplete) {
        onComplete();
      }
    }, SIMULATION_DURATION);

    return () => {
      if (simulationTimeoutRef.current) {
        clearTimeout(simulationTimeoutRef.current);
      }
      if (startingMessageIntervalRef.current) {
        clearInterval(startingMessageIntervalRef.current);
      }
    };
  }, [onComplete]);

  return {
    startingMessageIndex,
    evaluationComplete,
    currentMessage: STARTING_MESSAGES[startingMessageIndex],
  };
};