diff --git a/src/vs/workbench/contrib/chat/browser/chatSelectedTools.ts b/src/vs/workbench/contrib/chat/browser/chatSelectedTools.ts index ef3f732ed15..6bf867e7e38 100644 --- a/src/vs/workbench/contrib/chat/browser/chatSelectedTools.ts +++ b/src/vs/workbench/contrib/chat/browser/chatSelectedTools.ts @@ -124,7 +124,7 @@ export class ChatSelectedTools extends Disposable { let currentMap = this._sessionStates.get(currentMode.id); let defaultEnablement = false; if (!currentMap && currentMode.kind === ChatModeKind.Agent && currentMode.customTools) { - currentMap = this._toolsService.toToolAndToolSetEnablementMap(new Set(currentMode.customTools.read(r))); + currentMap = this._toolsService.toToolAndToolSetEnablementMap(currentMode.customTools.read(r)); } if (!currentMap) { currentMap = this._selectedTools.read(r); diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index dd82570e524..d6a95c8cb8d 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -1909,7 +1909,7 @@ export class ChatWidget extends Disposable implements IChatWidget { // if not tools to enable are present, we are done if (tools !== undefined && this.input.currentModeKind === ChatModeKind.Agent) { - const enablementMap = this.toolsService.toToolAndToolSetEnablementMap(new Set(tools)); + const enablementMap = this.toolsService.toToolAndToolSetEnablementMap(tools); this.input.selectedToolsModel.set(enablementMap, true); } diff --git a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts index 965f71dd31d..a13152e5427 100644 --- a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts @@ -484,13 +484,19 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo return result; } - toToolAndToolSetEnablementMap(toolOrToolSetNames: Set): Map { + /** + * Create a map that contains all tools and toolsets with their enablement state. + * @param toolOrToolSetNames A list of tool or toolset names to check for enablement. If undefined, all tools and toolsets are enabled. + * @returns A map of tool or toolset instances to their enablement state. + */ + toToolAndToolSetEnablementMap(enabledToolOrToolSetNames: readonly string[] | undefined): Map { + const toolOrToolSetNames = enabledToolOrToolSetNames ? new Set(enabledToolOrToolSetNames) : undefined; const result = new Map(); for (const tool of this._tools.values()) { - result.set(tool.data, tool.data.toolReferenceName !== undefined && toolOrToolSetNames.has(tool.data.toolReferenceName)); + result.set(tool.data, tool.data.toolReferenceName !== undefined && (toolOrToolSetNames === undefined || toolOrToolSetNames.has(tool.data.toolReferenceName))); } for (const toolSet of this._toolSets) { - result.set(toolSet, toolOrToolSetNames.has(toolSet.referenceName)); + result.set(toolSet, (toolOrToolSetNames === undefined || toolOrToolSetNames.has(toolSet.referenceName))); } return result; } diff --git a/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts b/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts index 018237936be..3d904edb187 100644 --- a/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts +++ b/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts @@ -78,7 +78,7 @@ class PromptToolsCodeLensProvider extends Disposable implements CodeLensProvider private async updateTools(model: ITextModel, tools: PromptToolsMetadata) { - const selectedToolsNow = tools.value ? this.languageModelToolsService.toToolAndToolSetEnablementMap(new Set(tools.value)) : new Map(); + const selectedToolsNow = tools.value ? this.languageModelToolsService.toToolAndToolSetEnablementMap(tools.value) : new Map(); const newSelectedAfter = await this.instantiationService.invokeFunction(showToolsPicker, localize('placeholder', "Select tools"), undefined, selectedToolsNow); if (!newSelectedAfter) { return; diff --git a/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts index be257861899..f1df32784ce 100644 --- a/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts @@ -275,7 +275,7 @@ export interface ILanguageModelToolsService { resetToolAutoConfirmation(): void; cancelToolCallsForRequest(requestId: string): void; toToolEnablementMap(toolOrToolSetNames: Set): Record; - toToolAndToolSetEnablementMap(toolOrToolSetNames: Set): IToolAndToolSetEnablementMap; + toToolAndToolSetEnablementMap(toolOrToolSetNames: readonly string[] | undefined): IToolAndToolSetEnablementMap; readonly toolSets: IObservable>; getToolSet(id: string): ToolSet | undefined; diff --git a/src/vs/workbench/contrib/chat/test/common/mockLanguageModelToolsService.ts b/src/vs/workbench/contrib/chat/test/common/mockLanguageModelToolsService.ts index 511ff781e42..69bdd684bfd 100644 --- a/src/vs/workbench/contrib/chat/test/common/mockLanguageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/test/common/mockLanguageModelToolsService.ts @@ -76,7 +76,7 @@ export class MockLanguageModelToolsService implements ILanguageModelToolsService throw new Error('Method not implemented.'); } - toToolAndToolSetEnablementMap(toolOrToolSetNames: Set): Map { + toToolAndToolSetEnablementMap(toolOrToolSetNames: readonly string[] | undefined): Map { throw new Error('Method not implemented.'); } }