mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-19 22:59:48 +01:00
Revert "key selected tools based on reference name"
This reverts commit 13a39cc1e2.
This commit is contained in:
@@ -20,19 +20,15 @@ import { ILanguageModelToolsService, IToolAndToolSetEnablementMap, IToolData, IT
|
||||
import { PromptFileRewriter } from '../../promptSyntax/promptFileRewriter.js';
|
||||
|
||||
|
||||
// todo@connor4312/bhavyaus: make tools key off displayName so model-specific tool
|
||||
// enablement can stick between models with different underlying tool definitions
|
||||
type ToolEnablementStates = {
|
||||
/**
|
||||
* Whether tools are keyed by their reference name. This is a new format to
|
||||
* work with model-specific tools that may have different underlying names.
|
||||
*/
|
||||
readonly keyedByRefName: boolean;
|
||||
readonly toolSets: ReadonlyMap<string, boolean>;
|
||||
readonly tools: ReadonlyMap<string, boolean>;
|
||||
};
|
||||
|
||||
type StoredDataV2 = {
|
||||
readonly version: 2;
|
||||
readonly keyedByRefName?: boolean;
|
||||
readonly toolSetEntries: [string, boolean][];
|
||||
readonly toolEntries: [string, boolean][];
|
||||
};
|
||||
@@ -50,10 +46,10 @@ namespace ToolEnablementStates {
|
||||
if (isToolSet(entry)) {
|
||||
toolSets.set(entry.id, enabled);
|
||||
} else {
|
||||
tools.set(entry.toolReferenceName || entry.id, enabled);
|
||||
tools.set(entry.id, enabled);
|
||||
}
|
||||
}
|
||||
return { keyedByRefName: true, toolSets, tools };
|
||||
return { toolSets, tools };
|
||||
}
|
||||
|
||||
function isStoredDataV1(data: StoredDataV1 | StoredDataV2 | undefined): data is StoredDataV1 {
|
||||
@@ -70,17 +66,17 @@ namespace ToolEnablementStates {
|
||||
try {
|
||||
const parsed = JSON.parse(storage);
|
||||
if (isStoredDataV2(parsed)) {
|
||||
return { keyedByRefName: !!parsed.keyedByRefName, toolSets: new Map(parsed.toolSetEntries), tools: new Map(parsed.toolEntries) };
|
||||
return { toolSets: new Map(parsed.toolSetEntries), tools: new Map(parsed.toolEntries) };
|
||||
} else if (isStoredDataV1(parsed)) {
|
||||
const toolSetEntries = parsed.disabledToolSets?.map(id => [id, false] as [string, boolean]);
|
||||
const toolEntries = parsed.disabledTools?.map(id => [id, false] as [string, boolean]);
|
||||
return { keyedByRefName: false, toolSets: new Map(toolSetEntries), tools: new Map(toolEntries) };
|
||||
return { toolSets: new Map(toolSetEntries), tools: new Map(toolEntries) };
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
// invalid data
|
||||
return { keyedByRefName: true, toolSets: new Map(), tools: new Map() };
|
||||
return { toolSets: new Map(), tools: new Map() };
|
||||
}
|
||||
|
||||
export function toStorage(state: ToolEnablementStates): string {
|
||||
@@ -118,7 +114,7 @@ export class ChatSelectedTools extends Disposable {
|
||||
|
||||
const globalStateMemento = observableMemento<ToolEnablementStates>({
|
||||
key: 'chat/selectedTools',
|
||||
defaultValue: { keyedByRefName: true, toolSets: new Map(), tools: new Map() },
|
||||
defaultValue: { toolSets: new Map(), tools: new Map() },
|
||||
fromStorage: ToolEnablementStates.fromStorage,
|
||||
toStorage: ToolEnablementStates.toStorage
|
||||
});
|
||||
@@ -152,16 +148,14 @@ export class ChatSelectedTools extends Disposable {
|
||||
// Use getTools with contextKeyService to filter tools by current model
|
||||
for (const tool of this._currentTools.read(r)) {
|
||||
if (tool.canBeReferencedInPrompt) {
|
||||
const key = currentMap.keyedByRefName ? (tool.toolReferenceName || tool.id) : tool.id;
|
||||
map.set(tool, currentMap.tools.get(key) !== false); // if unknown, it's enabled
|
||||
map.set(tool, currentMap.tools.get(tool.id) !== false); // if unknown, it's enabled
|
||||
}
|
||||
}
|
||||
for (const toolSet of this._toolsService.getToolSetsForModel(lm, r)) {
|
||||
const toolSetEnabled = currentMap.toolSets.get(toolSet.id) !== false; // if unknown, it's enabled
|
||||
map.set(toolSet, toolSetEnabled);
|
||||
for (const tool of toolSet.getTools(r)) {
|
||||
const key = currentMap.keyedByRefName ? (tool.toolReferenceName || tool.id) : tool.id;
|
||||
map.set(tool, toolSetEnabled || currentMap.tools.get(key) === true); // if unknown, use toolSetEnabled
|
||||
map.set(tool, toolSetEnabled || currentMap.tools.get(tool.id) === true); // if unknown, use toolSetEnabled
|
||||
}
|
||||
}
|
||||
return map;
|
||||
|
||||
Reference in New Issue
Block a user