diff --git a/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts b/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts index 05a5ecb8c7..f35e7de434 100644 --- a/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts +++ b/Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts @@ -5,6 +5,8 @@ import * as vscode from 'vscode'; import { Position, ResponseError } from 'vscode-languageclient'; import * as nls from 'vscode-nls'; +import { modelSelector } from '../../constants'; +import * as telemetry from '../../telemetry'; import { DefaultClient, GetCopilotHoverInfoParams, GetCopilotHoverInfoRequest, GetCopilotHoverInfoResult } from '../client'; import { RequestCancelled, ServerCancelled } from '../protocolFilter'; import { CppSettings } from '../settings'; @@ -35,6 +37,22 @@ export class CopilotHoverProvider implements vscode.HoverProvider { return undefined; } + // Ensure the user has access to Copilot. + const vscodelm = (vscode as any).lm; + if (vscodelm) { + const [model] = await vscodelm.selectChatModels(modelSelector); + if (!model) { + return undefined; + } + } + + if (settings.copilotHover === "default") { + // Check flight to make sure the feature is enabled. + if (!await telemetry.isFlightEnabled("CppCopilotHover")) { + return undefined; + } + } + const newHover = this.isNewHover(document, position); if (newHover) { this.reset(); diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 19ac3ab800..2fca9eebc9 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -1316,8 +1316,7 @@ export class DefaultClient implements Client { const settings: CppSettings = new CppSettings(); this.currentCopilotHoverEnabled = new PersistentWorkspaceState("cpp.copilotHover", settings.copilotHover); - if (settings.copilotHover === "enabled" || - (settings.copilotHover === "default" && await telemetry.isFlightEnabled("CppCopilotHover"))) { + if (settings.copilotHover !== "disabled") { this.copilotHoverProvider = new CopilotHoverProvider(this); this.disposables.push(vscode.languages.registerHoverProvider(util.documentSelector, this.copilotHoverProvider)); } diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 8950975987..d46409724f 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -1469,10 +1469,10 @@ async function onCopilotHover(): Promise { vscode.LanguageModelChatMessage .User(requestInfo.content + locale)]; - const [model] = await vscodelm.selectChatModels(modelSelector); - let chatResponse: vscode.LanguageModelChatResponse | undefined; try { + const [model] = await vscodelm.selectChatModels(modelSelector); + chatResponse = await model.sendRequest( messages, {},