diff --git a/templates/index.html b/templates/index.html index 2dcec0a..a03815d 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1340,6 +1340,7 @@ async function sendMessage() { let searchTriggered = false; const ttrStart = performance.now(); let ttr = 0; + let tokenCount = 0; try { abortController = new AbortController(); let uploadContextId = null; @@ -1393,18 +1394,18 @@ async function sendMessage() { } if (data.searching) { textEl.innerHTML = fullText ? renderMarkdown(fullText) + '
Searching...
' : '
Searching...
'; searchTriggered = true; } if (data.search_results) { textEl.innerHTML = '
🔍 Found ' + data.search_results + ' results...
'; fullText = ''; firstToken = true; } - if (data.token) { if (firstToken) { textEl.innerHTML = ''; firstToken = false; ttr = performance.now() - ttrStart; } fullText += data.token; textEl.innerHTML = renderMarkdown(fullText); scrollToBottom(); } + if (data.token) { if (firstToken) { textEl.innerHTML = ''; firstToken = false; ttr = performance.now() - ttrStart; tokenCount = 0; } fullText += data.token; tokenCount++; textEl.innerHTML = renderMarkdown(fullText); scrollToBottom(); } if (data.done) { const roleLabel = assistantDiv.querySelector('.role-label'); if (data.searched && roleLabel) roleLabel.innerHTML += '🔍 web'; if (typeof data.perplexity === 'number' && roleLabel) { const ppl = data.perplexity; roleLabel.innerHTML += `ppl: ${ppl.toFixed(1)}`; } - if (typeof data.tokens === 'number' && data.tokens > 0 && roleLabel) roleLabel.innerHTML += `tok: ${data.tokens}`; if (typeof data.tokens_per_sec === 'number' && data.tokens_per_sec > 0 && roleLabel) roleLabel.innerHTML += `${data.tokens_per_sec.toFixed(1)} t/s`; if (roleLabel && ttr > 0) { const ttrSec = ttr / 1000; const ttrClass = data.searched ? 'search' : (ttrSec <= 2 ? 'low' : ttrSec < 11 ? 'medium' : 'high'); roleLabel.innerHTML += `ttr: ${ttrSec.toFixed(1)}s`; } + if (tokenCount > 0 && roleLabel) roleLabel.innerHTML += `tok: ${tokenCount}`; conversationHistory.push({ role: 'assistant', content: fullText }); updateTokenThermometer(); addCopyButtons(assistantDiv);