- BAAI/bge-small-en as an embedding model
- Python with
- HuggingFaceBgeEmbeddings from langchain_community for creating embeddings
- SentenceSplitter from llama_index for chunking documents
- ChromaDB as a vector DB + chroma-ops to prune the DB
- sqlite3 for metadata
- FastAPI, Pydantic, Jinja2, Tailwind for API and server-rendered webpages
- jsdom and mozilla-readability for article extraction
I generated the index locally on my M2 Mac which ripped through the ~70k articles in ~12 hours to generate all the embeddings.