diff --git a/package.json b/package.json index 2d85e57..343775c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@troed/oc-ls-stats", - "version": "0.0.51", + "version": "0.0.52", "type": "module", "exports": { "./tui": { diff --git a/tui.tsx b/tui.tsx index bf937c3..0b4d7ae 100644 --- a/tui.tsx +++ b/tui.tsx @@ -48,9 +48,8 @@ type TrackerState = { prefillStartAt: number isGenerating: boolean generateSlotId: number | null - generateCapturedDecoded: number | null + generatePrevNd: number generateStartAt: number - generateMaxDecoded: number } function estimateStreamTokens(delta: string) { @@ -270,9 +269,8 @@ const tui: TuiPlugin = async (api) => { prefillStartAt: 0, isGenerating: false, generateSlotId: null, - generateCapturedDecoded: null, + generatePrevNd: 0, generateStartAt: 0, - generateMaxDecoded: 0, } const [version, setVersion] = createSignal(0) const [clock, setClock] = createSignal(Date.now()) @@ -392,35 +390,36 @@ const tui: TuiPlugin = async (api) => { const now = Date.now() const nd = generateSlot.next_token?.[0]?.n_decoded ?? 0 - if (nd > tracker.generateMaxDecoded) { - const isNew = tracker.generateMaxDecoded === 0 - const delta = nd - tracker.generateMaxDecoded - const dt = (now - tracker.generateStartAt) / 1000 - if (delta > 0 && dt > 0 && !isNew) { - tracker.lastGeneratedTps = delta / dt - debug(`gen slot=${slotId} nd=${nd} max=${tracker.generateMaxDecoded} delta=${delta} dt=${dt.toFixed(2)} tps=${tracker.lastGeneratedTps.toFixed(1)}`) + if (tracker.generateSlotId === slotId) { + if (nd > tracker.generatePrevNd) { + const dt = (now - tracker.generateStartAt) / 1000 + const delta = nd - tracker.generatePrevNd + if (dt > 0 && delta > 0) { + tracker.lastGeneratedTps = delta / dt + debug(`gen slot=${slotId} nd=${nd} prev=${tracker.generatePrevNd} delta=${delta} dt=${dt.toFixed(2)} tps=${tracker.lastGeneratedTps.toFixed(1)}`) + } + tracker.generatePrevNd = nd + tracker.generateStartAt = now + } else if (nd < tracker.generatePrevNd) { + tracker.generatePrevNd = nd + tracker.generateStartAt = now + tracker.lastGeneratedTps = 0 + debug(`gen slot=${slotId} nd=${nd} prev=${tracker.generatePrevNd} counter reset`) + } else { + debug(`gen slot=${slotId} nd=${nd} prev=${tracker.generatePrevNd} stalled`) } - tracker.generateMaxDecoded = nd - tracker.generateCapturedDecoded = nd - tracker.generateStartAt = now - tracker.generateSlotId = slotId - } else if (nd < tracker.generateMaxDecoded) { - tracker.generateCapturedDecoded = nd - tracker.generateStartAt = now - tracker.lastGeneratedTps = 0 - debug(`gen slot=${slotId} nd=${nd} max=${tracker.generateMaxDecoded} counter reset`) } else { - debug(`gen slot=${slotId} nd=${nd} max=${tracker.generateMaxDecoded} stalled`) - tracker.generateMaxDecoded = 0 + tracker.generateSlotId = slotId + tracker.generatePrevNd = nd + tracker.generateStartAt = now tracker.lastGeneratedTps = 0 - genEnded = true + debug(`gen new slot id=${slotId} nd=${nd}`) } } else { if (tracker.isGenerating) { tracker.generateSlotId = null - tracker.generateCapturedDecoded = null + tracker.generatePrevNd = 0 tracker.generateStartAt = 0 - tracker.generateMaxDecoded = 0 tracker.lastGeneratedTps = 0 genEnded = true debug(`gen no slot found ending`)