forked from guangzhengli/ChatFiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvector.ts
47 lines (40 loc) · 1.82 KB
/
vector.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
import {SupabaseFilterRPCCall, SupabaseVectorStore} from "langchain/vectorstores/supabase";
import {createClient} from "@supabase/supabase-js";
import {Document} from "langchain/dist/document";
import {OPENAI_TYPE, SUPABASE_KEY, SUPABASE_URL} from "@/utils/app/const";
import {getEmbeddings} from "@/utils/embeddings";
import { KeyConfiguration, ModelType } from "@/types";
const client = createClient(SUPABASE_URL!, SUPABASE_KEY!);
export const getVectorStore = async (keyConfiguration: KeyConfiguration, texts: string[], metadata: object) => {
return await SupabaseVectorStore.fromTexts(texts, metadata, await getEmbeddings(keyConfiguration),
{
client,
tableName: "documents",
queryName: "match_documents",
}
);
}
export const getExistingVectorStore = async (keyConfiguration: KeyConfiguration, fileName: string) => {
const fileNameFilter: SupabaseFilterRPCCall = (rpc) =>
rpc.filter("metadata->>file_name", "eq", fileName);
return await SupabaseVectorStore.fromExistingIndex(await getEmbeddings(keyConfiguration),
{
client,
tableName: "documents",
queryName: "match_documents",
filter: fileNameFilter
}
);
}
export const saveEmbeddings = async (keyConfiguration: KeyConfiguration, documents: Document[]) => {
const supabaseVectorStore = new SupabaseVectorStore(await getEmbeddings(keyConfiguration),
{client, tableName: "documents", queryName: "match_documents"});
// wait for https://github.com/hwchase17/langchainjs/pull/1598 to be released
if (keyConfiguration.apiType === ModelType.AZURE_OPENAI) {
for (const doc of documents) {
await supabaseVectorStore.addDocuments([doc]);
}
} else {
await supabaseVectorStore.addDocuments(documents);
}
}