diff --git a/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts b/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts index 2efb36106..b04b8e302 100644 --- a/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts +++ b/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts @@ -5,6 +5,7 @@ import * as vscode from 'vscode'; import { Position, ResponseError } from 'vscode-languageclient'; import * as nls from 'vscode-nls'; +import { getVSCodeLanguageModel } from '../../common'; import { modelSelector } from '../../constants'; import * as telemetry from '../../telemetry'; import { DefaultClient, GetCopilotHoverInfoParams, GetCopilotHoverInfoRequest, GetCopilotHoverInfoResult } from '../client'; @@ -42,7 +43,7 @@ export class CopilotHoverProvider implements vscode.HoverProvider { } // Ensure the user has access to Copilot. - const vscodelm = (vscode as any).lm; + const vscodelm = getVSCodeLanguageModel(); if (vscodelm) { const [model] = await vscodelm.selectChatModels(modelSelector); if (!model) { diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 826c18814..445edc009 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -1413,8 +1413,7 @@ export async function preReleaseCheck(): Promise { async function onCopilotHover(): Promise { telemetry.logLanguageServerEvent("CopilotHover"); - // Check if the user has access to vscode language model. - const vscodelm = (vscode as any).lm; + const vscodelm = util.getVSCodeLanguageModel(); if (!vscodelm) { return; } @@ -1477,6 +1476,7 @@ async function onCopilotHover(): Promise { let chatResponse: vscode.LanguageModelChatResponse | undefined; try { + // Select the chat model. const [model] = await vscodelm.selectChatModels(modelSelector); chatResponse = await model.sendRequest( diff --git a/Extension/src/common.ts b/Extension/src/common.ts index 44b492678..c9cf94954 100644 --- a/Extension/src/common.ts +++ b/Extension/src/common.ts @@ -1828,3 +1828,16 @@ export function equals(array1: string[] | undefined, array2: string[] | undefine } return true; } + +export function getVSCodeLanguageModel(): any | undefined { + // Check if the user has access to vscode language model. + const vscodelm = (vscode as any).lm; + if (!vscodelm) { + return undefined; + } + // Check that vscodelm has a method called 'selectChatModels' + if (!vscodelm.selectChatModels || typeof vscodelm.selectChatModels !== 'function') { + return undefined; + } + return vscodelm; +}