import React, { useState } from "react"; import CodeBlock from "@theme-original/CodeBlock"; import { CustomDropdown } from './ChatModelTabs'; export default function VectorStoreTabs(props) { const [selectedModel, setSelectedModel] = useState("In-memory"); const { customVarName, useFakeEmbeddings = false } = props; const vectorStoreVarName = customVarName ?? "vector_store"; const fakeEmbeddingsString = `from langchain_core.embeddings import DeterministicFakeEmbedding\n\nembeddings = DeterministicFakeEmbedding(size=100)`; const tabItems = [ { value: "In-memory", label: "In-memory", text: `from langchain_core.vectorstores import InMemoryVectorStore\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = InMemoryVectorStore(embeddings)`, packageName: "langchain-core", default: true, }, { value: "AstraDB", label: "AstraDB", text: `from langchain_astradb import AstraDBVectorStore\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = AstraDBVectorStore(\n embedding=embeddings,\n api_endpoint=ASTRA_DB_API_ENDPOINT,\n collection_name="astra_vector_langchain",\n token=ASTRA_DB_APPLICATION_TOKEN,\n namespace=ASTRA_DB_NAMESPACE,\n)`, packageName: "langchain-astradb", default: false, }, { value: "Chroma", label: "Chroma", text: `from langchain_chroma import Chroma\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = Chroma(\n collection_name="example_collection",\n embedding_function=embeddings,\n persist_directory="./chroma_langchain_db", # Where to save data locally, remove if not necessary\n)`, packageName: "langchain-chroma", default: false, }, { value: "FAISS", label: "FAISS", text: `import faiss\nfrom langchain_community.docstore.in_memory import InMemoryDocstore\nfrom langchain_community.vectorstores import FAISS\n\nembedding_dim = len(embeddings.embed_query("hello world"))\nindex = faiss.IndexFlatL2(embedding_dim)\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = FAISS(\n embedding_function=embeddings,\n index=index,\n docstore=InMemoryDocstore(),\n index_to_docstore_id={},\n)`, packageName: "langchain-community", default: false, }, { value: "Milvus", label: "Milvus", text: `from langchain_milvus import Milvus\n\nURI = "./milvus_example.db"\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = Milvus(\n embedding_function=embeddings,\n connection_args={"uri": URI},\n index_params={"index_type": "FLAT", "metric_type": "L2"},\n)`, packageName: "langchain-milvus", default: false, }, { value: "MongoDB", label: "MongoDB", text: `from langchain_mongodb import MongoDBAtlasVectorSearch\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = MongoDBAtlasVectorSearch(\n embedding=embeddings,\n collection=MONGODB_COLLECTION,\n index_name=ATLAS_VECTOR_SEARCH_INDEX_NAME,\n relevance_score_fn="cosine",\n)`, packageName: "langchain-mongodb", default: false, }, { value: "PGVector", label: "PGVector", text: `from langchain_postgres import PGVector\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\n${vectorStoreVarName} = PGVector(\n embeddings=embeddings,\n collection_name="my_docs",\n connection="postgresql+psycopg://...",\n)`, packageName: "langchain-postgres", default: false, }, { value: "Pinecone", label: "Pinecone", text: `from langchain_pinecone import PineconeVectorStore\nfrom pinecone import Pinecone\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\npc = Pinecone(api_key=...)\nindex = pc.Index(index_name)\n\n${vectorStoreVarName} = PineconeVectorStore(embedding=embeddings, index=index)`, packageName: "langchain-pinecone", default: false, }, { value: "Qdrant", label: "Qdrant", text: `from langchain_qdrant import QdrantVectorStore\nfrom qdrant_client import QdrantClient\n${useFakeEmbeddings ? fakeEmbeddingsString : ""}\nclient = QdrantClient(":memory:")\n${vectorStoreVarName} = QdrantVectorStore(\n client=client,\n collection_name="test",\n embedding=embeddings,\n)`, packageName: "langchain-qdrant", default: false, }, ]; const modelOptions = tabItems .filter((item) => !item.shouldHide) .map((item) => ({ value: item.value, label: item.label, text: item.text, packageName: item.packageName, })); const selectedOption = modelOptions.find( (option) => option.value === selectedModel ); return (