forked from sheetjs/docs.sheetjs.com
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { existsSync } from 'fs';
 | 
						|
import { ChatOllama } from "@langchain/community/chat_models/ollama";
 | 
						|
import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama"
 | 
						|
import { HNSWLib } from "@langchain/community/vectorstores/hnswlib";
 | 
						|
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";
 | 
						|
 | 
						|
const model = new ChatOllama({ baseUrl: "http://localhost:11434", model: modelName });
 | 
						|
const embeddings = new OllamaEmbeddings({model: modelName});
 | 
						|
 | 
						|
const loader = new LoadOfSheet("./cd.xls");
 | 
						|
const docs = await loader.load();
 | 
						|
 | 
						|
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);
 | 
						|
})();
 | 
						|
 | 
						|
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?"
 | 
						|
);
 | 
						|
res.forEach(({metadata}) => { console.log({ Name: metadata.Name, MPG: metadata.Miles_per_Gallon }); });
 |