api: generalize ToolResultAudience->LanguageModelTextPart

- Generalize as these parts are used in chat responses as well as tool
  results.
- Add a new 'extension' type for internal-only use.
This commit is contained in:
Connor Peet 2025-08-01 14:15:23 -07:00
parent 3aef8be5e4
commit 6aa4020594
No known key found for this signature in database
GPG Key ID: CF8FD2EA0DBC61BD
5 changed files with 33 additions and 19 deletions

View File

@ -1876,7 +1876,8 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
LanguageModelToolResultPart2: extHostTypes.LanguageModelToolResultPart2,
LanguageModelTextPart: extHostTypes.LanguageModelTextPart,
LanguageModelTextPart2: extHostTypes.LanguageModelTextPart,
ToolResultAudience: extHostTypes.ToolResultAudience,
LanguageModelPartAudience: extHostTypes.LanguageModelPartAudience,
ToolResultAudience: extHostTypes.LanguageModelPartAudience, // back compat
LanguageModelToolCallPart: extHostTypes.LanguageModelToolCallPart,
LanguageModelError: extHostTypes.LanguageModelError,
LanguageModelToolResult: extHostTypes.LanguageModelToolResult,

View File

@ -5024,16 +5024,17 @@ export class LanguageModelToolCallPart implements vscode.LanguageModelToolCallPa
}
}
export enum ToolResultAudience {
export enum LanguageModelPartAudience {
Assistant = 0,
User = 1,
Extension = 2,
}
export class LanguageModelTextPart implements vscode.LanguageModelTextPart2 {
value: string;
audience: vscode.ToolResultAudience[] | undefined;
audience: vscode.LanguageModelPartAudience[] | undefined;
constructor(value: string, audience?: vscode.ToolResultAudience[]) {
constructor(value: string, audience?: vscode.LanguageModelPartAudience[]) {
this.value = value;
audience = audience;
}
@ -5050,9 +5051,9 @@ export class LanguageModelTextPart implements vscode.LanguageModelTextPart2 {
export class LanguageModelDataPart implements vscode.LanguageModelDataPart2 {
mimeType: string;
data: Uint8Array<ArrayBufferLike>;
audience: vscode.ToolResultAudience[] | undefined;
audience: vscode.LanguageModelPartAudience[] | undefined;
constructor(data: Uint8Array<ArrayBufferLike>, mimeType: string, audience?: vscode.ToolResultAudience[]) {
constructor(data: Uint8Array<ArrayBufferLike>, mimeType: string, audience?: vscode.LanguageModelPartAudience[]) {
this.mimeType = mimeType;
this.data = data;
this.audience = audience;

View File

@ -22,7 +22,7 @@ import { VSBuffer } from '../../../../base/common/buffer.js';
import { derived, IObservable, IReader, ITransaction, ObservableSet } from '../../../../base/common/observable.js';
import { Iterable } from '../../../../base/common/iterator.js';
import { localize } from '../../../../nls.js';
import { ToolResultAudience } from './languageModels.js';
import { LanguageModelPartAudience } from './languageModels.js';
export interface IToolData {
id: string;
@ -192,7 +192,7 @@ export function stringifyPromptTsxPart(part: IToolResultPromptTsxPart): string {
export interface IToolResultTextPart {
kind: 'text';
value: string;
audience?: ToolResultAudience[];
audience?: LanguageModelPartAudience[];
}
export interface IToolResultDataPart {
@ -201,7 +201,7 @@ export interface IToolResultDataPart {
mimeType: string;
data: VSBuffer;
};
audience?: ToolResultAudience[];
audience?: LanguageModelPartAudience[];
}
export interface IToolConfirmationMessages {

View File

@ -27,15 +27,16 @@ export const enum ChatMessageRole {
Assistant,
}
export enum ToolResultAudience {
export enum LanguageModelPartAudience {
Assistant = 0,
User = 1,
Extension = 2,
}
export interface IChatMessageTextPart {
type: 'text';
value: string;
audience?: ToolResultAudience[];
audience?: LanguageModelPartAudience[];
}
export interface IChatMessageImagePart {
@ -47,7 +48,7 @@ export interface IChatMessageDataPart {
type: 'data';
mimeType: string;
data: VSBuffer;
audience?: ToolResultAudience[];
audience?: LanguageModelPartAudience[];
}
export interface IChatImageURLPart {
@ -100,7 +101,7 @@ export interface IChatMessage {
export interface IChatResponseTextPart {
type: 'text';
value: string;
audience?: ToolResultAudience[];
audience?: LanguageModelPartAudience[];
}
export interface IChatResponsePromptTsxPart {
@ -111,7 +112,7 @@ export interface IChatResponsePromptTsxPart {
export interface IChatResponseDataPart {
type: 'data';
value: IChatImageURLPart;
audience?: ToolResultAudience[];
audience?: LanguageModelPartAudience[];
}
export interface IChatResponseToolUsePart {

View File

@ -5,21 +5,32 @@
declare module 'vscode' {
export enum ToolResultAudience {
export enum LanguageModelPartAudience {
/**
* The part should be shown to the language model.
*/
Assistant = 0,
/**
* The part should be shown to the user.
*/
User = 1,
/**
* The part should should be retained for internal bookkeeping within
* extensions.
*/
Extension = 2,
}
/**
* A language model response part containing a piece of text, returned from a {@link LanguageModelChatResponse}.
*/
export class LanguageModelTextPart2 extends LanguageModelTextPart {
audience: ToolResultAudience[] | undefined;
constructor(value: string, audience?: ToolResultAudience[]);
audience: LanguageModelPartAudience[] | undefined;
constructor(value: string, audience?: LanguageModelPartAudience[]);
}
export class LanguageModelDataPart2 extends LanguageModelDataPart {
audience: ToolResultAudience[] | undefined;
constructor(data: Uint8Array, mimeType: string, audience?: ToolResultAudience[]);
audience: LanguageModelPartAudience[] | undefined;
constructor(data: Uint8Array, mimeType: string, audience?: LanguageModelPartAudience[]);
}
}