diff --git a/injected/chat-logger.js b/injected/chat-logger.js index d00d5d4..feccec7 100644 --- a/injected/chat-logger.js +++ b/injected/chat-logger.js @@ -4,8 +4,10 @@ var ENABLED_KEY = 'dshmem-log-enabled' var BASE = 'http' + ':' + '//' + '127.0.0.1' + ':' + '8766' var CHUNK = 700 + var K_RATIO = 2.5 var seen = Object.create(null) var cfg = null + var lastAccum = null var SEP = String.fromCharCode(10) + String.fromCharCode(10) function hash(s) { @@ -123,6 +125,32 @@ return out.join('') } + function extractAccum(sse) { + if (!sse) return null + var idx = sse.lastIndexOf('accumulated_token_usage') + if (idx === -1) return null + var tail = sse.slice(idx, idx + 80) + var start = -1 + var i = 0 + while (i < tail.length) { + var ch = tail.charCodeAt(i) + if (ch >= 48 && ch <= 57) { + start = i + break + } + i++ + } + if (start === -1) return null + var end = start + while (end < tail.length) { + var cd = tail.charCodeAt(end) + if (cd < 48 || cd > 57) break + end++ + } + if (end === start) return null + return parseInt(tail.slice(start, end), 10) + } + function process(entry) { if (!entry || !entry.url) return if (entry.url.indexOf('chat/completion') === -1) return @@ -134,7 +162,8 @@ var messages = [] try { var req = JSON.parse(entry.body) - if (req && Array.isArray(req.messages)) messages = req.messages; else if (req && typeof req.prompt === 'string' && req.prompt) messages = [{ role: 'user', content: req.prompt }] + if (req && Array.isArray(req.messages)) messages = req.messages + else if (req && typeof req.prompt === 'string' && req.prompt) messages = [{ role: 'user', content: req.prompt }] } catch (e) { return } var assistant = '' try { assistant = extractAssistant(entry.resp || '') } catch (e) { } @@ -154,6 +183,31 @@ var ls = linesFor(role + '-' + h, role, text, Date.now()) for (var j = 0; j !== ls.length; j++) lines.push(ls[j]) } + var accum = null + try { accum = extractAccum(entry.resp || '') } catch (e) { accum = null } + if (accum !== null) { + var delta = 0 + if (lastAccum !== null && accum > lastAccum) delta = accum - lastAccum + lastAccum = accum + var ctxChars = 0 + for (var m = 0; m !== all.length; m++) { + if (all[m] && typeof all[m].content === 'string') ctxChars += all[m].content.length + } + var meta = { + mid: 'meta-' + Date.now(), + part: 0, + total: 1, + role: 'meta', + ts: Date.now(), + inj: false, + text: 'metrics', + accum: accum, + delta: delta, + chars: ctxChars, + est_tok: Math.round(ctxChars / K_RATIO) + } + lines.push(JSON.stringify(meta)) + } if (!lines.length) return sendLines(file, lines).then(function (ok) { if (ok) console.log('[chat-log] saved', lines.length) diff --git a/memory/state.json b/memory/state.json index 823ff58..9ecb4ff 100644 --- a/memory/state.json +++ b/memory/state.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-10-31T23:15:31.405Z", + "updatedAt": "2026-10-31T23:47:26.897Z", "memories": {}, "skills": [] } \ No newline at end of file