Path: blob/main/src/vs/workbench/contrib/chat/common/languageModelStats.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Disposable } from '../../../../base/common/lifecycle.js';6import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';7import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';8import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';9import { Extensions, IExtensionFeaturesManagementService, IExtensionFeaturesRegistry } from '../../../services/extensionManagement/common/extensionFeatures.js';10import { Registry } from '../../../../platform/registry/common/platform.js';11import { localize } from '../../../../nls.js';12import { Codicon } from '../../../../base/common/codicons.js';1314export const ILanguageModelStatsService = createDecorator<ILanguageModelStatsService>('ILanguageModelStatsService');1516export interface ILanguageModelStatsService {17readonly _serviceBrand: undefined;1819update(model: string, extensionId: ExtensionIdentifier, agent: string | undefined, tokenCount: number | undefined): Promise<void>;20}2122export class LanguageModelStatsService extends Disposable implements ILanguageModelStatsService {2324declare _serviceBrand: undefined;2526constructor(27@IExtensionFeaturesManagementService private readonly extensionFeaturesManagementService: IExtensionFeaturesManagementService,28@IStorageService storageService: IStorageService,29) {30super();31// TODO: @sandy081 - remove this code after a while32for (const key in storageService.keys(StorageScope.APPLICATION, StorageTarget.USER)) {33if (key.startsWith('languageModelStats.') || key.startsWith('languageModelAccess.')) {34storageService.remove(key, StorageScope.APPLICATION);35}36}37}3839async update(model: string, extensionId: ExtensionIdentifier, agent: string | undefined, tokenCount: number | undefined): Promise<void> {40await this.extensionFeaturesManagementService.getAccess(extensionId, CopilotUsageExtensionFeatureId);41}4243}4445export const CopilotUsageExtensionFeatureId = 'copilot';46Registry.as<IExtensionFeaturesRegistry>(Extensions.ExtensionFeaturesRegistry).registerExtensionFeature({47id: CopilotUsageExtensionFeatureId,48label: localize('Language Models', "Copilot"),49description: localize('languageModels', "Language models usage statistics of this extension."),50icon: Codicon.copilot,51access: {52canToggle: false53},54accessDataLabel: localize('chat', "chat"),55});565758