Skip to content

A JavaScript library that brings vector search and RAG to your browser!

License

Notifications You must be signed in to change notification settings

poloclub/mememo

Repository files navigation

MeMemo

build npm license arxiv badge DOI:10.1145/3543873.3587362

A JavaScript library that brings vector search and RAG to your browser!

🤖 ML Paper Reviewer 🌠 Prompt Enhancer 🌱 Responsible AI Assistant

What is MeMemo?

MeMemo is a JavaScript library that adapts the state-of-the-art approximate nearest neighbor search technique HNSW to browser environments. Developed with modern and native Web technologies, such as IndexedDB and Web Workers, our toolkit leverages client-side hardware capabilities to enable researchers and developers to efficiently search through millions of high-dimensional vectors in browsers. MeMemo enables exciting new design and research opportunities, such as private and personalized content creation and interactive prototyping, as demonstrated in our example application RAG Playground.✨

Features

mememo-demo.mp4

Getting Started

Installation

MeMemo supports both browser and Node.js environments. To install MeMemo, you can use npm:

npm install mememo

Vector Search and Storage in Browsers

Then, you can create a vector index and do an approximate nearest neighbor search through two functions:

// Import the HNSW class from the MeMemo module
import { HNSW } from 'mememo';

// Creating a new index
const index = new HNSW({ distanceFunction: 'cosine' });

// Inserting elements into our index in batches
let keys: string[];
let values: number[][];
await index.bulkInsert(keys, values);

// Find k-nearest neighbors
let query: number[];
const { keys, distances } = await index.query(query, k);

Developing MeMemo

Clone or download this repository:

git clone [email protected]:poloclub/mememo.git

Install the dependencies:

npm install

Use Vitest for unit testing:

npm run test

Developing the RAG Playground Examples

Clone or download this repository:

git clone [email protected]:poloclub/mememo.git

Navigate to the example folder:

cd ./examples/rag-playground

Install the dependencies:

npm install

Then run Loan Explainer:

npm run dev

Navigate to localhost:3000. You should see three Explainers running in your browser :)

Credits

MeMemo is created by Jay Wang and Polo Chau.

Citation

To learn more about MeMemo, check out our research paper published at SIGIR'24.

@inproceedings{wangMeMemoOndeviceRetrieval2024,
  title = {{{MeMemo}}: {{On-device Retrieval Augmentation}} for {{Private}} and {{Personalized Text Generation}}},
  booktitle = {Proceedings of the 47th {{International ACM SIGIR Conference}} on {{Research}} and {{Development}} in {{Information Retrieval}}},
  author = {Wang, Zijie J. and Chau, Duen Horng},
  year = {2024},
  urldate = {2024-06-26},
  langid = {english}
}

License

The software is available under the MIT License.

Contact

If you have any questions, feel free to open an issue or contact Jay Wang.