2024-07-01 03:59:01 +00:00
|
|
|
/* NOTE: hnswlib-node@3.0.0 does not install on a fresh Windows 11 setup */
|
|
|
|
// import { existsSync } from 'fs';
|
2024-06-19 11:22:00 +00:00
|
|
|
import { ChatOllama } from "@langchain/community/chat_models/ollama";
|
|
|
|
import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama"
|
2024-07-01 03:59:01 +00:00
|
|
|
// import { HNSWLib } from "@langchain/community/vectorstores/hnswlib";
|
|
|
|
import { MemoryVectorStore } from "langchain/vectorstores/memory";
|
2024-06-19 11:22:00 +00:00
|
|
|
import { SelfQueryRetriever } from "langchain/retrievers/self_query";
|
|
|
|
import { FunctionalTranslator } from "@langchain/core/structured_query";
|
|
|
|
|
|
|
|
import LoadOfSheet from "./loadofsheet.mjs";
|
|
|
|
|
|
|
|
const modelName = "llama3-chatqa:8b-v1.5-q8_0";
|
|
|
|
|
2024-07-01 03:59:01 +00:00
|
|
|
console.log(`Using model ${modelName}`);
|
|
|
|
|
2024-06-19 11:22:00 +00:00
|
|
|
const model = new ChatOllama({ baseUrl: "http://localhost:11434", model: modelName });
|
|
|
|
const embeddings = new OllamaEmbeddings({model: modelName});
|
|
|
|
|
2024-07-01 03:59:01 +00:00
|
|
|
console.time("load of sheet");
|
2024-06-19 11:22:00 +00:00
|
|
|
const loader = new LoadOfSheet("./cd.xls");
|
|
|
|
const docs = await loader.load();
|
2024-07-01 03:59:01 +00:00
|
|
|
console.timeEnd("load of sheet");
|
2024-06-19 11:22:00 +00:00
|
|
|
|
2024-07-01 03:59:01 +00:00
|
|
|
console.time("vector store");
|
|
|
|
const vectorstore = await MemoryVectorStore.fromDocuments(docs, embeddings);
|
|
|
|
/*
|
2024-06-19 11:22:00 +00:00
|
|
|
const vectorstore = await (async() => {
|
|
|
|
if(!existsSync("store/hnswlib.index")) {
|
|
|
|
const vectorstore = await HNSWLib.fromDocuments(docs, embeddings);
|
|
|
|
await vectorstore.save("store");
|
|
|
|
return vectorstore;
|
|
|
|
}
|
|
|
|
return await HNSWLib.load("store", embeddings);
|
|
|
|
})();
|
2024-07-01 03:59:01 +00:00
|
|
|
*/
|
|
|
|
console.timeEnd("vector store");
|
2024-06-19 11:22:00 +00:00
|
|
|
|
2024-07-01 03:59:01 +00:00
|
|
|
console.time("query");
|
2024-06-19 11:22:00 +00:00
|
|
|
const selfQueryRetriever = SelfQueryRetriever.fromLLM({
|
|
|
|
llm: model,
|
|
|
|
vectorStore: vectorstore,
|
|
|
|
documentContents: "Data rows from a worksheet",
|
|
|
|
attributeInfo: loader.attributes,
|
|
|
|
structuredQueryTranslator: new FunctionalTranslator(),
|
|
|
|
searchParams: { k: 1024 } // default is 4
|
|
|
|
});
|
|
|
|
|
|
|
|
const res = await selfQueryRetriever.invoke(
|
|
|
|
"Which rows have over 40 miles per gallon?"
|
|
|
|
);
|
2024-07-01 03:59:01 +00:00
|
|
|
console.timeEnd("query");
|
|
|
|
|
2024-06-19 11:22:00 +00:00
|
|
|
res.forEach(({metadata}) => { console.log({ Name: metadata.Name, MPG: metadata.Miles_per_Gallon }); });
|