Skip to content

Commit 8588fe5

Browse files
committed
fix(dashboard) ccr retrieval status not loaded
1 parent bfb3f53 commit 8588fe5

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

headroom/dashboard/templates/dashboard.html

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,14 @@ <h3 class="mb-3 text-sm font-medium text-gray-300">Live Activity</h3>
321321
<div data-testid="ccr-net-tokens" class="mt-1 text-xl font-light tabular-nums" :class="ccrNetTokensSaved >= 0 ? 'text-emerald-400' : 'text-red-400'" x-text="(ccrNetTokensSaved >= 0 ? '+' : '-') + formatNumber(Math.abs(ccrNetTokensSaved))"></div>
322322
<div class="mt-1 text-[11px] text-gray-600">savings minus retrieval drawback</div>
323323
</div>
324+
<!-- Retrievals recorded by prior proxy processes (durable ledger; survives restart) -->
325+
<template x-if="lifetimeRetrievals > 0">
326+
<div class="rounded-lg border border-emerald-500/20 bg-emerald-500/5 p-3 mt-2">
327+
<div class="text-xs text-gray-500 uppercase tracking-wide mb-1">Retrievals (lifetime)</div>
328+
<div class="text-2xl font-light tabular-nums text-emerald-400" x-text="formatNumber(lifetimeRetrievals)"></div>
329+
<div class="text-xs" :class="lifetimeNetTokensSaved >= 0 ? 'text-emerald-400/70' : 'text-red-400/80'" x-text="formatNumber(lifetimeTokensRetrieved) + ' retrieved-back \u00b7 net ' + (lifetimeNetTokensSaved >= 0 ? '+' : '') + formatNumber(lifetimeNetTokensSaved)"></div>
330+
</div>
331+
</template>
324332
<template x-if="stats.feedback_loop?.high_retrieval_tools?.length">
325333
<div class="mt-2 pt-2 border-t border-border">
326334
<div class="text-[11px] text-gray-600 mb-1">High-Retrieval Tools</div>
@@ -2610,8 +2618,21 @@ <h3 class="mb-3 text-sm font-medium text-gray-300">Live Activity</h3>
26102618
return c.net_tokens_saved ?? ((c.total_tokens_removed || 0) - (c.tokens_retrieved || 0));
26112619
},
26122620

2621+
get lifetimeRetrievals() {
2622+
return this.stats.persistent_savings?.lifetime?.retrievals || 0;
2623+
},
2624+
2625+
get lifetimeTokensRetrieved() {
2626+
return this.stats.persistent_savings?.lifetime?.tokens_retrieved || 0;
2627+
},
2628+
2629+
get lifetimeNetTokensSaved() {
2630+
return this.stats.persistent_savings?.lifetime?.net_tokens_saved || 0;
2631+
},
2632+
26132633
get hasCcrRetrievals() {
2614-
return (this.stats.summary?.compression?.retrievals_total || 0) > 0;
2634+
return (this.stats.summary?.compression?.retrievals_total || 0) > 0
2635+
|| this.lifetimeRetrievals > 0;
26152636
},
26162637

26172638
// --- Cache miss attribution (#1313) ---

headroom/proxy/server.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3722,6 +3722,27 @@ def _pct(part: int | float, whole: int | float) -> float:
37223722
cache_net_usd = prefix_cache_stats.get("totals", {}).get("net_savings_usd", 0.0)
37233723
total_tokens_all_layers = all_layers_tokens_saved
37243724
persistent_savings = m.savings_tracker.stats_preview()
3725+
# Durable CCR retrieval figures (survive proxy restart). The session
3726+
# CCR card only reflects the current process's in-memory handler counts,
3727+
# so retrievals recorded by prior proxy processes vanish after a restart.
3728+
# Surface the ledger's lifetime totals next to lifetime cache reads. Copy
3729+
# the lifetime dict before augmenting so the tracker snapshot is untouched.
3730+
# Best-effort -- never break /stats on a ledger read.
3731+
try:
3732+
from headroom.savings_ledger import aggregate_savings
3733+
3734+
_ledger_lifetime = aggregate_savings().lifetime
3735+
_ps_lifetime = dict(persistent_savings.get("lifetime") or {})
3736+
_ps_lifetime["retrievals"] = int(_ledger_lifetime.get("retrievals", 0) or 0)
3737+
_ps_lifetime["tokens_retrieved"] = int(
3738+
_ledger_lifetime.get("tokens_retrieved", 0) or 0
3739+
)
3740+
_ps_lifetime["net_tokens_saved"] = int(
3741+
_ledger_lifetime.get("net_tokens_saved", 0) or 0
3742+
)
3743+
persistent_savings["lifetime"] = _ps_lifetime
3744+
except Exception: # noqa: BLE001 -- never break /stats on a ledger read
3745+
pass
37253746
display_session = persistent_savings.get("display_session", {})
37263747
recent_request_logs = proxy.logger.get_recent(10_000) if proxy.logger else []
37273748
recent_request_payload = _build_recent_request_payload()

0 commit comments

Comments
 (0)