Skip to content

v2.28.0 — perf pass: browser freeze fixes + latency tab hardening

Choose a tag to compare

@cheapestinference cheapestinference released this 19 Apr 15:36
· 1 commit to main since this release

Browser performance (fixes freezes under streaming load)

  • Narrow zustand selectors in ChatView, AppSidebar, SessionDetailView, SessionTasksKanban, UsageBar, MainShell, App — unrelated store mutations no longer re-render these components
  • Batched delta writes via new recordDelta() action (4 set() per delta → 1)
  • Coarse hasAnyActivity boolean subscription instead of raw lastActivity timestamp — stops per-delta ChatView re-renders
  • Stable messageGroups useMemo deps + module-level EMPTY_AGENTS fallback — MessageGroup memo now actually skips re-renders during streaming
  • React.memo on MessageGroup, MessageContent, ToolCard, ThinkingBlock
  • Virtualization threshold lowered 500 → 80 (typical mid-sized conversations now benefit)

Latency tab correctness

  • Skip effectiveTokensPerSecond when tool time dominates (>90% of gen time) — prevents absurd rates from tiny residual divisor
  • finalizeRunLatency fallback to caller-provided sessionKey when markRunStart was missed
  • TTL reaper for orphan runTimings (10min)
  • Strict toolCallId dedup on both call and result counters — tolerates duplicate phase events
  • Streaming gap threshold 1s → 3s (accommodates batched-delta providers like MiniMax)
  • Gap attributed to toolTimeMs only while a tool is actually in flight
  • localStorage-backed per-session latency history (7-day cap, max 200/session)
  • UI: cap notice when showing last 200, tokenization estimate tooltip, corrected gap-attribution hint