Path: blob/main/extensions/copilot/src/extension/prompt/node/settingsEditorSearchResultsSelector.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import type { CancellationToken } from 'vscode';5import { ChatFetchResponseType, ChatLocation } from '../../../platform/chat/common/commonTypes';6import { IInteractionService } from '../../../platform/chat/common/interactionService';7import { SettingListItem } from '../../../platform/embeddings/common/vscodeIndex';8import { IChatEndpoint } from '../../../platform/networking/common/networking';9import { raceTimeout } from '../../../util/vs/base/common/async';10import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';11import { PromptRenderer } from '../../prompts/node/base/promptRenderer';12import { SettingsEditorSuggestQueryPrompt } from '../../prompts/node/settingsEditor/settingsEditorSuggestQueryPrompt';1314export class SettingsEditorSearchResultsSelector {15private static readonly DEFAULT_TIMEOUT = 10000; // 10 seconds1617constructor(18@IInstantiationService private readonly instantiationService: IInstantiationService,19@IInteractionService private readonly interactionService: IInteractionService,20) { }2122async selectTopSearchResults(endpoint: IChatEndpoint, query: string, settings: SettingListItem[], token: CancellationToken): Promise<string[]> {23if (token.isCancellationRequested) {24return [];25}2627const promptRenderer = PromptRenderer28.create(29this.instantiationService,30endpoint,31SettingsEditorSuggestQueryPrompt,32{33query,34settings35}36);37const prompt = await promptRenderer.render(undefined, token);3839this.interactionService.startInteraction();40const fetchResult = await raceTimeout(endpoint41.makeChatRequest(42'settingsEditorSearchSuggestions',43prompt.messages,44undefined,45token,46ChatLocation.Other,47undefined,48{49temperature: 0.150}51), SettingsEditorSearchResultsSelector.DEFAULT_TIMEOUT);5253if (token.isCancellationRequested || fetchResult === undefined || fetchResult.type !== ChatFetchResponseType.Success) {54return [];55}5657const rawSuggestions = fetchResult.value;58return rawSuggestions.split('\n').map(setting => setting.trim());59}60}6162