From 2598f3260ee3a72256eb79d7ddf11b160b1ce10e Mon Sep 17 00:00:00 2001 From: patel Date: Tue, 16 Jan 2024 23:27:46 +0530 Subject: [PATCH 1/2] fix: Modified default index naming in vector_store to use a unique identifier --- build/lib/lyzr/__init__.py | 3 +- build/lib/lyzr/base/vector_store.py | 39 +++++-- build/lib/lyzr/chatqa/chatbot.py | 12 +++ build/lib/lyzr/chatqa/qa_bot.py | 12 +++ build/lib/lyzr/utils/chat_utils.py | 17 ++-- build/lib/lyzr/utils/rag_utils.py | 95 +++++++++++++++--- dist/lyzr-0.1.21.tar.gz | Bin 29874 -> 0 bytes ...e-any.whl => lyzr-0.1.23-py3-none-any.whl} | Bin 46772 -> 47811 bytes dist/lyzr-0.1.23.tar.gz | Bin 0 -> 30575 bytes lyzr.egg-info/PKG-INFO | 20 ++-- lyzr.egg-info/SOURCES.txt | 1 + lyzr.egg-info/requires.txt | 14 +-- lyzr/base/vector_store.py | 2 +- setup.py | 2 +- 14 files changed, 170 insertions(+), 47 deletions(-) delete mode 100644 dist/lyzr-0.1.21.tar.gz rename dist/{lyzr-0.1.21-py3-none-any.whl => lyzr-0.1.23-py3-none-any.whl} (57%) create mode 100644 dist/lyzr-0.1.23.tar.gz diff --git a/build/lib/lyzr/__init__.py b/build/lib/lyzr/__init__.py index cb2c063..623ad1d 100644 --- a/build/lib/lyzr/__init__.py +++ b/build/lib/lyzr/__init__.py @@ -16,6 +16,5 @@ "ChatBot", "FormulaGen", "DataAnalyzr", - "DataConnector", - "VoiceBot", + "DataConnector" "VoiceBot", ] diff --git a/build/lib/lyzr/base/vector_store.py b/build/lib/lyzr/base/vector_store.py index 1fca590..feff1a4 100644 --- a/build/lib/lyzr/base/vector_store.py +++ b/build/lib/lyzr/base/vector_store.py @@ -1,5 +1,9 @@ from typing import Optional, Sequence +import os +import uuid +import weaviate +from weaviate.embedded import EmbeddedOptions from llama_index import Document, ServiceContext, VectorStoreIndex, StorageContext from llama_index.node_parser import SimpleNodeParser @@ -13,7 +17,7 @@ def import_vector_store_class(vector_store_class_name: str): class LyzrVectorStoreIndex: @staticmethod def from_defaults( - vector_store_type: str = "LanceDBVectorStore", + vector_store_type: str = "WeaviateVectorStore", documents: Optional[Sequence[Document]] = None, service_context: Optional[ServiceContext] = None, **kwargs @@ -21,22 +25,35 @@ def from_defaults( if documents is None and vector_store_type == "SimpleVectorStore": raise ValueError("documents must be provided for SimpleVectorStore") - vector_store_class = import_vector_store_class(vector_store_type) + VectorStoreClass = import_vector_store_class(vector_store_type) + + if vector_store_type == "WeaviateVectorStore": + weaviate_client = weaviate.Client( + embedded_options=weaviate.embedded.EmbeddedOptions(), + additional_headers={"X-OpenAI-Api-Key": os.environ["OPENAI_API_KEY"]}, + ) + kwargs["weaviate_client"] = ( + weaviate_client + if "weaviate_client" not in kwargs + else kwargs["weaviate_client"] + ) + kwargs["index_name"] = ( + f"DB_{uuid.uuid4().hex}" if "index_name" not in kwargs else kwargs["index_name"] + ) + + vector_store = VectorStoreClass(**kwargs) + else: + vector_store = VectorStoreClass(**kwargs) if documents is None: - vector_store = vector_store_class(**kwargs) index = VectorStoreIndex.from_vector_store( vector_store=vector_store, service_context=service_context ) - else: - if vector_store_type == "LanceDBVectorStore": - kwargs["uri"] = "./.lancedb" if "uri" not in kwargs else kwargs["uri"] - kwargs["table_name"] = ( - "vectors" if "table_name" not in kwargs else kwargs["table_name"] - ) - vector_store = vector_store_class(**kwargs) - storage_context = StorageContext.from_defaults(vector_store=vector_store) + return index + + storage_context = StorageContext.from_defaults(vector_store=vector_store) + if documents is not None: index = VectorStoreIndex.from_documents( documents=documents, storage_context=storage_context, diff --git a/build/lib/lyzr/chatqa/chatbot.py b/build/lib/lyzr/chatqa/chatbot.py index ba30750..2caed78 100644 --- a/build/lib/lyzr/chatqa/chatbot.py +++ b/build/lib/lyzr/chatqa/chatbot.py @@ -42,6 +42,7 @@ def pdf_chat( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: return pdf_chat_( input_dir=input_dir, @@ -57,6 +58,7 @@ def pdf_chat( vector_store_params=vector_store_params, service_context_params=service_context_params, chat_engine_params=chat_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -74,6 +76,7 @@ def docx_chat( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: return docx_chat_( input_dir=input_dir, @@ -89,6 +92,7 @@ def docx_chat( vector_store_params=vector_store_params, service_context_params=service_context_params, chat_engine_params=chat_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -106,6 +110,7 @@ def txt_chat( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: return txt_chat_( input_dir=input_dir, @@ -121,6 +126,7 @@ def txt_chat( vector_store_params=vector_store_params, service_context_params=service_context_params, chat_engine_params=chat_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -133,6 +139,7 @@ def webpage_chat( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: return webpage_chat_( url=url, @@ -143,6 +150,7 @@ def webpage_chat( vector_store_params=vector_store_params, service_context_params=service_context_params, chat_engine_params=chat_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -155,6 +163,7 @@ def website_chat( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: return website_chat_( url=url, @@ -165,6 +174,7 @@ def website_chat( vector_store_params=vector_store_params, service_context_params=service_context_params, chat_engine_params=chat_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -177,6 +187,7 @@ def youtube_chat( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: return youtube_chat_( urls=urls, @@ -187,4 +198,5 @@ def youtube_chat( vector_store_params=vector_store_params, service_context_params=service_context_params, chat_engine_params=chat_engine_params, + retriever_params=retriever_params, ) diff --git a/build/lib/lyzr/chatqa/qa_bot.py b/build/lib/lyzr/chatqa/qa_bot.py index 14a117a..2b2f145 100644 --- a/build/lib/lyzr/chatqa/qa_bot.py +++ b/build/lib/lyzr/chatqa/qa_bot.py @@ -41,6 +41,7 @@ def pdf_qa( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: return pdf_rag( input_dir=input_dir, @@ -56,6 +57,7 @@ def pdf_qa( vector_store_params=vector_store_params, service_context_params=service_context_params, query_engine_params=query_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -73,6 +75,7 @@ def docx_qa( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: return docx_rag( input_dir=input_dir, @@ -88,6 +91,7 @@ def docx_qa( vector_store_params=vector_store_params, service_context_params=service_context_params, query_engine_params=query_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -105,6 +109,7 @@ def txt_qa( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: return txt_rag( input_dir=input_dir, @@ -120,6 +125,7 @@ def txt_qa( vector_store_params=vector_store_params, service_context_params=service_context_params, query_engine_params=query_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -132,6 +138,7 @@ def webpage_qa( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: return webpage_rag( url=url, @@ -142,6 +149,7 @@ def webpage_qa( vector_store_params=vector_store_params, service_context_params=service_context_params, query_engine_params=query_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -154,6 +162,7 @@ def website_qa( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: return website_rag( url=url, @@ -164,6 +173,7 @@ def website_qa( vector_store_params=vector_store_params, service_context_params=service_context_params, query_engine_params=query_engine_params, + retriever_params=retriever_params, ) @staticmethod @@ -176,6 +186,7 @@ def youtube_qa( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: return youtube_rag( urls=urls, @@ -186,4 +197,5 @@ def youtube_qa( vector_store_params=vector_store_params, service_context_params=service_context_params, query_engine_params=query_engine_params, + retriever_params=retriever_params, ) diff --git a/build/lib/lyzr/utils/chat_utils.py b/build/lib/lyzr/utils/chat_utils.py index 86971b1..50d4e82 100644 --- a/build/lib/lyzr/utils/chat_utils.py +++ b/build/lib/lyzr/utils/chat_utils.py @@ -47,7 +47,7 @@ def pdf_chat_( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -106,6 +106,7 @@ def txt_chat_( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: documents = read_txt_as_documents( input_dir=input_dir, @@ -118,7 +119,7 @@ def txt_chat_( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -177,6 +178,7 @@ def docx_chat_( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: documents = read_docx_as_documents( input_dir=input_dir, @@ -189,7 +191,7 @@ def docx_chat_( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -243,6 +245,7 @@ def webpage_chat_( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: documents = read_webpage_as_documents( url=url, @@ -250,7 +253,7 @@ def webpage_chat_( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -304,6 +307,7 @@ def website_chat_( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: documents = read_website_as_documents( url=url, @@ -311,7 +315,7 @@ def website_chat_( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -365,6 +369,7 @@ def youtube_chat_( vector_store_params: dict = None, service_context_params: dict = None, chat_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseChatEngine: documents = read_youtube_as_documents( urls=urls, @@ -372,7 +377,7 @@ def youtube_chat_( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) diff --git a/build/lib/lyzr/utils/rag_utils.py b/build/lib/lyzr/utils/rag_utils.py index cd69156..28b59e2 100644 --- a/build/lib/lyzr/utils/rag_utils.py +++ b/build/lib/lyzr/utils/rag_utils.py @@ -45,14 +45,14 @@ def pdf_rag( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) service_context_params = ( {} if service_context_params is None else service_context_params ) - chat_engine_params = {} if chat_engine_params is None else chat_engine_params + query_engine_params = {} if query_engine_params is None else query_engine_params retriever_params = ( {"retriever_type": "QueryFusionRetriever"} @@ -61,6 +61,7 @@ def pdf_rag( ) llm = LyzrLLMFactory.from_defaults(**llm_params) + service_context = LyzrService.from_defaults( llm=llm, embed_model=embed_model, @@ -96,6 +97,7 @@ def txt_rag( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: documents = read_txt_as_documents( input_dir=input_dir, @@ -108,7 +110,7 @@ def txt_rag( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -117,7 +119,14 @@ def txt_rag( ) query_engine_params = {} if query_engine_params is None else query_engine_params + retriever_params = ( + {"retriever_type": "QueryFusionRetriever"} + if retriever_params is None + else retriever_params + ) + llm = LyzrLLMFactory.from_defaults(**llm_params) + service_context = LyzrService.from_defaults( llm=llm, embed_model=embed_model, @@ -130,7 +139,13 @@ def txt_rag( **vector_store_params, documents=documents, service_context=service_context ) - return vector_store_index.as_query_engine(**query_engine_params, similarity_top_k=5) + retriever = LyzrRetriever.from_defaults( + **retriever_params, base_index=vector_store_index + ) + + query_engine = RetrieverQueryEngine.from_args(retriever, query_engine_params) + + return query_engine def docx_rag( @@ -147,6 +162,7 @@ def docx_rag( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: documents = read_docx_as_documents( input_dir=input_dir, @@ -159,7 +175,7 @@ def docx_rag( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -168,7 +184,14 @@ def docx_rag( ) query_engine_params = {} if query_engine_params is None else query_engine_params + retriever_params = ( + {"retriever_type": "QueryFusionRetriever"} + if retriever_params is None + else retriever_params + ) + llm = LyzrLLMFactory.from_defaults(**llm_params) + service_context = LyzrService.from_defaults( llm=llm, embed_model=embed_model, @@ -181,7 +204,13 @@ def docx_rag( **vector_store_params, documents=documents, service_context=service_context ) - return vector_store_index.as_query_engine(**query_engine_params, similarity_top_k=5) + retriever = LyzrRetriever.from_defaults( + **retriever_params, base_index=vector_store_index + ) + + query_engine = RetrieverQueryEngine.from_args(retriever, query_engine_params) + + return query_engine def webpage_rag( @@ -193,6 +222,7 @@ def webpage_rag( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: documents = read_webpage_as_documents( url=url, @@ -200,7 +230,7 @@ def webpage_rag( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -209,7 +239,14 @@ def webpage_rag( ) query_engine_params = {} if query_engine_params is None else query_engine_params + retriever_params = ( + {"retriever_type": "QueryFusionRetriever"} + if retriever_params is None + else retriever_params + ) + llm = LyzrLLMFactory.from_defaults(**llm_params) + service_context = LyzrService.from_defaults( llm=llm, embed_model=embed_model, @@ -222,7 +259,13 @@ def webpage_rag( **vector_store_params, documents=documents, service_context=service_context ) - return vector_store_index.as_query_engine(**query_engine_params, similarity_top_k=5) + retriever = LyzrRetriever.from_defaults( + **retriever_params, base_index=vector_store_index + ) + + query_engine = RetrieverQueryEngine.from_args(retriever, query_engine_params) + + return query_engine def website_rag( @@ -234,6 +277,7 @@ def website_rag( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: documents = read_website_as_documents( url=url, @@ -241,7 +285,7 @@ def website_rag( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -250,7 +294,14 @@ def website_rag( ) query_engine_params = {} if query_engine_params is None else query_engine_params + retriever_params = ( + {"retriever_type": "QueryFusionRetriever"} + if retriever_params is None + else retriever_params + ) + llm = LyzrLLMFactory.from_defaults(**llm_params) + service_context = LyzrService.from_defaults( llm=llm, embed_model=embed_model, @@ -263,7 +314,13 @@ def website_rag( **vector_store_params, documents=documents, service_context=service_context ) - return vector_store_index.as_query_engine(**query_engine_params, similarity_top_k=5) + retriever = LyzrRetriever.from_defaults( + **retriever_params, base_index=vector_store_index + ) + + query_engine = RetrieverQueryEngine.from_args(retriever, query_engine_params) + + return query_engine def youtube_rag( @@ -275,6 +332,7 @@ def youtube_rag( vector_store_params: dict = None, service_context_params: dict = None, query_engine_params: dict = None, + retriever_params: dict = None, ) -> BaseQueryEngine: documents = read_youtube_as_documents( urls=urls, @@ -282,7 +340,7 @@ def youtube_rag( llm_params = {} if llm_params is None else llm_params vector_store_params = ( - {"vector_store_type": "LanceDBVectorStore"} + {"vector_store_type": "WeaviateVectorStore"} if vector_store_params is None else vector_store_params ) @@ -291,7 +349,14 @@ def youtube_rag( ) query_engine_params = {} if query_engine_params is None else query_engine_params + retriever_params = ( + {"retriever_type": "QueryFusionRetriever"} + if retriever_params is None + else retriever_params + ) + llm = LyzrLLMFactory.from_defaults(**llm_params) + service_context = LyzrService.from_defaults( llm=llm, embed_model=embed_model, @@ -304,4 +369,10 @@ def youtube_rag( **vector_store_params, documents=documents, service_context=service_context ) - return vector_store_index.as_query_engine(**query_engine_params, similarity_top_k=5) + retriever = LyzrRetriever.from_defaults( + **retriever_params, base_index=vector_store_index + ) + + query_engine = RetrieverQueryEngine.from_args(retriever, query_engine_params) + + return query_engine diff --git a/dist/lyzr-0.1.21.tar.gz b/dist/lyzr-0.1.21.tar.gz deleted file mode 100644 index ec468957d13f46afacb08019f31fd00459769783..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29874 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 i*B>rbr>6s2FwnOyQtRHRq3hBF z?f#6HvDpdf!s#w9TG&4JRiD!0)tGWMI)#$fw3;%nP;3Y8B0($yxDitNbPyFWfBKAT zCyjNZef}lQs7+`4@QL;0l}^dXT6c`-I`^H^+O*#D6R;QPxA0-n&E!ENjC5&%Fa-I0c4ki;Xzb#Tt+1FzS0E-l;fp_0az?l*-? zBIFg)#`yXuNdY`k3!tjd9(lh9)n5<5N+i=xnsZ)l%q_I}HzZU6Zo& zz$$;KbJEjcWC@u#jJi0UHXLu8bG4|B#XS%9X>+fnH(9WY(!dCuF_H`h3t^5pBh9Lp zfK_lr@2Z;8DEJ&_)>@4MZ(mgSG9Oken$llbRifC>S#_pNj#ZJz$x5}JO5n7*b(bHsI+IrC2;GS9C{gCuEVE?k|KDN3umFNaUq7Y<74;G7 F{{SfHTjBr! diff --git a/dist/lyzr-0.1.21-py3-none-any.whl b/dist/lyzr-0.1.23-py3-none-any.whl similarity index 57% rename from dist/lyzr-0.1.21-py3-none-any.whl rename to dist/lyzr-0.1.23-py3-none-any.whl index fd8b93b0359a46e5409d6bd5dabfea73a1d1a0e7..d3b164e3a34609c7cdc0e75ca6699a3d5928928c 100644 GIT binary patch delta 12614 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

WT~cekuPpy| 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 I?*aFJ0Fia&?EnA( delta 11569 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 diff --git a/dist/lyzr-0.1.23.tar.gz b/dist/lyzr-0.1.23.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0c8ae50a7f5268b9ccdcc60d6d59b75fa4c1e922 GIT binary patch literal 30575 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¨_8V@EBq@mm$;A1E%au>P=QeED? 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.8.1, <3.12 Description-Content-Type: text/markdown License-File: LICENSE.txt +Requires-Dist: asyncio +Requires-Dist: nest_asyncio +Requires-Dist: openai==1.3.4 +Requires-Dist: litellm==1.2.0 +Requires-Dist: llama-index==0.9.4 +Requires-Dist: langchain==0.0.339 +Requires-Dist: python-dotenv>=1.0.0 +Requires-Dist: beautifulsoup4==4.12.2 +Requires-Dist: pandas==2.0.2 +Requires-Dist: matplotlib==3.8.2 +Requires-Dist: weaviate-client==3.25.3 # lyzr @@ -72,5 +80,3 @@ Replace `[version]` with the actual version of the package you have built. ## License `lyzr` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license. - - diff --git a/lyzr.egg-info/SOURCES.txt b/lyzr.egg-info/SOURCES.txt index 8f78ee8..0277951 100644 --- a/lyzr.egg-info/SOURCES.txt +++ b/lyzr.egg-info/SOURCES.txt @@ -14,6 +14,7 @@ lyzr/base/file_utils.py lyzr/base/llm.py lyzr/base/llms.py lyzr/base/prompt.py +lyzr/base/retrievers.py lyzr/base/service.py lyzr/base/vector_store.py lyzr/base/prompts/ai_queries_pt.txt diff --git a/lyzr.egg-info/requires.txt b/lyzr.egg-info/requires.txt index 18685cd..928b7fb 100644 --- a/lyzr.egg-info/requires.txt +++ b/lyzr.egg-info/requires.txt @@ -1,11 +1,11 @@ asyncio -beautifulsoup4==4.12.2 -lancedb==0.3.3 -langchain==0.0.339 -litellm==1.2.0 -llama-index==0.9.4 -matplotlib==3.8.2 nest_asyncio openai==1.3.4 -pandas==2.0.2 +litellm==1.2.0 +llama-index==0.9.4 +langchain==0.0.339 python-dotenv>=1.0.0 +beautifulsoup4==4.12.2 +pandas==2.0.2 +matplotlib==3.8.2 +weaviate-client==3.25.3 diff --git a/lyzr/base/vector_store.py b/lyzr/base/vector_store.py index 6ad72bd..feff1a4 100644 --- a/lyzr/base/vector_store.py +++ b/lyzr/base/vector_store.py @@ -38,7 +38,7 @@ def from_defaults( else kwargs["weaviate_client"] ) kwargs["index_name"] = ( - uuid if "index_name" not in kwargs else kwargs["index_name"] + f"DB_{uuid.uuid4().hex}" if "index_name" not in kwargs else kwargs["index_name"] ) vector_store = VectorStoreClass(**kwargs) diff --git a/setup.py b/setup.py index aae7724..d915297 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="lyzr", - version="0.1.22", + version="0.1.23", author="lyzr", description="", long_description=open("README.md").read(), From 2ac04b1b6813f816c528e2bf4e95c136b298fc0c Mon Sep 17 00:00:00 2001 From: patel-lyzr <147385356+patel-lyzr@users.noreply.github.com> Date: Sat, 27 Jan 2024 22:32:53 +0300 Subject: [PATCH 2/2] Update __init__.py --- build/lib/lyzr/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/lib/lyzr/__init__.py b/build/lib/lyzr/__init__.py index 623ad1d..cb2c063 100644 --- a/build/lib/lyzr/__init__.py +++ b/build/lib/lyzr/__init__.py @@ -16,5 +16,6 @@ "ChatBot", "FormulaGen", "DataAnalyzr", - "DataConnector" "VoiceBot", + "DataConnector", + "VoiceBot", ]