Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/common/extHostEmbeddingVector.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { IExtensionDescription } from '../../../platform/extensions/common/extensions.js';
7
import { ExtHostAiEmbeddingVectorShape, IMainContext, MainContext, MainThreadAiEmbeddingVectorShape } from './extHost.protocol.js';
8
import type { CancellationToken, EmbeddingVectorProvider } from 'vscode';
9
import { Disposable } from './extHostTypes.js';
10
11
export class ExtHostAiEmbeddingVector implements ExtHostAiEmbeddingVectorShape {
12
private _AiEmbeddingVectorProviders: Map<number, EmbeddingVectorProvider> = new Map();
13
private _nextHandle = 0;
14
15
private readonly _proxy: MainThreadAiEmbeddingVectorShape;
16
17
constructor(
18
mainContext: IMainContext
19
) {
20
this._proxy = mainContext.getProxy(MainContext.MainThreadAiEmbeddingVector);
21
}
22
23
async $provideAiEmbeddingVector(handle: number, strings: string[], token: CancellationToken): Promise<number[][]> {
24
if (this._AiEmbeddingVectorProviders.size === 0) {
25
throw new Error('No embedding vector providers registered');
26
}
27
28
const provider = this._AiEmbeddingVectorProviders.get(handle);
29
if (!provider) {
30
throw new Error('Embedding vector provider not found');
31
}
32
33
const result = await provider.provideEmbeddingVector(strings, token);
34
if (!result) {
35
throw new Error('Embedding vector provider returned undefined');
36
}
37
return result;
38
}
39
40
registerEmbeddingVectorProvider(extension: IExtensionDescription, model: string, provider: EmbeddingVectorProvider): Disposable {
41
const handle = this._nextHandle;
42
this._nextHandle++;
43
this._AiEmbeddingVectorProviders.set(handle, provider);
44
this._proxy.$registerAiEmbeddingVectorProvider(model, handle);
45
return new Disposable(() => {
46
this._proxy.$unregisterAiEmbeddingVectorProvider(handle);
47
this._AiEmbeddingVectorProviders.delete(handle);
48
});
49
}
50
}
51
52