|
|
from typing import Optional |
|
|
from pathlib import Path |
|
|
from langchain.vectorstores import FAISS |
|
|
from langchain.embeddings import HuggingFaceEmbeddings |
|
|
|
|
|
from . import utils |
|
|
from .config import logger, VECTOR_STORE_DIR, EMBEDDING_MODEL |
|
|
|
|
|
|
|
|
_vector_store_instance = None |
|
|
|
|
|
def get_vector_store() -> Optional[FAISS]: |
|
|
"""Get the current vector store instance""" |
|
|
global _vector_store_instance |
|
|
return _vector_store_instance |
|
|
|
|
|
def create_vector_store(): |
|
|
"""Create a new vector store instance""" |
|
|
global _vector_store_instance |
|
|
|
|
|
|
|
|
try: |
|
|
company_documents = utils.create_company_documents() |
|
|
company_chunks = utils.split_documents(company_documents) |
|
|
_vector_store_instance = utils.create_company_vector_store(company_chunks) |
|
|
logger.info("Vector store created successfully") |
|
|
return _vector_store_instance |
|
|
except Exception as e: |
|
|
logger.error(f"Error creating vector store: {str(e)}") |
|
|
raise |
|
|
|
|
|
|
|
|
def load_vector_store() -> Optional[FAISS]: |
|
|
"""Load existing vector store with proper error handling""" |
|
|
global _vector_store_instance |
|
|
try: |
|
|
if Path(VECTOR_STORE_DIR).exists(): |
|
|
_vector_store_instance = FAISS.load_local( |
|
|
str(VECTOR_STORE_DIR), |
|
|
EMBEDDING_MODEL, |
|
|
allow_dangerous_deserialization=True |
|
|
) |
|
|
logger.info("Successfully loaded existing vector store") |
|
|
return _vector_store_instance |
|
|
else: |
|
|
logger.info("No existing vector store found") |
|
|
logger.info("Creating new vector store...") |
|
|
return create_vector_store() |
|
|
except Exception as e: |
|
|
logger.error(f"Failed to load vector store: {e}") |
|
|
return None |
|
|
|