-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtest.ts
87 lines (72 loc) · 2.45 KB
/
test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import * as vscode from "vscode";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
import { readFileSync } from "node:fs";
import { FileVectorStore, VSCodeDirectoryLoader } from "./common/embedding";
import { index } from "langchain/indexes";
import { InMemoryRecordManager } from "@langchain/community/indexes/memory";
import { state } from "./common/utils/state";
const embedding = new OpenAIEmbeddings({
apiKey: "YOUR-API-KEY",
batchSize: 64,
maxConcurrency: 10,
configuration: {
baseURL: "http://localhost:39729/v1",
},
});
export const startTest = async () => {
const workspacePath = vscode.workspace.workspaceFolders![0].uri;
const loader = new VSCodeDirectoryLoader(workspacePath);
const docs = await loader.load();
const splitter = RecursiveCharacterTextSplitter.fromLanguage("js", {
chunkSize: 7000,
chunkOverlap: 0,
});
const jsOutput = await splitter.splitDocuments(
docs.map((doc) => ({
...doc,
pageContent: "search_document: " + doc.pageContent,
}))
);
const savedVectorStore = state.workspace.get("embedding");
const vectorStore = savedVectorStore
? FileVectorStore.deserialize(savedVectorStore, embedding)
: new FileVectorStore(embedding);
const recordManager = new InMemoryRecordManager();
const recordManagerStateExist = state.workspace.get("recordManager");
if (recordManagerStateExist) {
recordManager.records = new Map(
Object.entries(JSON.parse(recordManagerStateExist))
);
}
console.log(
await index({
docsSource: jsOutput,
recordManager,
vectorStore,
options: {
cleanup: "full",
sourceIdKey: (doc) => doc.metadata.source,
},
})
);
state.workspace.update("embedding", vectorStore.serialize());
const recordManagerState = JSON.stringify(
Object.fromEntries(recordManager.records)
);
state.workspace.update("recordManager", recordManagerState);
const file = readFileSync(
"/home/gespispace/firecoder/llm-backend/src/completions/completions.module.ts",
{ encoding: "utf-8" }
);
const start = performance.now();
const resultOne = await vectorStore.similaritySearchWithScore(
`search_document: ${file}`,
20
);
const end = performance.now();
console.log(`Full Time: ${(end - start).toFixed(2)}ms`);
console.log(
resultOne.map((document) => [document[1], document[0].metadata.source])
);
};