fix: v0.0.48 - track max n_decoded globally to handle slot disappear/reappear

- Use generateMaxDecoded to track highest n_decoded seen across all polls
- Detect resets when nd drops below max (even if slot disappeared and reappeared)
- Simplified logic: only compare against max, not per-slot baseline
- Removed generateSlotId tracking (no longer needed)
This commit is contained in:
Troed Sångberg
2026-06-13 23:27:21 +02:00
parent d711364d93
commit c299f430ac
2 changed files with 18 additions and 24 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@troed/oc-ls-stats",
"version": "0.0.47",
"version": "0.0.48",
"type": "module",
"exports": {
"./tui": {
+17 -23
View File
@@ -50,6 +50,7 @@ type TrackerState = {
generateSlotId: number | null
generateCapturedDecoded: number | null
generateStartAt: number
generateMaxDecoded: number
}
function estimateStreamTokens(delta: string) {
@@ -271,6 +272,7 @@ const tui: TuiPlugin = async (api) => {
generateSlotId: null,
generateCapturedDecoded: null,
generateStartAt: 0,
generateMaxDecoded: 0,
}
const [version, setVersion] = createSignal(0)
const [clock, setClock] = createSignal(Date.now())
@@ -390,34 +392,26 @@ const tui: TuiPlugin = async (api) => {
const now = Date.now()
const nd = generateSlot.next_token?.[0]?.n_decoded ?? 0
debug(`gen slot=${slotId} nd=${nd} prevNd=${tracker.generateCapturedDecoded} same=${tracker.generateSlotId === slotId} tps=${tracker.lastGeneratedTps}`)
if (tracker.generateSlotId === slotId) {
if (tracker.generateCapturedDecoded !== null) {
if (nd < tracker.generateCapturedDecoded) {
tracker.generateCapturedDecoded = nd
tracker.generateStartAt = now
tracker.lastGeneratedTps = 0
debug(`gen counter reset nd=${nd}`)
} else {
const dt = (now - tracker.generateStartAt) / 1000
const delta = nd - tracker.generateCapturedDecoded
if (dt > 0 && delta > 0) {
tracker.lastGeneratedTps = delta / dt
debug(`gen delta=${delta} dt=${dt.toFixed(2)} tps=${tracker.lastGeneratedTps.toFixed(1)}`)
} else if (delta === 0) {
tracker.lastGeneratedTps = 0
genEnded = true
debug(`gen stalled delta=${delta}`)
}
}
if (nd > tracker.generateMaxDecoded) {
const delta = nd - tracker.generateMaxDecoded
const dt = (now - tracker.generateStartAt) / 1000
if (delta > 0 && dt > 0) {
tracker.lastGeneratedTps = delta / dt
debug(`gen slot=${slotId} nd=${nd} max=${tracker.generateMaxDecoded} delta=${delta} dt=${dt.toFixed(2)} tps=${tracker.lastGeneratedTps.toFixed(1)}`)
}
} else {
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 new slot id=${slotId} nd=${nd}`)
debug(`gen slot=${slotId} nd=${nd} max=${tracker.generateMaxDecoded} counter reset`)
} else {
debug(`gen slot=${slotId} nd=${nd} max=${tracker.generateMaxDecoded} stalled`)
tracker.lastGeneratedTps = 0
genEnded = true
}
} else {
if (tracker.isGenerating) {