fix(grok): expose advertised reasoning levels - #6386
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Needs human review This PR introduces new user-facing functionality - reasoning level selection for Grok models. The changes expose previously hidden metadata as UI controls and propagate new configuration through the ACP session. While thoroughly tested, this is a new capability from a new contributor to this area of the codebase. You can customize Macroscope's approvability policy. Learn more. |
534f90f to
e0fc12b
Compare
|
cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit e0fc12b. Configure here.
What Changed
session/set_modelmetadata, including same-model changes and explicit clearing back to the model defaultWhy
Grok 4.6 advertises Extra High, High, Medium, and Low reasoning levels through its ACP model metadata, but T3 discarded Grok model capabilities and only sent model IDs. That left the composer without a reasoning control and made same-model effort changes impossible.
This is a focused reasoning-only fix. It overlaps the reasoning portion of #6383, which appeared after this work started and also bundles Grok auth, rewind, and token-usage changes.
I also compared this implementation with the orchestrator-v2 work in #5160. This PR reuses the portable safeguards from that work: safe ACP token parsing, preserved descriptions, current-vs-default separation, one default badge, and symmetric effort clearing. It intentionally leaves out v2-only lifecycle scaffolding, spawn-bound locks, and fallback catalogs.
UI Changes
Before
Grok 4.6 had no reasoning control.
After
The composer reads Grok 4.6's live effort menu, and changing the selection updates the visible value.
The
Effortsuffix in this screenshot comes from Grok 4.6's ACP-provided labels. T3 displays only ACP-advertised options, preserving their labels verbatim without synthesizing a fallback menu.Verification
vp test run apps/server/src/provider/acp/GrokAcpSupport.test.ts apps/server/src/provider/Layers/GrokProvider.test.ts apps/server/src/provider/Layers/GrokAdapter.test.ts apps/server/src/textGeneration/GrokTextGeneration.test.ts(51 tests passed)T3_GROK_ACP_PROBE=1 vp test run apps/server/src/provider/acp/GrokAcpCliProbe.test.ts --reporter=verbose(4 tests passed against Grok CLI 1.0.3)vp run --filter=t3 typecheckvp fmt --checkandvp lintfor all changed filesChecklist
Implemented with gpt-5.6-sol through the Codex harness in T3 Code.
Note
Medium Risk
Changes Grok session model binding and
session/set_modelbehavior (including same-model effort and clearing), which affects live turns and auxiliary Grok prompts; risk is mitigated by validation, deferredset_modeluntil after turn validation, and broad tests.Overview
Grok reasoning effort is now wired end-to-end from ACP model metadata into the composer and runtime.
Discovery and UI contract:
buildGrokModelCapabilitiesturns each model’s_meta.reasoningEffort/reasoningEffortsinto areasoningEffortselect (labels, descriptions, default badge, token validation). Discovered Grok models use these capabilities instead of empty option lists.ACP dispatch:
setSessionModelaccepts optional_meta;applyGrokAcpModelSelectioncompares current vs requested effort and callssession/set_modelwith{ reasoningEffort }when the model or effort changes, or omits_metato clear effort on the same model. GrokAdapter trackscurrentReasoningEffort, applies selection after turn validation (so failed prep/validation does not callset_model), and avoids leaking prior-session effort on start when switching models. Grok text generation applies the same selection path.Tests and the mock ACP agent cover effort metadata; install docs mention the Reasoning control for supported Grok models.
Reviewed by Cursor Bugbot for commit e0fc12b. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Expose Grok reasoning effort levels from ACP model metadata in model capabilities
buildGrokModelCapabilitiesin GrokProvider.ts parses_meta.reasoningEffortand_meta.reasoningEffortsfrom ACP model metadata and returns areasoningEffortselect option when present; discovered models now use this instead of empty capabilities.applyGrokAcpModelSelectionin GrokAcpSupport.ts now tracks current and requested reasoning effort, triggeringsession/set_modelwith_meta.reasoningEffortwhen effort changes on the same model, and clearing it when omitted.AcpSessionRuntime.setSessionModelin AcpSessionRuntime.ts accepts an optional_metapayload so reasoning effort can be forwarded in set-model requests.currentReasoningEffortin session context and applies it alongside model selection onsendTurn;session/set_modelis no longer issued whensendTurnvalidation fails.Macroscope summarized e0fc12b.