Path: blob/main/src/vs/workbench/api/common/extHostEmbeddingVector.ts
3296 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*--------------------------------------------------------------------------------------------*/45import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js';6import { ExtHostAiEmbeddingVectorShape, IMainContext, MainContext, MainThreadAiEmbeddingVectorShape } from './extHost.protocol.js';7import type { CancellationToken, EmbeddingVectorProvider } from 'vscode';8import { Disposable } from './extHostTypes.js';910export class ExtHostAiEmbeddingVector implements ExtHostAiEmbeddingVectorShape {11private _AiEmbeddingVectorProviders: Map<number, EmbeddingVectorProvider> = new Map();12private _nextHandle = 0;1314private readonly _proxy: MainThreadAiEmbeddingVectorShape;1516constructor(17mainContext: IMainContext18) {19this._proxy = mainContext.getProxy(MainContext.MainThreadAiEmbeddingVector);20}2122async $provideAiEmbeddingVector(handle: number, strings: string[], token: CancellationToken): Promise<number[][]> {23if (this._AiEmbeddingVectorProviders.size === 0) {24throw new Error('No embedding vector providers registered');25}2627const provider = this._AiEmbeddingVectorProviders.get(handle);28if (!provider) {29throw new Error('Embedding vector provider not found');30}3132const result = await provider.provideEmbeddingVector(strings, token);33if (!result) {34throw new Error('Embedding vector provider returned undefined');35}36return result;37}3839registerEmbeddingVectorProvider(extension: IExtensionDescription, model: string, provider: EmbeddingVectorProvider): Disposable {40const handle = this._nextHandle;41this._nextHandle++;42this._AiEmbeddingVectorProviders.set(handle, provider);43this._proxy.$registerAiEmbeddingVectorProvider(model, handle);44return new Disposable(() => {45this._proxy.$unregisterAiEmbeddingVectorProvider(handle);46this._AiEmbeddingVectorProviders.delete(handle);47});48}49}505152