from langchain_community.vectorstores import FAISS from langchain_openai import OpenAIEmbeddings from langchain.schema import Document class FAISSService: """ A service for creating and loading FAISS indexes for document embeddings. """ def __init__(self, openai_api_key, index_path="local_faiss_index"): """ Initialize the FAISS service. :param openai_api_key: OpenAI API key for embeddings. :param index_path: Path to save or load the FAISS index. """ self.openai_api_key = openai_api_key self.index_path = index_path def create_faiss_index(self, documents): """ Create a FAISS index from a list of documents. :param documents: List of langchain Document objects. :return: FAISS vectorstore instance. """ print("[INFO] Creating FAISS index...") vectorstore = FAISS.from_documents( documents, OpenAIEmbeddings( model="text-embedding-ada-002", openai_api_key=self.openai_api_key ) ) vectorstore.save_local(self.index_path) print(f"[INFO] FAISS index saved to {self.index_path}.") return vectorstore def load_faiss_index(self): """ Load an existing FAISS index. :return: Loaded FAISS vectorstore instance. """ print("[INFO] Loading FAISS index...") vectorstore = FAISS.load_local( self.index_path, OpenAIEmbeddings(openai_api_key=self.openai_api_key), allow_dangerous_deserialization=True ) print(f"[INFO] FAISS index loaded from {self.index_path}.") return vectorstore