| import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; | |
| import { MemoryVectorStore } from 'langchain/vectorstores/memory'; | |
| import { HuggingFaceTransformersEmbeddings } from "langchain/embeddings/hf_transformers"; | |
| const DEFAULT_CHUNK_SIZE = 1000; | |
| const VECTOR_STORE_SIZE = 5; | |
| const textSplitter = new RecursiveCharacterTextSplitter({ chunkSize: DEFAULT_CHUNK_SIZE }); | |
| const model = new HuggingFaceTransformersEmbeddings({ | |
| modelName: "Xenova/all-MiniLM-L6-v2", | |
| }); | |
| export const similaritySearch = async (input: string, content: string) => { | |
| const documents = await textSplitter.createDocuments([content]); | |
| const vectorStore = await MemoryVectorStore.fromTexts( | |
| [...documents.map(doc => doc.pageContent)], | |
| [...documents.map((v, k) => k)], | |
| model | |
| ) | |
| const queryResult = await vectorStore.similaritySearch(input, VECTOR_STORE_SIZE); | |
| return queryResult; | |
| } |