From 6fc57bff5ee621699f3241205f5f3f9fb1419844 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 22 Jun 2023 21:01:11 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat(loading.py):=20add=20suppor?= =?UTF-8?q?t=20for=20initializing=20new=20vector=20store=20types=20?= =?UTF-8?q?=F0=9F=9A=80=20feat(vector=5Fstore.py):=20add=20support=20for?= =?UTF-8?q?=20initializing=20SupabaseVectorStore=20This=20commit=20adds=20?= =?UTF-8?q?support=20for=20initializing=20new=20vector=20store=20types=20i?= =?UTF-8?q?n=20the=20loading.py=20file.=20Specifically,=20the=20initialize?= =?UTF-8?q?=5Fweaviate,=20initialize=5Ffaiss,=20and=20initialize=5Fsupabas?= =?UTF-8?q?e=20functions=20were=20added=20to=20support=20the=20Weaviate,?= =?UTF-8?q?=20FAISS,=20and=20SupabaseVectorStore=20vector=20stores,=20resp?= =?UTF-8?q?ectively.=20The=20vector=5Fstore.py=20file=20was=20also=20updat?= =?UTF-8?q?ed=20to=20include=20the=20SupabaseVectorStore=20class=20and=20t?= =?UTF-8?q?he=20initialize=5Fsupabase=20function.=20This=20allows=20for=20?= =?UTF-8?q?more=20flexibility=20in=20choosing=20vector=20stores=20for=20th?= =?UTF-8?q?e=20application.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langflow/interface/initialize/loading.py | 15 ++++++++-- .../interface/initialize/vector_store.py | 28 ++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py index 9567d27c7..413142592 100644 --- a/src/backend/langflow/interface/initialize/loading.py +++ b/src/backend/langflow/interface/initialize/loading.py @@ -19,8 +19,11 @@ from langchain.chains.loading import load_chain_from_config from langchain.llms.loading import load_llm_from_config from langflow.interface.initialize.vector_store import ( initialize_chroma, + initialize_faiss, initialize_pinecone, initialize_qdrant, + initialize_supabase, + initialize_weaviate, ) from pydantic import ValidationError @@ -162,11 +165,19 @@ def instantiate_vectorstore(class_object, params): if class_object.__name__ == "Pinecone": return initialize_pinecone(class_object, params) # Chroma requires all metadata values to not be None - if class_object.__name__ == "Chroma": + elif class_object.__name__ == "Chroma": return initialize_chroma(class_object, params) - if class_object.__name__ == "Qdrant": + elif class_object.__name__ == "Qdrant": return initialize_qdrant(class_object, params) + + elif class_object.__name__ == "Weaviate": + return initialize_weaviate(class_object, params) + elif class_object.__name__ == "FAISS": + return initialize_faiss(class_object, params) + elif class_object.__name__ == "SupabaseVectorStore": + return initialize_supabase(class_object, params) + else: if "texts" in params: params["documents"] = params.pop("texts") diff --git a/src/backend/langflow/interface/initialize/vector_store.py b/src/backend/langflow/interface/initialize/vector_store.py index dfdf3a28f..51d330804 100644 --- a/src/backend/langflow/interface/initialize/vector_store.py +++ b/src/backend/langflow/interface/initialize/vector_store.py @@ -1,6 +1,13 @@ import json from typing import Type -from langchain.vectorstores import Pinecone, Qdrant, Chroma, FAISS, Weaviate +from langchain.vectorstores import ( + Pinecone, + Qdrant, + Chroma, + FAISS, + Weaviate, + SupabaseVectorStore, +) def docs_in_params(params: dict) -> bool: @@ -11,6 +18,25 @@ def docs_in_params(params: dict) -> bool: ) +def initialize_supabase(class_object: Type[SupabaseVectorStore], params: dict): + """Initialize supabase and return the class object""" + from supabase.client import Client, create_client + + if "supabase_url" not in params or "supabase_service_key" not in params: + raise ValueError("Supabase url and service key must be provided in the params") + + client_kwargs = { + "supabase_url": params["supabase_url"], + "supabase_key": params["supabase_service_key"], + } + + supabase: Client = create_client(**client_kwargs) + if not docs_in_params(params): + return class_object(client=supabase, **params) + + return class_object.from_documents(**params) + + def initialize_weaviate(class_object: Type[Weaviate], params: dict): """Initialize weaviate and return the class object""" if not docs_in_params(params):