feat: context usage indicator in composer footer
Shows a compact bar + label in the composer footer after the first response, displaying input/output token counts, context window fill percentage, and estimated cost. Bar turns yellow >50% and red >75%. Updates on every response completion via the existing usage data from the done SSE event. Hidden until first response (no usage data yet). Inspired by PR #75 (@MartinNielsenDev). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
26
static/ui.js
26
static/ui.js
@@ -84,6 +84,32 @@ let _scrollPinned=true;
|
||||
})();
|
||||
function _fmtTokens(n){if(!n||n<0)return'0';if(n>=1e6)return(n/1e6).toFixed(1)+'M';if(n>=1e3)return(n/1e3).toFixed(1)+'k';return String(n);}
|
||||
|
||||
// Context usage indicator in composer footer
|
||||
function _syncCtxIndicator(usage){
|
||||
const el=$('ctxIndicator');
|
||||
if(!el)return;
|
||||
const inTok=usage.input_tokens||0;
|
||||
const outTok=usage.output_tokens||0;
|
||||
const total=inTok+outTok;
|
||||
if(!total){el.style.display='none';return;}
|
||||
el.style.display='';
|
||||
// Estimate context window fill (assume 128k default, common for most models)
|
||||
const ctxWindow=128000;
|
||||
const pct=Math.min(100,Math.round((inTok/ctxWindow)*100));
|
||||
const bar=$('ctxBar');
|
||||
const label=$('ctxLabel');
|
||||
if(bar){
|
||||
bar.style.width=pct+'%';
|
||||
bar.className='ctx-bar'+(pct>75?' ctx-high':pct>50?' ctx-mid':'');
|
||||
}
|
||||
if(label){
|
||||
const cost=usage.estimated_cost;
|
||||
let text=`${_fmtTokens(inTok)} in \u00b7 ${_fmtTokens(outTok)} out`;
|
||||
if(cost) text+=` \u00b7 $${cost<0.01?cost.toFixed(4):cost.toFixed(2)}`;
|
||||
label.textContent=text;
|
||||
}
|
||||
}
|
||||
|
||||
function scrollIfPinned(){
|
||||
if(!_scrollPinned) return;
|
||||
const el=$('messages');
|
||||
|
||||
Reference in New Issue
Block a user