UNPKG

genkitx-hnsw

Version:

Firebase Genkit AI framework plugin for HNSW vector database. Get AI response enriched with additional context and knowledge with HNSW Vector Database using RAG Implementation

68 lines 1.82 kB
import { GoogleGenerativeAIEmbeddings } from "@langchain/google-genai"; import { HNSWLib } from "langchain/vectorstores"; import { generate } from "@genkit-ai/ai"; import { geminiPro as geminiProModel } from "@genkit-ai/googleai"; const generateHistories = (contexts) => { const histories = []; contexts.forEach((context) => { histories.push({ role: "user", content: [{ text: context }] }); histories.push({ role: "model", content: [{ text: "Understood" }] }); }); return histories; }; const initializeStore = async (vectorStorePath, apiKey) => { const store = await HNSWLib.load( vectorStorePath, new GoogleGenerativeAIEmbeddings({ apiKey }) ); return store; }; const getContextBasedOnPrompt = async (store, prompt) => { const data = await store.similaritySearch(prompt, 1); const context = []; data.forEach((item, i) => { context.push(`${item.pageContent}`); }); return context; }; const retrieveResponseWithVector = async (flowOptions, pluginOptions) => { const { prompt, indexPath, temperature, maxOutputTokens, topK, topP, stopSequences } = flowOptions; const { apiKey } = pluginOptions; const store = await initializeStore(indexPath, apiKey); const context = await getContextBasedOnPrompt(store, prompt); const histories = generateHistories(context); const retrievalConfig = { temperature: temperature || 0.1, maxOutputTokens: maxOutputTokens || 500, topK: topK || 1, topP: topP || 0, stopSequences: stopSequences || [] }; const promptResult = await generate({ history: histories, prompt, model: geminiProModel, config: retrievalConfig }); return promptResult.text(); }; export { retrieveResponseWithVector }; //# sourceMappingURL=index.mjs.map