Skip to content

Commit 194193e

Browse files
authored
Fix context key setting of model picker (microsoft#259023)
1 parent 35eddf1 commit 194193e

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/vs/workbench/contrib/chat/browser/chatInputPart.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
278278
private _onDidChangeCurrentLanguageModel: Emitter<ILanguageModelChatMetadataAndIdentifier>;
279279

280280
private _currentLanguageModel: ILanguageModelChatMetadataAndIdentifier | undefined;
281-
private readonly _hasUserSelectableModels: IContextKey<boolean>;
281+
282282
get currentLanguageModel() {
283283
return this._currentLanguageModel?.identifier;
284284
}
@@ -424,7 +424,6 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
424424
this.inputEditorHasFocus = ChatContextKeys.inputHasFocus.bindTo(contextKeyService);
425425
this.promptFileAttached = ChatContextKeys.hasPromptFile.bindTo(contextKeyService);
426426
this.chatModeKindKey = ChatContextKeys.chatModeKind.bindTo(contextKeyService);
427-
this._hasUserSelectableModels = ChatContextKeys.languageModelsAreUserSelectable.bindTo(contextKeyService);
428427
const chatToolCount = ChatContextKeys.chatToolCount.bindTo(contextKeyService);
429428

430429
this._register(autorun(reader => {
@@ -641,7 +640,6 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
641640

642641
private setCurrentLanguageModel(model: ILanguageModelChatMetadataAndIdentifier) {
643642
this._currentLanguageModel = model;
644-
this._hasUserSelectableModels.set(true);
645643

646644
if (this.cachedDimensions) {
647645
// For quick chat and editor chat, relayout because the input may need to shrink to accomodate the model name

src/vs/workbench/contrib/chat/common/languageModels.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ import { DisposableStore, IDisposable, toDisposable } from '../../../../base/com
1212
import { isFalsyOrWhitespace } from '../../../../base/common/strings.js';
1313
import { URI } from '../../../../base/common/uri.js';
1414
import { localize } from '../../../../nls.js';
15+
import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
1516
import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';
1617
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
1718
import { ILogService } from '../../../../platform/log/common/log.js';
1819
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
1920
import { IExtensionService, isProposedApiEnabled } from '../../../services/extensions/common/extensions.js';
2021
import { ExtensionsRegistry } from '../../../services/extensions/common/extensionsRegistry.js';
22+
import { ChatContextKeys } from './chatContextKeys.js';
2123

2224
export const enum ChatMessageRole {
2325
System,
@@ -297,17 +299,23 @@ export class LanguageModelsService implements ILanguageModelsService {
297299
private readonly _vendors = new Map<string, IUserFriendlyLanguageModel>();
298300
private readonly _modelPickerUserPreferences: Record<string, boolean> = {}; // We use a record instead of a map for better serialization when storing
299301

302+
private readonly _hasUserSelectableModels: IContextKey<boolean>;
300303
private readonly _onLanguageModelChange = this._store.add(new Emitter<void>());
301304
readonly onDidChangeLanguageModels: Event<void> = this._onLanguageModelChange.event;
302305

303306
constructor(
304307
@IExtensionService private readonly _extensionService: IExtensionService,
305308
@ILogService private readonly _logService: ILogService,
306-
@IStorageService private readonly _storageService: IStorageService
309+
@IStorageService private readonly _storageService: IStorageService,
310+
@IContextKeyService _contextKeyService: IContextKeyService
307311
) {
308-
312+
this._hasUserSelectableModels = ChatContextKeys.languageModelsAreUserSelectable.bindTo(_contextKeyService);
309313
this._modelPickerUserPreferences = this._storageService.getObject<Record<string, boolean>>('chatModelPickerPreferences', StorageScope.PROFILE, this._modelPickerUserPreferences);
310314

315+
this._store.add(this.onDidChangeLanguageModels(() => {
316+
this._hasUserSelectableModels.set(this._modelCache.size > 0 && Array.from(this._modelCache.values()).some(model => model.isUserSelectable));
317+
}));
318+
311319
this._store.add(languageModelExtensionPoint.setHandler((extensions) => {
312320

313321
this._vendors.clear();

src/vs/workbench/contrib/chat/test/common/languageModels.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { DEFAULT_MODEL_PICKER_CATEGORY } from '../../common/modelPicker/modelPic
1717
import { ExtensionIdentifier } from '../../../../../platform/extensions/common/extensions.js';
1818
import { TestStorageService } from '../../../../test/common/workbenchTestServices.js';
1919
import { Event } from '../../../../../base/common/event.js';
20+
import { MockContextKeyService } from '../../../../../platform/keybinding/test/common/mockKeybindingService.js';
2021

2122
suite('LanguageModels', function () {
2223

@@ -35,7 +36,8 @@ suite('LanguageModels', function () {
3536
}
3637
},
3738
new NullLogService(),
38-
new TestStorageService()
39+
new TestStorageService(),
40+
new MockContextKeyService()
3941
);
4042

4143
const ext = ExtensionsRegistry.getExtensionPoints().find(e => e.name === languageModelExtensionPoint.name)!;

0 commit comments

Comments
 (0)