Spaces:
Runtime error
Runtime error
| import logging | |
| import typing | |
| from llama_index import VectorStoreIndex | |
| from llama_index.indices.vector_store import VectorIndexRetriever | |
| from llama_index.vector_stores.types import VectorStore | |
| from app._config import settings | |
| from app.enums import WEAVIATE_INDEX_NAME, VectorDatabase | |
| logger = logging.getLogger(__name__) | |
| class VectorStoreComponent: | |
| vector_store: VectorStore | |
| def __init__(self) -> None: | |
| match settings.VECTOR_DATABASE: | |
| case VectorDatabase.WEAVIATE: | |
| import weaviate | |
| from llama_index.vector_stores import WeaviateVectorStore | |
| client = weaviate.Client(settings.WEAVIATE_CLIENT_URL) | |
| self.vector_store = typing.cast( | |
| VectorStore, | |
| WeaviateVectorStore( | |
| weaviate_client=client, index_name=WEAVIATE_INDEX_NAME | |
| ), | |
| ) | |
| case _: | |
| # Should be unreachable | |
| # The settings validator should have caught this | |
| raise ValueError( | |
| f"Vectorstore database {settings.VECTOR_DATABASE} not supported" | |
| ) | |
| def get_retriever( | |
| index: VectorStoreIndex, | |
| doc_ids: list[str] | None = None, | |
| similarity_top_k: int = 2, | |
| ) -> VectorIndexRetriever: | |
| return VectorIndexRetriever( | |
| index=index, | |
| similarity_top_k=similarity_top_k, | |
| doc_ids=doc_ids, | |
| ) | |
| def close(self) -> None: | |
| if hasattr(self.vector_store.client, "close"): | |
| self.vector_store.client.close() | |