{"record":{"id":"5883ccf45be38e32","repo":"microsoft/vscode","slug":"languagemodelchattoolmode-required-is-not-supporte","errorCode":null,"errorMessage":"LanguageModelChatToolMode.Required is not supported with more than one tool","messagePattern":"LanguageModelChatToolMode\\.Required is not supported with more than one tool","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"extensions/copilot/src/extension/conversation/vscode-node/languageModelAccess.ts","lineNumber":801,"sourceCode":"\t\t\t}\n\t\t});\n\n\n\t\tconst options: OptionalChatRequestParams = LanguageModelOptions.Default.convert(_options.modelOptions ?? {});\n\t\tconst telemetryProperties = { messageSource: `api.${extensionId}` };\n\n\t\toptions.tools = _options.tools?.map((tool): OpenAiFunctionTool => {\n\t\t\treturn {\n\t\t\t\ttype: 'function',\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.inputSchema && Object.keys(tool.inputSchema).length ? tool.inputSchema : undefined\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t\tif (_options.toolMode === vscode.LanguageModelChatToolMode.Required && _options.tools?.length && _options.tools.length > 1) {\n\t\t\tthrow new Error('LanguageModelChatToolMode.Required is not supported with more than one tool');\n\t\t}\n\n\t\toptions.tool_choice = _options.toolMode === vscode.LanguageModelChatToolMode.Required && _options.tools?.length ?\n\t\t\t{ type: 'function', function: { name: _options.tools[0].name } } :\n\t\t\tundefined;\n\n\t\t// Restore CapturingToken context if correlation ID was passed through modelOptions.\n\t\t// This handles BYOK providers where the original AsyncLocalStorage context was lost\n\t\t// when crossing the VS Code IPC boundary.\n\t\tconst correlationId = (_options as { modelOptions?: OTelModelOptions }).modelOptions?._capturingTokenCorrelationId;\n\t\tconst capturingToken = correlationId ? retrieveCapturingTokenByCorrelation(correlationId) : undefined;\n\n\t\t// Restore OTel trace context if passed through modelOptions.\n\t\t// This links the wrapper's chat span back to the original invoke_agent trace.\n\t\tconst parentTraceContext = (_options as { modelOptions?: OTelModelOptions }).modelOptions?._otelTraceContext ?? undefined;\n\n\t\tconst makeRequest = () => endpoint.makeChatRequest2({\n\t\t\tdebugName: 'copilotLanguageModelWrapper',","sourceCodeStart":783,"sourceCodeEnd":819,"githubUrl":"https://github.com/microsoft/vscode/blob/a94b963a32aa9749d69504576791fa29700ae46d/extensions/copilot/src/extension/conversation/vscode-node/languageModelAccess.ts#L783-L819","documentation":"Error \"LanguageModelChatToolMode.Required is not supported with more than one tool\" thrown in microsoft/vscode.","triggerScenarios":"Thrown at extensions/copilot/src/extension/conversation/vscode-node/languageModelAccess.ts:801 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"a94b963a32aa9749d69504576791fa29700ae46d","analyzedAt":"2026-08-12T01:08:56.794Z","schemaVersion":2},"datasetVersion":"2026-08-12T06:17:24.410Z"}