From d6060be7cb1fc39de907ea73ce5ae75dc944fd2b Mon Sep 17 00:00:00 2001 From: Johannes Date: Wed, 30 Apr 2025 11:02:29 +0200 Subject: [PATCH] don't clear tools, better apiObject implementation --- .../api/common/extHostLanguageModelTools.ts | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/api/common/extHostLanguageModelTools.ts b/src/vs/workbench/api/common/extHostLanguageModelTools.ts index c7d3503ba5b..c0a1bec3198 100644 --- a/src/vs/workbench/api/common/extHostLanguageModelTools.ts +++ b/src/vs/workbench/api/common/extHostLanguageModelTools.ts @@ -22,17 +22,16 @@ import * as typeConvert from './extHostTypeConverters.js'; import { SearchExtensionsToolId } from '../../contrib/extensions/common/searchExtensionsTool.js'; class Tool { + private _data: IToolDataDto; - private _apiObject: vscode.LanguageModelToolInformation; + private _apiObject: vscode.LanguageModelToolInformation | undefined; constructor(data: IToolDataDto) { this._data = data; - this._apiObject = typeConvert.LanguageModelToolDescription.to(this._data); } update(newData: IToolDataDto): void { this._data = newData; - Object.assign(this._apiObject, typeConvert.LanguageModelToolDescription.to(this._data)); } get data(): IToolDataDto { @@ -40,6 +39,15 @@ class Tool { } get apiObject(): vscode.LanguageModelToolInformation { + if (!this._apiObject) { + const that = this; + this._apiObject = Object.freeze({ + get name() { return that._data.id; }, + get description() { return that._data.modelDescription; }, + get inputSchema() { return that._data.inputSchema; }, + get tags() { return that._data.tags ?? []; }, + }); + } return this._apiObject; } } @@ -109,8 +117,11 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape } $onDidChangeTools(tools: IToolDataDto[]): void { - this._allTools.clear(); + + const oldTools = new Set(this._registeredTools.keys()); + for (const tool of tools) { + oldTools.delete(tool.id); const existing = this._allTools.get(tool.id); if (existing) { existing.update(tool); @@ -118,6 +129,10 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape this._allTools.set(tool.id, new Tool(revive(tool))); } } + + for (const id of oldTools) { + this._allTools.delete(id); + } } getTools(extension: IExtensionDescription): vscode.LanguageModelToolInformation[] {