Spaces:
Sleeping
Sleeping
| from typing import List, Dict, Union | |
| import datetime | |
| import asyncio | |
| from pinecone import Pinecone | |
| from llama_index.core import VectorStoreIndex, StorageContext | |
| from llama_index.vector_stores.pinecone import PineconeVectorStore | |
| class PineconeIndex: | |
| def __init__(self, api_key: str, index_name: str, index_namespace: str): | |
| self._index_name = index_name | |
| self._index_namespace = index_namespace | |
| self._pc = Pinecone(api_key=api_key) | |
| self.pc_index = self._set_index(index_name, index_namespace) | |
| def _set_index(self, index_name: str, index_namespace: str) -> VectorStoreIndex: | |
| vector_store = PineconeVectorStore( | |
| pinecone_index=self._pc.Index(index_name), | |
| add_sparse_vector=True, | |
| namespace=index_namespace | |
| ) | |
| storage_context = StorageContext.from_defaults(vector_store=vector_store) | |
| pc_index = VectorStoreIndex.from_vector_store(vector_store=vector_store, storage_context=storage_context) | |
| return pc_index | |
| def retrieve_context(self, query: str) -> Dict[str, Union[str, int]]: | |
| start_time = round(datetime.datetime.now().timestamp() * 1000) | |
| response = self.pc_index.as_query_engine(similarity_top_k=3).query(query) | |
| end_time = round(datetime.datetime.now().timestamp() * 1000) | |
| return {"result": response.response, "start": start_time, "end": end_time} | |
| async def aretrieve_context(self, query: str) -> Dict[str, Union[str, int]]: | |
| start_time = round(datetime.datetime.now().timestamp() * 1000) | |
| response = await self.pc_index.as_query_engine( | |
| similarity_top_k=3, | |
| use_async=True | |
| ).aquery(query) | |
| end_time = round(datetime.datetime.now().timestamp() * 1000) | |
| return {"result": response.response, "start": start_time, "end": end_time} | |
| async def aretrieve_context_multi(self, query_list: List[str]) -> List[Dict]: | |
| result = await asyncio.gather(*(self.aretrieve_context(query) for query in query_list)) | |
| return result |