Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/common/languageModelStats.ts
3296 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 { Disposable } from '../../../../base/common/lifecycle.js';
7
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
8
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
9
import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';
10
import { Extensions, IExtensionFeaturesManagementService, IExtensionFeaturesRegistry } from '../../../services/extensionManagement/common/extensionFeatures.js';
11
import { Registry } from '../../../../platform/registry/common/platform.js';
12
import { localize } from '../../../../nls.js';
13
import { Codicon } from '../../../../base/common/codicons.js';
14
15
export const ILanguageModelStatsService = createDecorator<ILanguageModelStatsService>('ILanguageModelStatsService');
16
17
export interface ILanguageModelStatsService {
18
readonly _serviceBrand: undefined;
19
20
update(model: string, extensionId: ExtensionIdentifier, agent: string | undefined, tokenCount: number | undefined): Promise<void>;
21
}
22
23
export class LanguageModelStatsService extends Disposable implements ILanguageModelStatsService {
24
25
declare _serviceBrand: undefined;
26
27
constructor(
28
@IExtensionFeaturesManagementService private readonly extensionFeaturesManagementService: IExtensionFeaturesManagementService,
29
@IStorageService storageService: IStorageService,
30
) {
31
super();
32
// TODO: @sandy081 - remove this code after a while
33
for (const key in storageService.keys(StorageScope.APPLICATION, StorageTarget.USER)) {
34
if (key.startsWith('languageModelStats.') || key.startsWith('languageModelAccess.')) {
35
storageService.remove(key, StorageScope.APPLICATION);
36
}
37
}
38
}
39
40
async update(model: string, extensionId: ExtensionIdentifier, agent: string | undefined, tokenCount: number | undefined): Promise<void> {
41
await this.extensionFeaturesManagementService.getAccess(extensionId, CopilotUsageExtensionFeatureId);
42
}
43
44
}
45
46
export const CopilotUsageExtensionFeatureId = 'copilot';
47
Registry.as<IExtensionFeaturesRegistry>(Extensions.ExtensionFeaturesRegistry).registerExtensionFeature({
48
id: CopilotUsageExtensionFeatureId,
49
label: localize('Language Models', "Copilot"),
50
description: localize('languageModels', "Language models usage statistics of this extension."),
51
icon: Codicon.copilot,
52
access: {
53
canToggle: false
54
},
55
accessDataLabel: localize('chat', "chat"),
56
});
57
58