Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/test/vscode-node/endpoints.test.ts
13399 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { SinonSandbox, createSandbox } from 'sinon';
8
import { LanguageModelChat } from 'vscode';
9
import { CHAT_MODEL } from '../../../platform/configuration/common/configurationService';
10
import { IChatModelInformation, ICompletionModelInformation, IEmbeddingModelInformation } from '../../../platform/endpoint/common/endpointProvider';
11
import { IModelMetadataFetcher } from '../../../platform/endpoint/node/modelMetadataFetcher';
12
import { ITestingServicesAccessor } from '../../../platform/test/node/services';
13
import { TokenizerType } from '../../../util/common/tokenizer';
14
import { Event } from '../../../util/vs/base/common/event';
15
import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';
16
import { ProductionEndpointProvider } from '../../prompt/vscode-node/endpointProviderImpl';
17
import { createExtensionTestingServices } from './services';
18
19
class FakeModelMetadataFetcher implements IModelMetadataFetcher {
20
public onDidModelsRefresh = Event.None;
21
async getAllChatModels(): Promise<IChatModelInformation[]> {
22
return [];
23
}
24
async getAllCompletionModels(forceRefresh: boolean): Promise<ICompletionModelInformation[]> {
25
return [];
26
}
27
async getChatModelFromApiModel(model: LanguageModelChat): Promise<IChatModelInformation | undefined> {
28
return undefined;
29
}
30
async getChatModelFromFamily(modelId: string): Promise<IChatModelInformation> {
31
return {
32
id: modelId,
33
vendor: 'fake-vendor',
34
name: 'fake-name',
35
version: 'fake-version',
36
model_picker_enabled: false,
37
is_chat_default: false,
38
is_chat_fallback: false,
39
capabilities: {
40
supports: { streaming: true },
41
type: 'chat',
42
tokenizer: TokenizerType.O200K,
43
family: 'fake-family'
44
}
45
};
46
}
47
48
async getEmbeddingsModel(): Promise<IEmbeddingModelInformation> {
49
return {
50
id: 'text-embedding-3-small',
51
name: 'fake-name',
52
vendor: 'fake-vendor',
53
version: 'fake-version',
54
model_picker_enabled: false,
55
is_chat_default: false,
56
is_chat_fallback: false,
57
capabilities: {
58
type: 'embeddings',
59
tokenizer: TokenizerType.O200K,
60
family: 'text-embedding-3-small',
61
limits: { max_inputs: 256 }
62
}
63
};
64
}
65
}
66
67
suite('Endpoint Class Test', function () {
68
let accessor: ITestingServicesAccessor;
69
let endpointProvider: ProductionEndpointProvider;
70
let sandbox: SinonSandbox;
71
72
setup(() => {
73
accessor = createExtensionTestingServices().createTestingAccessor();
74
endpointProvider = accessor.get(IInstantiationService).createInstance(ProductionEndpointProvider);
75
sandbox = createSandbox();
76
//@ts-expect-error
77
sandbox.replace(endpointProvider, '_modelFetcher', new FakeModelMetadataFetcher());
78
});
79
80
teardown(() => {
81
sandbox.restore();
82
});
83
84
test('Model names have proper casing', async function () {
85
assert.strictEqual(CHAT_MODEL.GPT41, 'gpt-4.1-2025-04-14', 'Incorrect GPT 41 model name, changing this will break requests.');
86
assert.strictEqual(CHAT_MODEL.GPT4OMINI, 'gpt-4o-mini', 'Incorrect GPT 4o mini model name, changing this will break requests.');
87
});
88
});
89
90