mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 20:13:32 +01:00
Update invokeTool to support Language
This commit is contained in:
@@ -101,4 +101,8 @@ export class MainThreadLanguageModelTools extends Disposable implements MainThre
|
||||
$unregisterTool(name: string): void {
|
||||
this._tools.deleteAndDispose(name);
|
||||
}
|
||||
|
||||
$supportsModel(toolId: string, modelId: string, token: CancellationToken): Promise<boolean | undefined> {
|
||||
return this._languageModelToolsService.supportsModel(toolId, modelId, token);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1594,8 +1594,11 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
registerTool<T>(name: string, tool: vscode.LanguageModelTool<T>) {
|
||||
return extHostLanguageModelTools.registerTool(extension, name, tool);
|
||||
},
|
||||
invokeTool<T>(name: string, parameters: vscode.LanguageModelToolInvocationOptions<T>, token?: vscode.CancellationToken) {
|
||||
return extHostLanguageModelTools.invokeTool(extension, name, parameters, token);
|
||||
invokeTool<T>(nameOrInfo: string | vscode.LanguageModelToolInformation, parameters: vscode.LanguageModelToolInvocationOptions<T>, token?: vscode.CancellationToken) {
|
||||
if (typeof nameOrInfo !== 'string') {
|
||||
checkProposedApiEnabled(extension, 'chatParticipantAdditions');
|
||||
}
|
||||
return extHostLanguageModelTools.invokeTool(extension, nameOrInfo, parameters, token);
|
||||
},
|
||||
get tools() {
|
||||
return extHostLanguageModelTools.getTools(extension);
|
||||
|
||||
@@ -1463,6 +1463,7 @@ export interface MainThreadLanguageModelToolsShape extends IDisposable {
|
||||
$countTokensForInvocation(callId: string, input: string, token: CancellationToken): Promise<number>;
|
||||
$registerTool(id: string): void;
|
||||
$unregisterTool(name: string): void;
|
||||
$supportsModel(toolId: string, modelId: string, token: CancellationToken): Promise<boolean | undefined>;
|
||||
}
|
||||
|
||||
export type IChatRequestVariableValueDto = Dto<IChatRequestVariableValue>;
|
||||
|
||||
@@ -101,7 +101,8 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape
|
||||
return await fn(input, token);
|
||||
}
|
||||
|
||||
async invokeTool(extension: IExtensionDescription, toolId: string, options: vscode.LanguageModelToolInvocationOptions<any>, token?: CancellationToken): Promise<vscode.LanguageModelToolResult> {
|
||||
async invokeTool(extension: IExtensionDescription, toolIdOrInfo: string | vscode.LanguageModelToolInformation, options: vscode.LanguageModelToolInvocationOptions<any>, token?: CancellationToken): Promise<vscode.LanguageModelToolResult> {
|
||||
const toolId = typeof toolIdOrInfo === 'string' ? toolIdOrInfo : toolIdOrInfo.name;
|
||||
const callId = generateUuid();
|
||||
if (options.tokenizationOptions) {
|
||||
this._tokenCountFuncs.set(callId, options.tokenizationOptions.countTokens);
|
||||
@@ -176,21 +177,7 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape
|
||||
* @returns `true` if supported, `false` if not, `undefined` if no supportsModel implementation (treat as supported)
|
||||
*/
|
||||
async supportsModel(toolId: string, modelId: string, token: CancellationToken): Promise<boolean | undefined> {
|
||||
const item = this._registeredTools.get(toolId);
|
||||
if (!item) {
|
||||
// Tool is not registered in this extension host, assume it supports all models
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// supportsModel is a proposed API
|
||||
const supportsModelFn = item.tool.supportsModel;
|
||||
if (supportsModelFn) {
|
||||
const result = await supportsModelFn(modelId);
|
||||
return result ?? undefined;
|
||||
}
|
||||
|
||||
// No supportsModel method means tool supports all models
|
||||
return undefined;
|
||||
return this._proxy.$supportsModel(toolId, modelId, token);
|
||||
}
|
||||
|
||||
async $invokeTool(dto: Dto<IToolInvocation>, token: CancellationToken): Promise<Dto<IToolResult> | SerializableObjectWithBuffers<Dto<IToolResult>>> {
|
||||
@@ -309,8 +296,7 @@ export class ExtHostLanguageModelTools implements ExtHostLanguageModelToolsShape
|
||||
// supportsModel is a proposed API
|
||||
const supportsModelFn = item.tool.supportsModel;
|
||||
if (supportsModelFn) {
|
||||
const result = await supportsModelFn(modelId);
|
||||
return result ?? undefined;
|
||||
return supportsModelFn(modelId);
|
||||
}
|
||||
|
||||
return undefined;
|
||||
|
||||
@@ -410,6 +410,18 @@ declare module 'vscode' {
|
||||
* Fired when the set of tools on a chat request changes.
|
||||
*/
|
||||
export const onDidChangeChatRequestTools: Event<ChatRequest>;
|
||||
|
||||
/**
|
||||
* Invoke a tool by its full information object rather than just name.
|
||||
* This allows disambiguation when multiple tools have the same name
|
||||
* (e.g., from different MCP servers or model-specific implementations).
|
||||
*
|
||||
* @param tool The tool information object, typically obtained from {@link lm.tools}.
|
||||
* @param options The options to use when invoking the tool.
|
||||
* @param token A cancellation token.
|
||||
* @returns The result of the tool invocation.
|
||||
*/
|
||||
export function invokeTool(tool: LanguageModelToolInformation, options: LanguageModelToolInvocationOptions<object>, token?: CancellationToken): Thenable<LanguageModelToolResult>;
|
||||
}
|
||||
|
||||
export class LanguageModelToolExtensionSource {
|
||||
|
||||
Reference in New Issue
Block a user