| """Vector store module for document embedding and retrieval""" | |
| from typing import List | |
| from langchain_community.vectorstores import FAISS | |
| from langchain_openai import OpenAIEmbeddings | |
| from langchain.schema import Document | |
| class VectorStore: | |
| """Manages vector store operations""" | |
| def __init__(self): | |
| """Initialize vector store with OpenAI embeddings""" | |
| self.embedding = OpenAIEmbeddings() | |
| self.vectorstore = None | |
| self.retriever = None | |
| def create_vectorstore(self, documents: List[Document]): | |
| """ | |
| Create vector store from documents | |
| Args: | |
| documents: List of documents to embed | |
| """ | |
| self.vectorstore = FAISS.from_documents(documents, self.embedding) | |
| self.retriever = self.vectorstore.as_retriever() | |
| def get_retriever(self): | |
| """ | |
| Get the retriever instance | |
| Returns: | |
| Retriever instance | |
| """ | |
| if self.retriever is None: | |
| raise ValueError("Vector store not initialized. Call create_vectorstore first.") | |
| return self.retriever | |
| def retrieve(self, query: str, k: int = 4) -> List[Document]: | |
| """ | |
| Retrieve relevant documents for a query | |
| Args: | |
| query: Search query | |
| k: Number of documents to retrieve | |
| Returns: | |
| List of relevant documents | |
| """ | |
| if self.retriever is None: | |
| raise ValueError("Vector store not initialized. Call create_vectorstore first.") | |
| return self.retriever.invoke(query) |