Skip to content

Commit ae187fc

Browse files
committed
Wire model-provided eagerness prompts
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2bce40ed-b23b-4b38-8c2a-11a9b30a08ce
1 parent 6f8d0ee commit ae187fc

3 files changed

Lines changed: 39 additions & 3 deletions

File tree

extensions/copilot/src/platform/inlineEdits/common/dataTypes/inlineEditsModelsTypes.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,23 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IValidator, vArray, vObj, vString } from '../../../configuration/common/validator';
6+
import { IValidator, vArray, vObj, vString, vUndefined, vUnion } from '../../../configuration/common/validator';
77

88
export namespace WireTypes {
99

1010
export namespace Capabilities {
1111
export type t = {
1212
promptStrategy: string;
13+
eagernessPrompt?: string;
1314
};
1415
export function is(obj: unknown): obj is t {
1516
return !!obj && typeof obj === 'object' &&
16-
typeof (obj as t).promptStrategy === 'string';
17+
typeof (obj as t).promptStrategy === 'string' &&
18+
((obj as t).eagernessPrompt === undefined || typeof (obj as t).eagernessPrompt === 'string');
1719
}
1820
export const validator: IValidator<t> = vObj({
1921
promptStrategy: vString(),
22+
eagernessPrompt: vUnion(vString(), vUndefined()),
2023
});
2124
}
2225

@@ -54,4 +57,3 @@ export namespace WireTypes {
5457
}
5558
}
5659
}
57-

extensions/copilot/src/platform/inlineEdits/node/inlineEditsModelService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ export class InlineEditsModelService extends Disposable implements IInlineEditsM
263263
return {
264264
modelName: m.name,
265265
promptingStrategy: m.capabilities.promptStrategy,
266+
eagernessPrompt: m.capabilities.eagernessPrompt === 'aggressionHighLow' ? m.capabilities.eagernessPrompt : undefined,
266267
includeTagsInCurrentFile: false, // FIXME@ulugbekna: determine this based on model capabilities and config
267268
source: ModelSource.Fetched,
268269
lintOptions: undefined,

extensions/copilot/src/platform/proxyModels/test/node/proxyModelsService.spec.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,46 @@ import { IInstantiationService } from '../../../../util/vs/platform/instantiatio
1010
import { CopilotToken, createTestExtendedTokenInfo } from '../../../authentication/common/copilotToken';
1111
import { ICopilotTokenStore } from '../../../authentication/common/copilotTokenStore';
1212
import { getEditorVersionHeaders, IEnvService } from '../../../env/common/envService';
13+
import { WireTypes } from '../../../inlineEdits/common/dataTypes/inlineEditsModelsTypes';
1314
import { FetchOptions, IAbortController, IFetcherService, PaginationOptions, Response, WebSocketConnection } from '../../../networking/common/fetcherService';
1415
import { createFakeResponse } from '../../../test/node/fetcher';
1516
import { createPlatformServices } from '../../../test/node/services';
1617
import { ProxyModelsService } from '../../node/proxyModelsService';
1718

1819
suite('ProxyModelsService', function () {
1920

21+
test('validates optional eagerness prompts from the models response', function () {
22+
const withEagernessPrompt = WireTypes.ModelList.validator.validate({
23+
models: [{
24+
serviceType: 'NESChat',
25+
name: 'test-model',
26+
provider: 'test-provider',
27+
capabilities: {
28+
promptStrategy: 'patchBased02Optimized',
29+
eagernessPrompt: 'aggressionHighLow',
30+
},
31+
}],
32+
});
33+
const withoutEagernessPrompt = WireTypes.ModelList.validator.validate({
34+
models: [{
35+
serviceType: 'NESChat',
36+
name: 'test-model',
37+
provider: 'test-provider',
38+
capabilities: {
39+
promptStrategy: 'patchBased02Optimized',
40+
},
41+
}],
42+
});
43+
44+
assert.deepStrictEqual({
45+
withEagernessPrompt: withEagernessPrompt.content?.models[0].capabilities.eagernessPrompt,
46+
withoutEagernessPrompt: withoutEagernessPrompt.content?.models[0].capabilities.eagernessPrompt,
47+
}, {
48+
withEagernessPrompt: 'aggressionHighLow',
49+
withoutEagernessPrompt: undefined,
50+
});
51+
});
52+
2053
test('includes editor-related headers when fetching the models list', async function () {
2154
let capturedHeaders: { [name: string]: string } | undefined;
2255

0 commit comments

Comments
 (0)