Refactor enableThinking/reasoningEffort into IModelCapabilityOptions#308387
Merged
Refactor enableThinking/reasoningEffort into IModelCapabilityOptions#308387
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors per-request model capability controls by replacing the flat enableThinking / reasoningEffort fields on IMakeChatRequestOptions with a consolidated modelCapabilities?: IModelCapabilityOptions object, and centralizes model capability checks (tool search/context editing) so endpoints can use server-provided metadata.
Changes:
- Introduces
IModelCapabilityOptionsand plumbsmodelCapabilitiesthrough request creation paths (Messages API + Responses API). - Moves tool-search/context-editing model support helpers into
chatModelCapabilities.tsand exposessupportsToolSearch/supportsContextEditingonIChatEndpoint. - Prevents
reasoningEffortfrom flowing into search/execution subagent loops.
Show a summary per file
| File | Description |
|---|---|
| extensions/copilot/src/platform/networking/common/networking.ts | Adds IModelCapabilityOptions and replaces request-level thinking fields with modelCapabilities. |
| extensions/copilot/src/platform/networking/common/anthropic.ts | Switches capability checks to use endpoint metadata + shared helpers. |
| extensions/copilot/src/platform/endpoint/test/node/messagesApi.spec.ts | Updates reasoning-effort tests to use modelCapabilities. |
| extensions/copilot/src/platform/endpoint/node/responsesApi.ts | Reads reasoning effort from options.modelCapabilities. |
| extensions/copilot/src/platform/endpoint/node/messagesApi.ts | Gates tool search/context editing/thinking off modelCapabilities instead of flat options. |
| extensions/copilot/src/platform/endpoint/node/chatEndpoint.ts | Populates endpoint capability booleans from server metadata; adjusts Anthropic beta header construction. |
| extensions/copilot/src/platform/endpoint/common/endpointProvider.ts | Extends metadata schema with tool_search / context_editing capability booleans. |
| extensions/copilot/src/platform/endpoint/common/chatModelCapabilities.ts | Becomes the central home for tool-search/context-editing model support checks. |
| extensions/copilot/src/extension/tools/node/toolSearchTool.ts | Imports tool-search supported model prefixes from chatModelCapabilities. |
| extensions/copilot/src/extension/prompt/node/searchSubagentToolCallingLoop.ts | Strips reasoningEffort from subagent requests via modelCapabilities. |
| extensions/copilot/src/extension/prompt/node/executionSubagentToolCallingLoop.ts | Strips reasoningEffort from subagent requests via modelCapabilities. |
| extensions/copilot/src/extension/prompt/node/defaultIntentRequestHandler.ts | Sets per-request capability opt-ins (thinking/tool search/context editing) on outbound requests. |
| extensions/copilot/src/extension/intents/node/toolCallingLoop.ts | Updates loop fetch options shape to pass modelCapabilities. |
| extensions/copilot/src/extension/externalAgents/node/oaiLanguageModelServer.ts | Updates internal proxy requests to use modelCapabilities.enableThinking. |
| extensions/copilot/src/extension/conversation/vscode-node/languageModelAccess.ts | Plumbs reasoning effort into modelCapabilities for extension-language-model requests. |
| extensions/copilot/src/extension/chatSessions/claude/node/claudeLanguageModelServer.ts | Updates internal proxy requests to use modelCapabilities.enableThinking. |
Copilot's findings
- Files reviewed: 16/16 changed files
- Comments generated: 4
Contributor
roblourens
approved these changes
Apr 7, 2026
bhavyaus
added a commit
that referenced
this pull request
Apr 17, 2026
Callers can now opt into Anthropic features (context editing, tool search, etc.) by setting modelCapabilities on the request itself, as introduced in #308387. The base endpoint no longer needs to inject beta headers — the Claude agent controls its own headers. Reverts the merge logic from microsoft/vscode-copilot-chat#4945.
bhavyaus
added a commit
that referenced
this pull request
Apr 17, 2026
…nt (#310908) Callers can now opt into Anthropic features (context editing, tool search, etc.) by setting modelCapabilities on the request itself, as introduced in #308387. The base endpoint no longer needs to inject beta headers — the Claude agent controls its own headers. Reverts the merge logic from microsoft/vscode-copilot-chat#4945.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Refactors how tool search, context editing, thinking, and reasoning effort are controlled in chat requests. Instead of checking
ChatLocationto decide whether to enable these features, callers now explicitly opt in viamodelCapabilitiesonIMakeChatRequestOptions.This should prevent issues such as #298471 where the claude agent is opted into TST because messagesAPI enables it but was not adding in the required headers since it wasn't aware it was opting into TST enablement.
Port of microsoft/vscode-copilot-chat#5026.
Key Changes
New
IModelCapabilityOptionsinterfaceGroups per-request model capability opt-ins:
enableThinking- opt-in flag for thinkingreasoningEffort- effort level from model pickerenableToolSearch- opt-in for tool search toolenableContextEditing- opt-in for context editingCentralized model support checks
modelSupportsToolSearch()andmodelSupportsContextEditing()tochatModelCapabilities.tssupportsToolSearch/supportsContextEditingproperties toIChatEndpointIChatModelCapabilities.supportswithtool_searchandcontext_editingRequest body gating
messagesApi.tsreadsoptions.modelCapabilitiesinstead of location-based checksisAllowedConversationAgentandisSubagentcomputationsTest Rubric
runSubagent)enableThinkingreasoningEffortenableToolSearchenableContextEditing