Repository navigation
Studio: keep long reasoning responsive with bounded pages - #10717
Conversation
Adapt the reasoning-only windowing direction validated in unslothai#9477. Keep full canonical copy and ordinary assistant rendering, with stable latest/earlier page navigation and a bounded oversized-fence fallback.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c6430c6c13
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
1 similar comment
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9db0681d48
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Confirmed the unbounded mounted trace in studio/frontend/src/components/assistant-ui/reasoning.tsx is still what main does, and the bounded page approach addresses it. Since browser find, native selection, printing and screen-reader traversal now only reach the mounted page, could you say how a user is expected to search a long trace before I review? |
|
@codex review |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@codex review |
|
You have reached your Codex usage limits for security reviews. Please try again later. |
|
@codex review |
|
You have reached your Codex usage limits for security reviews. Please try again later. |
|
Codex Review: Didn't find any major issues. Keep them coming! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Long reasoning opens on a bounded page. At The new browser regression fails before the fix and passes after. 19 focused tests, type checking, the build, frontend CI, and Linux and Windows Studio UI checks pass. The optional Python 3.13 backend check still fails its unchanged idle-stream persistence assertion. Two optional macOS jobs remain queued; no required checks are reported. Local tests used saved or synthetic messages without GPU inference. Final-head review reported no major issues. Final-head security review was unavailable because of a service usage limit. BEFORE: |
|
Follow-up from re-checking this on studiobench and fuzzing the selector: #10922. One latent defect, not a live one. Two things this did confirm about the change here. Pagination fires as described: on the studiobench 100K fixture, the largest pane goes from 76,618 mounted characters and 11,978 elements to 8,319 and 24, the whole open-reasoning document from 41,641 elements to 25,255, and the six panes under the trigger are byte-identical between arms. And the module is unusually conservative about platform surface, Worth knowing separately: on that fixture two of the three paginated panes rendered through the oversized-code plain-source fallback rather than the Markdown page, so part of the DOM reduction is Shiki not running at all. That is the labelled fallback working as designed, just more often than the description here implies. |
|
Closing the half of this I said was unanswered. My earlier note only covered saved traces, because the stock ladder pins every streamed reply at
Two metrics cleared all three gates, and one of them is the streaming one:
Everything else points the same way and does not clear its own floor, so I am not quoting it as a result: The invariants that catch this shape of change held exactly. Three things I would not want read as more than they are. The cadence is So the premise holds on both halves now, saved and live, on the venue this repo trusts. |

Summary
Carry forward the reasoning-windowing direction validated in #9477, without its backend/channel-fidelity changes or general streaming-render rewrite. The follow-up correction established that pagination helps; this PR deliberately accepts page-limited native find/selection in exchange for a usable long-thinking UI.
Live verification
Selected the on-device unsloth/Qwen3.8-27B-GGUF / UD-Q4_K_XL in Studio, set High, and submitted the supplied Tesla-coil demonstration-room prompt, using local inference on one B200. The baseline produced 79,366 reasoning characters and a separate 38,350-character answer. A real after-run also exercised paging while streaming.
Verified in production Studio/Chromium:
ce5c75aaf94b604ca36de7af0cfb5e1b1923a6a1b9e048422c5958bf17ca8d3f, exactly matching the canonical trace.Narrow-screen reasoning navigation
Native WebKit A/B
Immutable baseline
89b7ff009d93a3eaf4fa332d4fa6610607c27433vs finalc6430c6c13d98ead272bb9f2f086d7ff7e6fe72b. Native MiniBrowser/WebKitGTK 2.50.4, production Vite bundles, real Studio Thread/assistant-ui/reasoning renderer. The same captured Qwen reasoning was truncated/repeated to exact 8K/100K/250K workloads, streamed with the same 4,096-character / 16ms requested cadence; hashes matched across both refs. This is controlled accelerated renderer replay, not a claim about model tokens/sec or a packaged Tauri run.The long-trace DOM-bound assertion fails on baseline and passes on final; the short control remains unchanged. Native Earlier/Newer/Latest checks also pass. The 100K worst outlier remains ~1.3s: this is a focused fix for unbounded reasoning growth, not a claim that all rendering stalls are eliminated. Measurements are individual controlled runs, not a statistical performance guarantee.
Sanitized facts and workload hashes
Tests
npm test— 7,284 passed on final sourcenpm run typecheck— passed (production + test projects)npm run build— passednpm run i18n:check:strict— passedAccepted trade-offs / scope
Browser find, native selection, printing, deep links, and screen-reader traversal cannot reach unmounted reasoning; page navigation and full canonical Copy reasoning remain available. Very large split blocks use the labelled plain-source fallback; this is not a full Markdown-document virtualization engine. Cross-platform packaged desktop builds and every Markdown construct are not claimed as verified. Six frontend/test files only; no provider/channel suppression, model/backend behavior changes, or new dependencies.