Skip to content

Commit 93a3972

Browse files
authored
Pick correct tools for more cases (microsoft#250210)
And some cleanup Fix microsoft/vscode-copilot#17806
1 parent 05edb9a commit 93a3972

File tree

6 files changed

+24
-31
lines changed

6 files changed

+24
-31
lines changed

src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,16 +260,9 @@ export function registerChatTitleActions() {
260260
const request = chatModel?.getRequests().find(candidate => candidate.id === item.requestId);
261261
const languageModelId = widget?.input.currentLanguageModel;
262262

263-
let userSelectedTools: Record<string, boolean> | undefined;
264-
if (widget?.input.currentMode === ChatMode.Agent) {
265-
userSelectedTools = {};
266-
for (const [tool, enablement] of widget.input.selectedToolsModel.asEnablementMap()) {
267-
userSelectedTools[tool.id] = enablement;
268-
}
269-
}
270263
chatService.resendRequest(request!, {
271264
userSelectedModelId: languageModelId,
272-
userSelectedTools,
265+
userSelectedTools: widget?.getUserSelectedTools(),
273266
attempt: (request?.attempt ?? -1) + 1,
274267
mode: widget?.input.currentMode,
275268
});

src/vs/workbench/contrib/chat/browser/chat.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ export interface IChatWidget {
205205
focusLastMessage(): void;
206206
focusInput(): void;
207207
hasInputFocus(): boolean;
208+
getUserSelectedTools(): Record<string, boolean> | undefined;
208209
getCodeBlockInfoForEditor(uri: URI): IChatCodeBlockInfo | undefined;
209210
getCodeBlockInfosForResponse(response: IChatResponseViewModel): IChatCodeBlockInfo[];
210211
getFileTreeInfosForResponse(response: IChatResponseViewModel): IChatFileTreeInfo[];

src/vs/workbench/contrib/chat/browser/chatContentParts/chatConfirmationContentPart.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import { IInstantiationService } from '../../../../../platform/instantiation/com
1010
import { IChatProgressRenderableResponseContent } from '../../common/chatModel.js';
1111
import { IChatConfirmation, IChatSendRequestOptions, IChatService } from '../../common/chatService.js';
1212
import { isResponseVM } from '../../common/chatViewModel.js';
13-
import { ChatMode } from '../../common/constants.js';
14-
import { ILanguageModelToolsService } from '../../common/languageModelToolsService.js';
1513
import { IChatWidgetService } from '../chat.js';
1614
import { ChatConfirmationWidget } from './chatConfirmationWidget.js';
1715
import { IChatContentPart, IChatContentPartRenderContext } from './chatContentParts.js';
@@ -28,7 +26,6 @@ export class ChatConfirmationContentPart extends Disposable implements IChatCont
2826
@IInstantiationService private readonly instantiationService: IInstantiationService,
2927
@IChatService private readonly chatService: IChatService,
3028
@IChatWidgetService chatWidgetService: IChatWidgetService,
31-
@ILanguageModelToolsService private readonly toolsService: ILanguageModelToolsService,
3229
) {
3330
super();
3431

@@ -59,14 +56,7 @@ export class ChatConfirmationContentPart extends Disposable implements IChatCont
5956
const widget = chatWidgetService.getWidgetBySessionId(element.sessionId);
6057
options.userSelectedModelId = widget?.input.currentLanguageModel;
6158
options.mode = widget?.input.currentMode;
62-
if (widget?.input.currentMode2.customTools) {
63-
options.userSelectedTools = this.toolsService.toEnablementMap(widget.input.currentMode2.customTools);
64-
} else if (widget?.input.currentMode === ChatMode.Agent) {
65-
options.userSelectedTools = {};
66-
for (const [tool, enablement] of widget.input.selectedToolsModel.asEnablementMap()) {
67-
options.userSelectedTools[tool.id] = enablement;
68-
}
69-
}
59+
options.userSelectedTools = widget?.getUserSelectedTools();
7060

7161
if (await this.chatService.sendRequest(element.sessionId, prompt, options)) {
7262
confirmation.isUsed = true;

src/vs/workbench/contrib/chat/browser/chatContentParts/chatErrorConfirmationPart.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export class ChatErrorConfirmationContentPart extends Disposable implements ICha
6161
options.confirmation = buttonData.label;
6262
const widget = chatWidgetService.getWidgetBySessionId(element.sessionId);
6363
options.userSelectedModelId = widget?.input.currentLanguageModel;
64+
options.userSelectedTools = widget?.getUserSelectedTools();
6465
options.mode = widget?.input.currentMode;
6566
if (await chatService.sendRequest(element.sessionId, prompt, options)) {
6667
this._onDidChangeHeight.fire();

src/vs/workbench/contrib/chat/browser/chatSetup.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,11 @@ class SetupAgent extends Disposable implements IChatAgentImplementation {
324324
}
325325
}
326326

327-
await chatService.resendRequest(requestModel, { mode, userSelectedModelId: languageModel });
327+
await chatService.resendRequest(requestModel, {
328+
mode,
329+
userSelectedModelId: languageModel,
330+
userSelectedTools: widget?.getUserSelectedTools()
331+
});
328332
}
329333

330334
private whenLanguageModelReady(languageModelsService: ILanguageModelsService): Promise<unknown> | void {

src/vs/workbench/contrib/chat/browser/chatWidget.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,16 +1324,6 @@ export class ChatWidget extends Disposable implements IChatWidget {
13241324

13251325
this.input.validateCurrentMode();
13261326

1327-
let userSelectedTools: Record<string, boolean> | undefined;
1328-
if (this.input.currentMode2.customTools) {
1329-
userSelectedTools = this.toolsService.toEnablementMap(this.input.currentMode2.customTools);
1330-
} else if (this.input.currentMode === ChatMode.Agent) {
1331-
userSelectedTools = {};
1332-
for (const [tool, enablement] of this.inputPart.selectedToolsModel.asEnablementMap()) {
1333-
userSelectedTools[tool.id] = enablement;
1334-
}
1335-
}
1336-
13371327
const result = await this.chatService.sendRequest(this.viewModel.sessionId, requestInputs.input, {
13381328
mode: this.inputPart.currentMode,
13391329
userSelectedModelId: this.inputPart.currentLanguageModel,
@@ -1342,7 +1332,7 @@ export class ChatWidget extends Disposable implements IChatWidget {
13421332
parserContext: { selectedAgent: this._lastSelectedAgent, mode: this.inputPart.currentMode },
13431333
attachedContext: requestInputs.attachedContext,
13441334
noCommandDetection: options?.noCommandDetection,
1345-
userSelectedTools,
1335+
userSelectedTools: this.getUserSelectedTools(),
13461336
});
13471337

13481338
if (result) {
@@ -1367,6 +1357,20 @@ export class ChatWidget extends Disposable implements IChatWidget {
13671357
return undefined;
13681358
}
13691359

1360+
getUserSelectedTools(): Record<string, boolean> | undefined {
1361+
if (this.input.currentMode2.customTools) {
1362+
return this.toolsService.toEnablementMap(this.input.currentMode2.customTools);
1363+
} else if (this.input.currentMode === ChatMode.Agent) {
1364+
const userSelectedTools: Record<string, boolean> = {};
1365+
for (const [tool, enablement] of this.inputPart.selectedToolsModel.asEnablementMap()) {
1366+
userSelectedTools[tool.id] = enablement;
1367+
}
1368+
return userSelectedTools;
1369+
}
1370+
1371+
return undefined;
1372+
}
1373+
13701374
getCodeBlockInfosForResponse(response: IChatResponseViewModel): IChatCodeBlockInfo[] {
13711375
return this.renderer.getCodeBlockInfosForResponse(response);
13721376
}

0 commit comments

Comments
 (0)