webui: fix prompt progress ETA calculation (#18468)
* webui: fix prompt progress ETA calculation * handle case done === 0
This commit is contained in:
parent
c9a3b40d65
commit
51a48720b8
Binary file not shown.
|
|
@ -6,6 +6,7 @@ export interface LiveProcessingStats {
|
|||
totalTokens: number;
|
||||
timeMs: number;
|
||||
tokensPerSecond: number;
|
||||
etaSecs?: number;
|
||||
}
|
||||
|
||||
export interface LiveGenerationStats {
|
||||
|
|
@ -82,6 +83,15 @@ export function useProcessingState(): UseProcessingStateReturn {
|
|||
}
|
||||
});
|
||||
|
||||
function getETASecs(done: number, total: number, elapsedMs: number): number | undefined {
|
||||
const elapsedSecs = elapsedMs / 1000;
|
||||
const progressETASecs =
|
||||
done === 0 || elapsedSecs < 0.5
|
||||
? undefined // can be the case for the 0% progress report
|
||||
: elapsedSecs * (total / done - 1);
|
||||
return progressETASecs;
|
||||
}
|
||||
|
||||
function startMonitoring(): void {
|
||||
if (isMonitoring) return;
|
||||
isMonitoring = true;
|
||||
|
|
@ -178,6 +188,12 @@ export function useProcessingState(): UseProcessingStateReturn {
|
|||
const actualProcessed = processed - cache;
|
||||
const actualTotal = total - cache;
|
||||
const percent = Math.round((actualProcessed / actualTotal) * 100);
|
||||
const eta = getETASecs(actualProcessed, actualTotal, processingState.promptProgress.time_ms);
|
||||
|
||||
if (eta !== undefined) {
|
||||
const etaSecs = Math.ceil(eta);
|
||||
return `Processing ${percent}% (ETA: ${etaSecs}s)`;
|
||||
}
|
||||
|
||||
return `Processing ${percent}%`;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -303,11 +303,17 @@ class ChatStore {
|
|||
const currentConfig = config();
|
||||
const outputTokensMax = currentConfig.max_tokens || -1;
|
||||
|
||||
// Note: for timings data, the n_prompt does NOT include cache tokens
|
||||
const contextUsed = promptTokens + cacheTokens + predictedTokens;
|
||||
const outputTokensUsed = predictedTokens;
|
||||
|
||||
// Note: for prompt progress, the "processed" DOES include cache tokens
|
||||
// we need to exclude them to get the real prompt tokens processed count
|
||||
const progressCache = promptProgress?.cache || 0;
|
||||
const progressActualDone = (promptProgress?.processed ?? 0) - progressCache;
|
||||
const progressActualTotal = (promptProgress?.total ?? 0) - progressCache;
|
||||
const progressPercent = promptProgress
|
||||
? Math.round((promptProgress.processed / promptProgress.total) * 100)
|
||||
? Math.round((progressActualDone / progressActualTotal) * 100)
|
||||
: undefined;
|
||||
|
||||
return {
|
||||
|
|
|
|||
Loading…
Reference in New Issue