| 
									
										
										
										
											2025-03-27 02:49:13 +00:00
										 |  |  | import { ChatOllama, OllamaEmbeddings } from "@langchain/ollama"; | 
					
						
							| 
									
										
										
										
											2024-07-01 03:59:01 +00:00
										 |  |  | 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"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 02:49:13 +00:00
										 |  |  | let s = 0, spin = ['\\', '|', '/', '-']; | 
					
						
							|  |  |  | setInterval(() => { process.stderr.write(spin[s = ++s % spin.length] + '\u001b[0G'); }, 100).unref(); | 
					
						
							|  |  |  | process.on('exit',  function() { process.stderr.write('\u001b[2K'); }); | 
					
						
							| 
									
										
										
										
											2024-06-19 11:22:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 05:45:27 +00:00
										 |  |  | // const model = "llama3-chatqa:8b-v1.5-q8_0";
 | 
					
						
							|  |  |  | const model = "phi4:14b"; | 
					
						
							| 
									
										
										
										
											2024-07-01 03:59:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 02:49:13 +00:00
										 |  |  | console.log(`Using model ${model}`); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const llm = new ChatOllama({ baseUrl: "http://127.0.0.1:11434", model }); | 
					
						
							|  |  |  | const embeddings = new OllamaEmbeddings({model}); | 
					
						
							| 
									
										
										
										
											2024-06-19 11:22:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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"); | 
					
						
							| 
									
										
										
										
											2025-03-27 02:49:13 +00:00
										 |  |  | const vectorStore = await MemoryVectorStore.fromDocuments(docs, 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({ | 
					
						
							| 
									
										
										
										
											2025-03-27 02:49:13 +00:00
										 |  |  |   llm, | 
					
						
							|  |  |  |   vectorStore, | 
					
						
							| 
									
										
										
										
											2024-06-19 11:22:00 +00:00
										 |  |  |   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 }); }); |