From 4d97efc1872010836bb7151eba22ed6024f83d85 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 1 Oct 2025 17:09:35 +0000 Subject: [PATCH] fix: improve VS Code LM API model name display - Add 'name' property to vsCodeLmModels type in ExtensionMessage - Map VS Code LM models to include name property when sending to webview - Update VSCodeLM component to display model.name when available - Falls back to vendor/family format if name is not provided Fixes #8443 --- src/core/webview/webviewMessageHandler.ts | 10 ++++++- src/shared/ExtensionMessage.ts | 2 +- .../settings/providers/VSCodeLM.tsx | 29 ++++++++++++------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index af5f9925c3..52dcb908e1 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -932,8 +932,16 @@ export const webviewMessageHandler = async ( break case "requestVsCodeLmModels": const vsCodeLmModels = await getVsCodeLmModels() + // Map the models to include all necessary properties for the UI + const mappedModels = vsCodeLmModels.map((model) => ({ + vendor: model.vendor, + family: model.family, + version: model.version, + id: model.id, + name: model.name, // Include the name property for better display + })) // TODO: Cache like we do for OpenRouter, etc? - provider.postMessageToWebview({ type: "vsCodeLmModels", vsCodeLmModels }) + provider.postMessageToWebview({ type: "vsCodeLmModels", vsCodeLmModels: mappedModels }) break case "requestHuggingFaceModels": // TODO: Why isn't this handled by `requestRouterModels` above? diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 66f389f81c..5917741b63 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -154,7 +154,7 @@ export interface ExtensionMessage { openAiModels?: string[] ollamaModels?: ModelRecord lmStudioModels?: ModelRecord - vsCodeLmModels?: { vendor?: string; family?: string; version?: string; id?: string }[] + vsCodeLmModels?: { vendor?: string; family?: string; version?: string; id?: string; name?: string }[] huggingFaceModels?: Array<{ id: string object: string diff --git a/webview-ui/src/components/settings/providers/VSCodeLM.tsx b/webview-ui/src/components/settings/providers/VSCodeLM.tsx index a2097badf6..885b131c80 100644 --- a/webview-ui/src/components/settings/providers/VSCodeLM.tsx +++ b/webview-ui/src/components/settings/providers/VSCodeLM.tsx @@ -1,10 +1,9 @@ import { useState, useCallback } from "react" import { useEvent } from "react-use" -import { LanguageModelChatSelector } from "vscode" import type { ProviderSettings } from "@roo-code/types" -import { ExtensionMessage } from "@roo/ExtensionMessage" +import { ExtensionMessage, LanguageModelChatSelector } from "@roo/ExtensionMessage" import { useAppTranslation } from "@src/i18n/TranslationContext" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@src/components/ui" @@ -19,7 +18,7 @@ type VSCodeLMProps = { export const VSCodeLM = ({ apiConfiguration, setApiConfigurationField }: VSCodeLMProps) => { const { t } = useAppTranslation() - const [vsCodeLmModels, setVsCodeLmModels] = useState([]) + const [vsCodeLmModels, setVsCodeLmModels] = useState>([]) const handleInputChange = useCallback( ( @@ -66,13 +65,23 @@ export const VSCodeLM = ({ apiConfiguration, setApiConfigurationField }: VSCodeL - {vsCodeLmModels.map((model) => ( - - {`${model.vendor} - ${model.family}`} - - ))} + {vsCodeLmModels.map((model) => { + // Create a more user-friendly display name + // Use the model's name property if available, otherwise fall back to vendor/family + const displayName = + model.name || + (model.vendor && model.family + ? `${model.vendor} - ${model.family}` + : model.id || "Unknown Model") + + return ( + + {displayName} + + ) + })} ) : (