Skip to content

Commit d6b261f

Browse files
authored
Qualify chat model names with family (#254661)
chat models in prompts: qualify name with family
1 parent f57b94f commit d6b261f

File tree

9 files changed

+25
-17
lines changed

9 files changed

+25
-17
lines changed

src/vs/workbench/api/common/extHostLanguageModels.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import * as typeConvert from './extHostTypeConverters.js';
2626
import * as extHostTypes from './extHostTypes.js';
2727
import { SerializableObjectWithBuffers } from '../../services/extensions/common/proxyIdentifier.js';
2828
import { VSBuffer } from '../../../base/common/buffer.js';
29-
import { DEFAULT_MODEL_PICKER_CATEGORY } from '../../contrib/chat/common/modelPicker/modelPickerWidget.js';
3029

3130
export interface IExtHostLanguageModels extends ExtHostLanguageModels { }
3231

@@ -200,7 +199,7 @@ export class ExtHostLanguageModels implements ExtHostLanguageModelsShape {
200199
targetExtensions: metadata.extensions,
201200
isDefault: metadata.isDefault,
202201
isUserSelectable: metadata.isUserSelectable,
203-
modelPickerCategory: metadata.category ?? DEFAULT_MODEL_PICKER_CATEGORY,
202+
modelPickerCategory: metadata.category,
204203
capabilities: metadata.capabilities,
205204
});
206205

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
453453
const mode = this._currentModeObservable.read(r);
454454
const model = mode.model?.read(r);
455455
if (model) {
456-
this.switchModelByName(model);
456+
this.switchModelByQualifiedName(model);
457457
}
458458
}));
459459
}
@@ -518,9 +518,9 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge
518518
}
519519
}
520520

521-
public switchModelByName(modelName: string): boolean {
521+
public switchModelByQualifiedName(qualifiedModelName: string): boolean {
522522
const models = this.getModels();
523-
const model = models.find(m => m.metadata.name === modelName);
523+
const model = models.find(m => ILanguageModelChatMetadata.asQualifiedName(m.metadata) === qualifiedModelName);
524524
if (model) {
525525
this.setCurrentLanguageModel(model);
526526
return true;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,9 +1116,9 @@ export class ChatWidget extends Disposable implements IChatWidget {
11161116
}
11171117

11181118
this.inputPart.setChatMode(this.inlineInputPart.currentModeKind);
1119-
const currentModelName = this.inlineInputPart.selectedLanguageModel?.metadata.name;
1120-
if (currentModelName) {
1121-
this.inputPart.switchModelByName(currentModelName);
1119+
const currentModel = this.inlineInputPart.selectedLanguageModel;
1120+
if (currentModel) {
1121+
this.inputPart.switchModel(currentModel.metadata);
11221122
}
11231123

11241124
const isInput = this.configurationService.getValue<string>('chat.editRequests') === 'input';
@@ -1952,7 +1952,7 @@ export class ChatWidget extends Disposable implements IChatWidget {
19521952
}
19531953

19541954
if (model !== undefined) {
1955-
this.input.switchModelByName(model);
1955+
this.input.switchModelByQualifiedName(model);
19561956
}
19571957
}
19581958

src/vs/workbench/contrib/chat/browser/modelPicker/modelPickerActionItem.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { getFlatActionBarActions } from '../../../../../platform/actions/browser
1919
import { ICommandService } from '../../../../../platform/commands/common/commands.js';
2020
import { ChatEntitlement, IChatEntitlementService } from '../../common/chatEntitlementService.js';
2121
import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';
22+
import { DEFAULT_MODEL_PICKER_CATEGORY } from '../../common/modelPicker/modelPickerWidget.js';
2223

2324
export interface IModelPickerDelegate {
2425
readonly onDidChangeModel: Event<ILanguageModelChatMetadataAndIdentifier>;
@@ -35,7 +36,7 @@ function modelDelegateToWidgetActionsProvider(delegate: IModelPickerDelegate): I
3536
id: model.metadata.id,
3637
enabled: true,
3738
checked: model.metadata.id === delegate.getCurrentModel()?.metadata.id,
38-
category: model.metadata.modelPickerCategory,
39+
category: model.metadata.modelPickerCategory || DEFAULT_MODEL_PICKER_CATEGORY,
3940
class: undefined,
4041
description: model.metadata.cost,
4142
tooltip: model.metadata.description ?? model.metadata.name,

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export interface ILanguageModelChatMetadata {
134134

135135
readonly isDefault?: boolean;
136136
readonly isUserSelectable?: boolean;
137-
readonly modelPickerCategory: { label: string; order: number };
137+
readonly modelPickerCategory: { label: string; order: number } | undefined;
138138
readonly auth?: {
139139
readonly providerLabel: string;
140140
readonly accountLabel?: string;
@@ -151,6 +151,14 @@ export namespace ILanguageModelChatMetadata {
151151
const supportsToolsAgent = typeof metadata.capabilities?.agentMode === 'undefined' || metadata.capabilities.agentMode;
152152
return supportsToolsAgent && !!metadata.capabilities?.toolCalling;
153153
}
154+
155+
export function asQualifiedName(metadata: ILanguageModelChatMetadata): string {
156+
if (metadata.modelPickerCategory === undefined) {
157+
// in the others category
158+
return `${metadata.name} (${metadata.family})`;
159+
}
160+
return metadata.name;
161+
}
154162
}
155163

156164
export interface ILanguageModelChatResponse {

src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ export class PromptHeaderAutocompletion extends Disposable implements Completion
228228
const metadata = this.languageModelsService.lookupLanguageModel(model);
229229
if (metadata && metadata.isUserSelectable !== false) {
230230
if (!agentModeOnly || ILanguageModelChatMetadata.suitableForAgentMode(metadata)) {
231-
result.push(metadata.name);
231+
result.push(ILanguageModelChatMetadata.asQualifiedName(metadata));
232232
}
233233
}
234234
}

src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase {
123123
findModelByName(languageModes: string[], modelName: string): ILanguageModelChatMetadata | undefined {
124124
for (const model of languageModes) {
125125
const metadata = this.languageModelsService.lookupLanguageModel(model);
126-
if (metadata && metadata.isUserSelectable !== false && metadata.name === modelName) {
126+
if (metadata && metadata.isUserSelectable !== false && ILanguageModelChatMetadata.asQualifiedName(metadata) === modelName) {
127127
return metadata;
128128
}
129129
}

src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { Hover, HoverContext, HoverProvider } from '../../../../../../editor/com
1212
import { ITextModel } from '../../../../../../editor/common/model.js';
1313
import { ILanguageFeaturesService } from '../../../../../../editor/common/services/languageFeatures.js';
1414
import { localize } from '../../../../../../nls.js';
15-
import { ILanguageModelsService } from '../../languageModels.js';
15+
import { ILanguageModelChatMetadata, ILanguageModelsService } from '../../languageModels.js';
1616
import { ILanguageModelToolsService, ToolSet } from '../../languageModelToolsService.js';
1717
import { InstructionsHeader } from '../parsers/promptHeader/instructionsHeader.js';
1818
import { PromptModelMetadata } from '../parsers/promptHeader/metadata/model.js';
@@ -156,7 +156,7 @@ export class PromptHeaderHoverProvider extends Disposable implements HoverProvid
156156
if (modelName) {
157157
for (const id of this.languageModelsService.getLanguageModelIds()) {
158158
const meta = this.languageModelsService.lookupLanguageModel(id);
159-
if (meta && meta.name === modelName) {
159+
if (meta && ILanguageModelChatMetadata.asQualifiedName(meta) === modelName) {
160160
const lines: string[] = [];
161161
lines.push(baseMessage + '\n');
162162
lines.push(localize('modelName', '- Name: {0}', meta.name));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ suite('LanguageModels', function () {
5151
name: 'Pretty Name',
5252
vendor: 'test-vendor',
5353
family: 'test-family',
54-
modelPickerCategory: DEFAULT_MODEL_PICKER_CATEGORY,
5554
version: 'test-version',
55+
modelPickerCategory: undefined,
5656
id: 'test-id',
5757
maxInputTokens: 100,
5858
maxOutputTokens: 100,
@@ -72,7 +72,7 @@ suite('LanguageModels', function () {
7272
vendor: 'test-vendor',
7373
family: 'test2-family',
7474
version: 'test2-version',
75-
modelPickerCategory: DEFAULT_MODEL_PICKER_CATEGORY,
75+
modelPickerCategory: undefined,
7676
id: 'test-id',
7777
maxInputTokens: 100,
7878
maxOutputTokens: 100,

0 commit comments

Comments
 (0)