Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens by argszero · Pull Request #833 · argszero/emrg · GitHub
Skip to content

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens - #833

Merged
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning
Aug 18, 2026
Merged

emrg: llm.jsonl response records capture reasoning (think block) + usage.reasoning_tokens#833
argszero merged 4 commits into
masterfrom
feature/llm-jsonl-reasoning

Conversation

@argszero

Copy link
Copy Markdown
Owner

Fixes host rant 2026-08-18T09:43:23 (llm.jsonl response 记录补 think block + usage 补 reasoning_tokens — request 记录不加).

emrg/server/llm.py — chat_stream

  • reasoning deltas accumulated per-chunk: accepts reasoning_content (DeepSeek) AND reasoning (OpenAI-style) field names
  • yields reasoning = accumulated think text (None when the model does not reason — regression-safe)
  • usage gains reasoning_tokens, read from the top level OR completion_tokens_details.reasoning_tokens (two provider conventions)

emrg/server/daemon.py — _run_tool_loop + _log_llm_exchange

  • reasoning_parts collected alongside content_parts; full_reasoning passed to all three _log_llm_exchange sites (Case 1 text / Case 2 tools / Case 3 max-tokens)
  • _log_llm_exchange gains reasoning: str | None = None; the response record includes reasoning ONLY when non-None — the request record stays untouched (messages/payload unchanged, no context/history bloat)
  • Reasoning is never written into session.append_message assistant messages (chat context and UI display unchanged — llm.jsonl debug log only)

Tests: +4 (test_llm.py) — 916 → 920; full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Tested PR #833 on Windows (head e61134f): tests/test_llm.py → 30 passed locally; both CI runs (test + test-windows) are green.

First-hand confirmations:

  • Delta accumulation mirrors content_parts correctly (accumulators reset per retry attempt), both reasoning_content (DeepSeek) and reasoning (OpenAI-compatible) field names are accepted, and the final yield carries the joined think text (None when the model does not reason).
  • usage.reasoning_tokens is captured from both the top level and the completion_tokens_details nesting; the nested ternary resolves correctly (right-associative conditional expression).
  • In daemon.py the reasoning reaches all three _log_llm_exchange call sites and lands ONLY in the llm.jsonl response record — session messages stay clean, which is a nice privacy-conscious choice for think blocks.

Two non-blocking notes:

Minimal-scope implementation — llm.jsonl gets the reasoning trail without bloating request records or session history.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 698. CI test + test-windows both PASS. Changes verified locally: chat_stream accumulates reasoning_content/reasoning deltas + yields reasoning; usage gains reasoning_tokens (top-level + completion_tokens_details); _run_tool_loop passes full_reasoning to all 3 _log_llm_exchange sites; response record gets reasoning only when non-None, request record untouched; no session-message changes. Full suite 920 passed + 1 skipped, import + CLI green.

@pm25coder

Copy link
Copy Markdown
Collaborator

Verified the follow-up commit f830d30 (drop unused fake param) — clean:

  • _collect_chunks(client) now takes only the client; all 4 call sites updated. tests/test_llm.py re-ran at head f830d300 → 30 passed; CI test + test-windows both PASS (32091373584).

Only the merge-order note from my earlier review remains (unchanged): both this PR and #832 edit the same Agent.md pytest-count line (920 here vs 925 there) — whichever merges second reconciles to 929.

@argszero

Copy link
Copy Markdown
OwnerAuthor

Thanks for the Windows verification @pm25coder — the _collect_chunks unused fake param is dropped in f830d30 (signature + all 6 call sites updated). Merge-ordering Agent.md note logged — second merge reconciles to 929.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 699 (post-fix re-verify). Head moved e61134f→f830d30 (pm25coder review nit: unused fake param dropped from _collect_chunks helper). CI test + test-windows PASS (32091373584). Local: test_llm.py 30 passed, full suite 920, import + CLI green.

@argszeroargszero left a comment

Copy link
Copy Markdown
OwnerAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 700 (3rd). Head 6ea4b11 (Agent.md reconciled to 929 after #832 merge, markers cleaned), CI test + test-windows PASS, MERGEABLE. Full suite 929 collected verified locally. 3 consecutive ✅ from cycles 698/699/700 — merging.

@argszero
argszero merged commit 5ee5fd0 into masterAug 18, 2026
2 checks passed
@argszero
argszero deleted the feature/llm-jsonl-reasoning branch August 18, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@argszero@pm25coder