From 8586bc24763ecb89593e1b4139bfa43f74e51daa Mon Sep 17 00:00:00 2001 From: avi Date: Thu, 17 Sep 2026 14:26:16 -0500 Subject: [PATCH] =?UTF-8?q?Summarize=20always=20shows=20a=20percentage:=20?= =?UTF-8?q?the=20pre-token=20wait=20state=20read=20'Summarizing=E2=80=A6?= =?UTF-8?q?=20waiting=20for=20model'=20with=20no=20number;=20now=20'Summar?= =?UTF-8?q?izing=E2=80=A6=200%=20waiting=20for=20model'=20everywhere=20it?= =?UTF-8?q?=20appears=20(jobProgress,=20both=20detail=20labels,=20reproces?= =?UTF-8?q?s=20initial=20busy).=20Tests=20updated.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/kotlin/com/shonar/desktop/DesktopState.kt | 10 ++++++---- app/src/main/kotlin/com/shonar/desktop/Screens.kt | 4 ++-- .../test/kotlin/com/shonar/desktop/JobProgressTest.kt | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt b/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt index c945efc..9700edb 100644 --- a/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt +++ b/app/src/main/kotlin/com/shonar/desktop/DesktopState.kt @@ -1514,7 +1514,8 @@ class DesktopState(private val appDir: File = defaultAppDir()) { pollJob = scope.launch { synchronized(runningGate) { runningSet += d0.file.name } try { - d0.busy = if (job == "transcribe") "Re-transcribing…" else "Summarizing…" + d0.busy = if (job == "transcribe") "Re-transcribing…" + else "Summarizing… 0%" d0.uploadProgress = null d0.error = null _detail.value = d0.copy() @@ -1669,9 +1670,10 @@ class DesktopState(private val appDir: File = defaultAppDir()) { if (s.progress != null) LiveProgress("summarizing… ${s.progress}%", s.progress / 100f) // No tokens yet: the LLM is cold or the server is busy - // queueing. Saying so (and for how long) beats a bar - // that looks frozen. - else LiveProgress("summarizing… waiting for model" + + // queueing. Still show a number (0%) — a summarize must + // always display a percentage (user request) — plus the + // reason and wait time so 0% doesn't look frozen. + else LiveProgress("summarizing… 0% waiting for model" + waitSuffix(s.startedAt, nowMs), null) else -> null } diff --git a/app/src/main/kotlin/com/shonar/desktop/Screens.kt b/app/src/main/kotlin/com/shonar/desktop/Screens.kt index 22230e6..915f661 100644 --- a/app/src/main/kotlin/com/shonar/desktop/Screens.kt +++ b/app/src/main/kotlin/com/shonar/desktop/Screens.kt @@ -779,7 +779,7 @@ fun DetailScreen(state: DesktopState) { val label = when { it.status == "running" && it.progress != null -> "Summarizing… ${it.progress}%" - it.status == "running" -> "Summarizing… waiting for model" + + it.status == "running" -> "Summarizing… 0% waiting for model" + DesktopState.waitSuffix(it.startedAt, System.currentTimeMillis()) else -> "Summary queued" + DesktopState.waitSuffix(it.createdAt, System.currentTimeMillis()) @@ -976,7 +976,7 @@ fun DetailScreen(state: DesktopState) { DesktopState.waitSuffix(sJob?.createdAt, System.currentTimeMillis()) sProg != null && sProg > 0 -> "Summarizing… $sProg%" - else -> "Summarizing… waiting for model" + + else -> "Summarizing… 0% waiting for model" + DesktopState.waitSuffix(sJob?.startedAt, System.currentTimeMillis()) }) diff --git a/app/src/test/kotlin/com/shonar/desktop/JobProgressTest.kt b/app/src/test/kotlin/com/shonar/desktop/JobProgressTest.kt index 06bfb8e..90ad439 100644 --- a/app/src/test/kotlin/com/shonar/desktop/JobProgressTest.kt +++ b/app/src/test/kotlin/com/shonar/desktop/JobProgressTest.kt @@ -45,7 +45,7 @@ class JobProgressTest { val p = DesktopState.jobProgress( listOf(job("transcribe", "succeeded"), job("summarize", "running")), ) - assertEquals("summarizing… waiting for model", p?.label) + assertEquals("summarizing… 0% waiting for model", p?.label) assertNull(p?.fraction) } @@ -67,7 +67,7 @@ class JobProgressTest { .withNano(0).toString() val p = DesktopState.jobProgress( listOf(job("summarize", "running", startedIso = iso)), nowMs = t0) - assertEquals("summarizing… waiting for model · 1:23", p?.label) + assertEquals("summarizing… 0% waiting for model · 1:23", p?.label) } @Test fun `waitSuffix formats and ignores unknowns`() {