Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,914 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import { useRef, useEffect } from "react";
import API_CONFIG from "../../../config/api";
export const useBenchmarkPolling = (
sessionId,
setGenerationLogs,
setGenerationComplete,
onComplete
) => {
const pollingIntervalRef = useRef(null);
const startPolling = () => {
if (pollingIntervalRef.current) {
clearInterval(pollingIntervalRef.current);
}
pollingIntervalRef.current = setInterval(async () => {
try {
const logsResponse = await fetch(
`${API_CONFIG.BASE_URL}/benchmark-progress/${sessionId}`
);
if (logsResponse.ok) {
const logsResult = await logsResponse.json();
if (logsResult.logs) {
setGenerationLogs((prevLogs) => {
if (logsResult.logs.length > prevLogs.length) {
return logsResult.logs;
}
return prevLogs;
});
}
// Vérifier s'il y a des erreurs dans les logs
const hasError = logsResult.logs.some(
(log) =>
log.includes("Error") ||
log.includes("ERROR") ||
log.includes("Failed") ||
log.includes("RATE_LIMIT_EXCEEDED") ||
log.includes("heavy load") ||
log.includes("rate limit")
);
if (hasError) {
setGenerationComplete(true);
clearInterval(pollingIntervalRef.current);
if (onComplete) {
onComplete({
success: false,
error:
"An error occurred during benchmark generation. Please try again later.",
sessionId,
});
}
return;
}
if (logsResult.is_completed) {
setGenerationComplete(true);
clearInterval(pollingIntervalRef.current);
if (onComplete) {
onComplete({
success: true,
sessionId,
logs: logsResult.logs,
});
}
}
} else {
const errorData = await logsResponse.json();
setGenerationComplete(true);
clearInterval(pollingIntervalRef.current);
if (onComplete) {
onComplete({
success: false,
error: errorData.error || "Unknown error",
sessionId,
});
}
}
} catch (error) {
setGenerationComplete(true);
clearInterval(pollingIntervalRef.current);
if (onComplete) {
onComplete({
success: false,
error: error.message,
sessionId,
});
}
}
}, 2000);
};
useEffect(() => {
return () => {
if (pollingIntervalRef.current) {
clearInterval(pollingIntervalRef.current);
}
};
}, []);
return { startPolling };
};
|