diff --git a/package-lock.json b/package-lock.json index e47d53e34cf800..20eff3d3fa0f42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@microsoft/mxc-sdk": "0.6.1", "@parcel/watcher": "^2.5.6", "@types/semver": "^7.5.8", - "@vscode/codicons": "^0.0.46-27", + "@vscode/codicons": "^0.0.46-28", "@vscode/copilot-api": "^0.4.2", "@vscode/deviceid": "^0.1.1", "@vscode/diff": "0.0.2-7", @@ -4171,9 +4171,9 @@ } }, "node_modules/@vscode/codicons": { - "version": "0.0.46-27", - "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.46-27.tgz", - "integrity": "sha512-R6lEiJzbDrcrIT+pjM0aauVFjGXVHj4K9ClMzI4aOQWZH/fSswOJljypunppD81Mjwia1RzxA5LiBAlBJUI5PA==", + "version": "0.0.46-28", + "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.46-28.tgz", + "integrity": "sha512-Rj3yNS72a7N0FN/JeT/muXRCBzNNvnbQ99B++bCDyaOZkbHAfP/3DS7YoiAxa4z+ZiG5ZowJ5b9ncB40YGe1ig==", "license": "CC-BY-4.0" }, "node_modules/@vscode/component-explorer": { diff --git a/package.json b/package.json index 6603d8bc5a05a8..4616d7a71dabe3 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "@microsoft/mxc-sdk": "0.6.1", "@parcel/watcher": "^2.5.6", "@types/semver": "^7.5.8", - "@vscode/codicons": "^0.0.46-27", + "@vscode/codicons": "^0.0.46-28", "@vscode/copilot-api": "^0.4.2", "@vscode/deviceid": "^0.1.1", "@vscode/diff": "0.0.2-7", diff --git a/remote/web/package-lock.json b/remote/web/package-lock.json index 619c300ac42040..423c55ef873115 100644 --- a/remote/web/package-lock.json +++ b/remote/web/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", "@microsoft/1ds-post-js": "^3.2.13", - "@vscode/codicons": "^0.0.46-27", + "@vscode/codicons": "^0.0.46-28", "@vscode/iconv-lite-umd": "0.7.1", "@vscode/tree-sitter-wasm": "^0.3.1", "@vscode/vscode-languagedetection": "1.0.23", @@ -73,9 +73,9 @@ "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" }, "node_modules/@vscode/codicons": { - "version": "0.0.46-27", - "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.46-27.tgz", - "integrity": "sha512-R6lEiJzbDrcrIT+pjM0aauVFjGXVHj4K9ClMzI4aOQWZH/fSswOJljypunppD81Mjwia1RzxA5LiBAlBJUI5PA==", + "version": "0.0.46-28", + "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.46-28.tgz", + "integrity": "sha512-Rj3yNS72a7N0FN/JeT/muXRCBzNNvnbQ99B++bCDyaOZkbHAfP/3DS7YoiAxa4z+ZiG5ZowJ5b9ncB40YGe1ig==", "license": "CC-BY-4.0" }, "node_modules/@vscode/iconv-lite-umd": { diff --git a/remote/web/package.json b/remote/web/package.json index 06348620438c5a..393d4dc09e5c80 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -5,7 +5,7 @@ "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", "@microsoft/1ds-post-js": "^3.2.13", - "@vscode/codicons": "^0.0.46-27", + "@vscode/codicons": "^0.0.46-28", "@vscode/iconv-lite-umd": "0.7.1", "@vscode/tree-sitter-wasm": "^0.3.1", "@vscode/vscode-languagedetection": "1.0.23", diff --git a/src/vs/base/common/codiconsLibrary.ts b/src/vs/base/common/codiconsLibrary.ts index cbd904ba4edae1..06e709dd15a57d 100644 --- a/src/vs/base/common/codiconsLibrary.ts +++ b/src/vs/base/common/codiconsLibrary.ts @@ -759,4 +759,5 @@ export const codiconsLibrary = { cloudUploadCompact: register('cloud-upload-compact', 0xece9), micCompact: register('mic-compact', 0xecea), arrowUpCompact: register('arrow-up-compact', 0xeceb), + xai: register('xai', 0xecec), } as const; diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelProviderIcons.ts b/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelProviderIcons.ts index d2a8c602a69b31..4a8624bcc30b6f 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelProviderIcons.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/modelPicker/modelProviderIcons.ts @@ -15,16 +15,20 @@ const claudeModelProviderIcon = registerIcon('chat-model-provider-claude', Codic const geminiModelProviderIcon = registerIcon('chat-model-provider-gemini', Codicon.googleGemini, localize('chatModelProviderGeminiIcon', "Icon for Gemini models.")); const kimiModelProviderIcon = registerIcon('chat-model-provider-kimi', Codicon.kimi, localize('chatModelProviderKimiIcon', "Icon for Kimi models.")); const microsoftModelProviderIcon = registerIcon('chat-model-provider-microsoft', Codicon.microsoft, localize('chatModelProviderMicrosoftIcon', "Icon for Microsoft models.")); +const xAIModelProviderIcon = registerIcon('chat-model-provider-xai', Codicon.xai, localize('chatModelProviderXAIIcon', "Icon for xAI models.")); const genericModelProviderIcon = registerIcon('chat-model-provider-generic', Codicon.sparkle, localize('chatModelProviderGenericIcon', "Icon for other model providers.")); export function getModelProviderIcon(model: ILanguageModelChatMetadataAndIdentifier): ThemeIcon { + const identity = `${model.metadata.vendor} ${model.metadata.family} ${model.metadata.id} ${model.metadata.name}`.toLowerCase(); + if (identity.includes('grok') || identity.includes('xai')) { + return xAIModelProviderIcon; + } if (model.metadata.isBYOK) { return genericModelProviderIcon; } if (isAutoLanguageModel(model)) { return copilotModelProviderIcon; } - const identity = `${model.metadata.vendor} ${model.metadata.family} ${model.metadata.id} ${model.metadata.name}`.toLowerCase(); if (identity.includes('claude') || identity.includes('anthropic')) { return claudeModelProviderIcon; } @@ -40,7 +44,8 @@ export function getModelProviderIcon(model: ILanguageModelChatMetadataAndIdentif if (identity.includes('openai') || identity.includes('gpt') || identity.includes('codex') || /\bo[134]\b/.test(identity)) { return openAIModelProviderIcon; } - if (identity.includes('copilot')) { + const modelIdentity = `${model.metadata.id} ${model.metadata.name}`.toLowerCase(); + if (modelIdentity.includes('copilot')) { return copilotModelProviderIcon; } return genericModelProviderIcon; diff --git a/src/vs/workbench/contrib/chat/test/browser/widget/input/modelPicker/modelProviderIcons.test.ts b/src/vs/workbench/contrib/chat/test/browser/widget/input/modelPicker/modelProviderIcons.test.ts index 36f1721e6f2089..6281ce23216701 100644 --- a/src/vs/workbench/contrib/chat/test/browser/widget/input/modelPicker/modelProviderIcons.test.ts +++ b/src/vs/workbench/contrib/chat/test/browser/widget/input/modelPicker/modelProviderIcons.test.ts @@ -36,7 +36,11 @@ suite('ModelProviderIcons', () => { getModelProviderIcon(createModel('claude-sonnet-5', 'Claude Sonnet 5')).id, getModelProviderIcon(createModel('gemini-3.1-pro', 'Gemini 3.1 Pro')).id, getModelProviderIcon(createModel('kimi-k2.5', 'Kimi K2.5')).id, + getModelProviderIcon(createModel('grok-4.5', 'Grok 4.5')).id, + getModelProviderIcon(createModel('grok-code-fast-1', 'Grok Code Fast 1', 'agent-host-copilot')).id, + getModelProviderIcon(createModel('grok-4', 'Grok 4', 'xai', { isBYOK: true })).id, getModelProviderIcon(createModel('mai-ds-r1', 'MAI-DS-R1')).id, + getModelProviderIcon(createModel('deepseek-v4-pro', 'DeepSeek V4 Pro')).id, getModelProviderIcon(createModel('auto', 'Auto')).id, getModelProviderIcon(createModel('auto', 'Auto', 'anthropic')).id, getModelProviderIcon(createModel('custom', 'Custom Model', 'third-party')).id, @@ -48,7 +52,11 @@ suite('ModelProviderIcons', () => { 'chat-model-provider-claude', 'chat-model-provider-gemini', 'chat-model-provider-kimi', + 'chat-model-provider-xai', + 'chat-model-provider-xai', + 'chat-model-provider-xai', 'chat-model-provider-microsoft', + 'chat-model-provider-generic', 'chat-model-provider-copilot', 'chat-model-provider-copilot', 'chat-model-provider-generic',