import inspect import sys from pathlib import Path from langchain_astradb import AstraDBVectorStore from langchain_chroma import Chroma from langchain_community import vectorstores from langchain_core.vectorstores import VectorStore from langchain_couchbase import CouchbaseVectorStore from langchain_milvus import Milvus from langchain_mongodb import MongoDBAtlasVectorSearch from langchain_pinecone import PineconeVectorStore from langchain_qdrant import QdrantVectorStore vectorstore_list = [ "FAISS", "ElasticsearchStore", "PGVector", "Redis", "Clickhouse", "InMemoryVectorStore", ] from_partners = [ ("Chroma", Chroma), ("AstraDBVectorStore", AstraDBVectorStore), ("QdrantVectorStore", QdrantVectorStore), ("PineconeVectorStore", PineconeVectorStore), ("Milvus", Milvus), ("MongoDBAtlasVectorSearch", MongoDBAtlasVectorSearch), ("CouchbaseVectorStore", CouchbaseVectorStore), ] VECTORSTORE_TEMPLATE = """\ --- sidebar_position: 1 sidebar_class_name: hidden keywords: [compatibility] custom_edit_url: --- # Vectorstores ## Features The table below lists the features for some of our most popular vector stores. {table} """ def get_vectorstore_table(): vectorstore_feat_table = { "FAISS": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "ElasticsearchStore": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "PGVector": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "Redis": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "Clickhouse": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "InMemoryVectorStore": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "Chroma": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "AstraDBVectorStore": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "QdrantVectorStore": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "PineconeVectorStore": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "Milvus": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "MongoDBAtlasVectorSearch": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, "CouchbaseVectorStore": { "Delete by ID": True, "Filtering": True, "similarity_search_by_vector": True, "similarity_search_with_score": True, "asearch": True, "Passes Standard Tests": False, "Multi Tenancy": False, "Local/Cloud": "Local", "IDs in add Documents": True, }, } for vs in vectorstore_list + from_partners: if isinstance(vs, tuple): cls = vs[1] vs_name = vs[0] else: cls = getattr(vectorstores, vs) vs_name = vs for feat in ( "similarity_search_with_score", "similarity_search_by_vector", "asearch", ): feat, name = feat, feat if getattr(cls, feat) != getattr(VectorStore, feat): vectorstore_feat_table[vs_name][name] = True else: vectorstore_feat_table[vs_name][name] = False if "filter" not in [ key for key, _ in inspect.signature( getattr(cls, "similarity_search") ).parameters.items() ]: vectorstore_feat_table[vs_name]["Filtering"] = False header = [ "Vectorstore", "Delete by ID", "Filtering", "similarity_search_by_vector", "similarity_search_with_score", "asearch", "Passes Standard Tests", "Multi Tenancy", "Local/Cloud", "IDs in add Documents", ] title = [ "Vectorstore", "Delete by ID", "Filtering", "Search by Vector", "Search with score", "Async", "Passes Standard Tests", "Multi Tenancy", "Local/Cloud", "IDs in add Documents", ] rows = [title, [":-"] + [":-:"] * (len(title) - 1)] for vs, feats in sorted(vectorstore_feat_table.items()): rows += [ [vs, "✅"] + [ ("✅" if feats.get(h) else "❌") if h != "Local/Cloud" else feats.get(h) for h in header[1:] ] ] return "\n".join(["|".join(row) for row in rows]) if __name__ == "__main__": output_dir = Path(sys.argv[1]) output_integrations_dir = output_dir / "integrations" output_integrations_dir_vectorstore = output_integrations_dir / "vectorstores" output_integrations_dir_vectorstore.mkdir(parents=True, exist_ok=True) vectorstore_page = VECTORSTORE_TEMPLATE.format(table=get_vectorstore_table()) with open(output_integrations_dir / "vectorstores" / "index.mdx", "w") as f: f.write(vectorstore_page)