Skip to content

Commit a7a1862

Browse files
committed
feat(embedding): implement ILanguageModelProvider in LocalEmbeddingsProvider
The LocalEmbeddingsProvider class now implements the ILanguageModelProvider interface. This includes the addition of several methods such as provideChatResponse, provideCompletionResponse, provideEmbedDocuments, and provideEmbedQuery. Also, a log message was added to indicate the completion of LanceDB indexing.
1 parent 1d5c96f commit a7a1862

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

src/base/common/language-models/languageModelsService.ts

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { OllamaLanguageModelProvider } from './providers/ollamaProvider';
1010
import { OpenAILanguageModelProvider } from './providers/openaiProvider';
1111
import { TongyiLanguageModelProvider } from './providers/TongyiProvider';
1212
import { WenxinLanguageModelProvider } from './providers/WenxinProvider';
13+
import { LocalEmbeddingsProvider } from "../../../code-search/embedding/LocalEmbeddingsProvider";
1314

1415
export interface LanguageModelSelector {
1516
/**
@@ -39,6 +40,7 @@ export class LanguageModelsService {
3940
['tongyi', new TongyiLanguageModelProvider(configService)],
4041
['ollama', new OllamaLanguageModelProvider(configService)],
4142
['transformers', new HuggingFaceTransformersLanguageModelProvider(configService)],
43+
// ['transformers', LocalEmbeddingsProvider.getInstance()],
4244
]);
4345
}
4446

src/code-search/embedding/LocalEmbeddingsProvider.ts

+33-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { Embedding } from './_base/Embedding';
55
import { EmbeddingsProvider } from './_base/EmbeddingsProvider';
66
import { mean_pooling, mergedTensor, normalize_, reshape, tensorData } from './_base/EmbeddingUtils';
77
import { logger } from 'base/common/log/log';
8+
import type { ILanguageModelProvider } from "base/common/language-models/languageModels";
9+
import { CancellationToken } from 'vscode';
810

911
// @ts-expect-error
1012
const ortPromise = import('onnxruntime-node');
@@ -20,7 +22,7 @@ const InferenceSessionCreate = (...args: any[]) => {
2022
*
2123
* @deprecated Please use LanguageModelsService instead.
2224
*/
23-
export class LocalEmbeddingsProvider implements EmbeddingsProvider {
25+
export class LocalEmbeddingsProvider implements EmbeddingsProvider, ILanguageModelProvider {
2426
id: string = 'local';
2527
env: any;
2628
tokenizer: any;
@@ -30,12 +32,25 @@ export class LocalEmbeddingsProvider implements EmbeddingsProvider {
3032

3133
private static instance: LocalEmbeddingsProvider;
3234

33-
private constructor() {}
35+
private constructor() {
36+
}
37+
38+
identifier: string = 'local';
39+
40+
async provideChatResponse(): Promise<never> {
41+
throw new Error('This method is not implemented');
42+
}
43+
44+
async provideCompletionResponse(): Promise<never> {
45+
throw new Error('This method is not implemented');
46+
}
3447

3548
static getInstance(): LocalEmbeddingsProvider {
3649
if (!LocalEmbeddingsProvider.instance) {
3750
LocalEmbeddingsProvider.instance = new LocalEmbeddingsProvider();
51+
LocalEmbeddingsProvider.instance.init();
3852
}
53+
3954
return LocalEmbeddingsProvider.instance;
4055
}
4156

@@ -64,6 +79,22 @@ export class LocalEmbeddingsProvider implements EmbeddingsProvider {
6479
logger.appendLine("'hello' text's first 10 values" + value[0].slice(0, 10).join(', '));
6580
}
6681

82+
async provideEmbedDocuments(
83+
texts: string[],
84+
options: { [name: string]: any },
85+
token?: CancellationToken,
86+
): Promise<number[][]> {
87+
return this.embed(texts);
88+
}
89+
90+
async provideEmbedQuery(
91+
input: string | string[],
92+
options: { [name: string]: any },
93+
token?: CancellationToken,
94+
): Promise<number[]> {
95+
return (await this.embed(Array.isArray(input) ? input : [input]))[0];
96+
}
97+
6798
async embed(chunks: string[]): Promise<Embedding[]> {
6899
if (chunks.length === 0) {
69100
return [];

src/code-search/indexing/LanceDbIndex.ts

+1
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ export class LanceDbIndex implements CodebaseIndex {
267267
}
268268

269269
markComplete(results.del, IndexResultType.Delete);
270+
logger.appendLine('Completed LanceDB Indexing');
270271
yield { progress: 1, desc: 'Completed Calculating Embeddings' };
271272
}
272273

src/extension.ts

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import { LanguageModelsService } from './base/common/language-models/languageMod
1515
import { CommandsService } from './commands/commandsService';
1616
import { ChatViewService } from './editor/views/chat/chatViewService';
1717

18+
(globalThis as any).self = globalThis;
19+
1820
export async function activate(context: ExtensionContext) {
1921
const instantiationService = new InstantiationService();
2022

0 commit comments

Comments
 (0)