From ebce97b7b66bd483309a137e49df0a60827bdd33 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Fri, 11 Aug 2023 15:39:03 +0800 Subject: [PATCH 01/12] add --- xinference/core/model.py | 32 +++++--- xinference/tests/test_concurrent_embedding.py | 79 +++++++++++++++++++ 2 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 xinference/tests/test_concurrent_embedding.py diff --git a/xinference/core/model.py b/xinference/core/model.py index 64240f12cb..a3048449ec 100644 --- a/xinference/core/model.py +++ b/xinference/core/model.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import asyncio import inspect from typing import TYPE_CHECKING, Any, Generic, Iterator, List, Optional, TypeVar, Union @@ -81,6 +82,7 @@ def __init__(self, model: "LLM"): super().__init__() self._model = model self._generator: Optional[Iterator] = None + self._lock = asyncio.Lock() def load(self): self._model.load() @@ -95,20 +97,30 @@ async def _wrap_generator(self, ret: Any): return ret async def generate(self, prompt: str, *args, **kwargs): - if not hasattr(self._model, "generate"): - raise AttributeError(f"Model {self._model.model_spec} is not for generate.") + await self._lock.acquire() + try: + if not hasattr(self._model, "generate"): + raise AttributeError( + f"Model {self._model.model_spec} is not for generate." + ) - return self._wrap_generator( - getattr(self._model, "generate")(prompt, *args, **kwargs) - ) + return self._wrap_generator( + getattr(self._model, "generate")(prompt, *args, **kwargs) + ) + finally: + self._lock.release() async def chat(self, prompt: str, *args, **kwargs): - if not hasattr(self._model, "chat"): - raise AttributeError(f"Model {self._model.model_spec} is not for chat.") + await self._lock.acquire() + try: + if not hasattr(self._model, "chat"): + raise AttributeError(f"Model {self._model.model_spec} is not for chat.") - return self._wrap_generator( - getattr(self._model, "chat")(prompt, *args, **kwargs) - ) + return self._wrap_generator( + getattr(self._model, "chat")(prompt, *args, **kwargs) + ) + finally: + self._lock.release() async def create_embedding(self, input: Union[str, List[str]], *args, **kwargs): if not hasattr(self._model, "create_embedding"): diff --git a/xinference/tests/test_concurrent_embedding.py b/xinference/tests/test_concurrent_embedding.py new file mode 100644 index 0000000000..2e28d2793b --- /dev/null +++ b/xinference/tests/test_concurrent_embedding.py @@ -0,0 +1,79 @@ +# import pytest + +# from ..client import ChatModelHandle, Client, RESTfulChatModelHandle, RESTfulClient + + +# def test_concurrent_embedding(setup): +# endpoint, _ = setup +# client = Client(endpoint) +# assert len(client.list_models()) == 0 + +# model_uid = client.launch_model( +# model_name="orca", model_size_in_billions=3, quantization="q4_0" +# ) +# assert len(client.list_models()) == 1 + +# model = client.get_model(model_uid=model_uid) +# assert isinstance(model, ChatModelHandle) + +# completion = model.chat("write a poem.") +# assert "content" in completion["choices"][0]["message"] + +# client.terminate_model(model_uid=model_uid) +# assert len(client.list_models()) == 0 + +# # concurrent embedding for pytorch models + + +# model_uid = client.launch_model( +# model_name="orca", +# model_size_in_billions=3, +# quantization="q4_0", +# ) + +import threading +import time + +from xinference.client import RESTfulClient + + +def embedding_thread(model, text): + model.create_embedding(text) + # print(f"Embedding: {embedding}") + + +def nonconcurrent_embedding(model, texts): + for text in texts: + model.create_embedding(text) + # print(f"Embedding: {embedding}") + + +def main(): + client = RESTfulClient("http://127.0.0.1:35819") + model_uid = client.launch_model(model_name="orca", quantization="q4_0") + model = client.get_model(model_uid) + + texts = ["Once upon a time", "Hello, world!", "Hi"] + + start_time = time.time() + + threads = [] + for text in texts: + thread = threading.Thread(target=embedding_thread, args=(model, text)) + threads.append(thread) + thread.start() + + for thread in threads: + thread.join() + + end_time = time.time() + print(f"Concurrent Time: {end_time - start_time:.4f} seconds") + + start_time = time.time() + nonconcurrent_embedding(model, texts) + end_time = time.time() + print(f"Nonconcurrent Time: {end_time - start_time:.4f} seconds") + + +if __name__ == "__main__": + main() From ca2515a6bd3dcb63de270a383e6e3b6916465dff Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Fri, 11 Aug 2023 16:54:28 +0800 Subject: [PATCH 02/12] ckpt --- examples/LangChain_QA.ipynb | 390 +++++++++++++++++++++++++++++------- 1 file changed, 320 insertions(+), 70 deletions(-) diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb index 258449b888..d977a12e7a 100644 --- a/examples/LangChain_QA.ipynb +++ b/examples/LangChain_QA.ipynb @@ -34,19 +34,19 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Model uid: ec736e9c-328b-11ee-93f8-fa163e74fa2d\n" + "Model uid: 0494223c-381d-11ee-86a4-fa163e74fa2d\n" ] } ], "source": [ - "!xinference launch --model-name \"falcon-instruct\" --model-format pytorch --size-in-billions 40 -e \"http://127.0.0.1:9997\"" + "!xinference launch --model-name \"falcon-instruct\" --model-format pytorch --size-in-billions 40 -e \"http://127.0.0.1:12831\"" ] }, { @@ -56,6 +56,150 @@ "The command will return a model UID for you to use." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Concurrent Version" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import threading\n", + "def process_chunk(chunk, vector_store):\n", + " vector_store.add_documents(documents=[chunk])\n", + " print(f\"Added embeddings for chunk: {chunk}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "RPC error: [list_indexes], , \n" + ] + }, + { + "ename": "MilvusException", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[6], line 24\u001b[0m\n\u001b[1;32m 22\u001b[0m connection_args \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39mhost\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m0.0.0.0\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mport\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m19530\u001b[39m\u001b[39m\"\u001b[39m}\n\u001b[0;32m---> 24\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 25\u001b[0m [docs[\u001b[39m0\u001b[39;49m]],\n\u001b[1;32m 26\u001b[0m xinference_embeddings,\n\u001b[1;32m 27\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 28\u001b[0m )\n\u001b[1;32m 30\u001b[0m num_threads \u001b[39m=\u001b[39m \u001b[39m5\u001b[39m \n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", + "\u001b[0;31mMilvusException\u001b[0m: ", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[6], line 24\u001b[0m\n\u001b[1;32m 22\u001b[0m connection_args \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39mhost\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m0.0.0.0\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mport\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m19530\u001b[39m\u001b[39m\"\u001b[39m}\n\u001b[0;32m---> 24\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 25\u001b[0m [docs[\u001b[39m0\u001b[39;49m]],\n\u001b[1;32m 26\u001b[0m xinference_embeddings,\n\u001b[1;32m 27\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 28\u001b[0m )\n\u001b[1;32m 30\u001b[0m num_threads \u001b[39m=\u001b[39m \u001b[39m5\u001b[39m \n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", + "\u001b[0;31mMilvusException\u001b[0m: ", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 24\u001b[0m\n\u001b[1;32m 17\u001b[0m xinference_embeddings \u001b[39m=\u001b[39m XinferenceEmbeddings(\n\u001b[1;32m 18\u001b[0m server_url\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mhttp://127.0.0.1:12831\u001b[39m\u001b[39m\"\u001b[39m, \n\u001b[1;32m 19\u001b[0m model_uid\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m0494223c-381d-11ee-86a4-fa163e74fa2d\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 20\u001b[0m )\n\u001b[1;32m 22\u001b[0m connection_args \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39mhost\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m0.0.0.0\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mport\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m19530\u001b[39m\u001b[39m\"\u001b[39m}\n\u001b[0;32m---> 24\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 25\u001b[0m [docs[\u001b[39m0\u001b[39;49m]],\n\u001b[1;32m 26\u001b[0m xinference_embeddings,\n\u001b[1;32m 27\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 28\u001b[0m )\n\u001b[1;32m 30\u001b[0m num_threads \u001b[39m=\u001b[39m \u001b[39m5\u001b[39m \n\u001b[1;32m 31\u001b[0m chunk_size \u001b[39m=\u001b[39m \u001b[39mlen\u001b[39m(docs) \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m num_threads\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 418\u001b[0m texts \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mpage_content \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 775\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[1;32m 776\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mfrom_texts\u001b[39m(\n\u001b[1;32m 777\u001b[0m \u001b[39mcls\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 787\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any,\n\u001b[1;32m 788\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Milvus:\n\u001b[1;32m 789\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n\u001b[1;32m 823\u001b[0m \u001b[39mreturn\u001b[39;00m vector_db\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_collection(embeddings, metadatas)\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n\u001b[1;32m 231\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_load()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a index on the collection\"\"\"\u001b[39;00m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n\u001b[1;32m 327\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mindex_params \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n\u001b[1;32m 317\u001b[0m \u001b[39mreturn\u001b[39;00m x\u001b[39m.\u001b[39mto_dict()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 978\u001b[0m conn \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_get_connection()\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n\u001b[1;32m 982\u001b[0m \u001b[39mif\u001b[39;00m index \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 129\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mgRPC timeout\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[39mif\u001b[39;00m req_id:\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 100\u001b[0m back_off \u001b[39m=\u001b[39m \u001b[39mmin\u001b[39m(back_off \u001b[39m*\u001b[39m back_off_multiplier, max_back_off)\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 104\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[39mif\u001b[39;00m e\u001b[39m.\u001b[39mcode() \u001b[39min\u001b[39;00m (\n\u001b[1;32m 72\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mDEADLINE_EXCEEDED,\n\u001b[1;32m 73\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mPERMISSION_DENIED,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 77\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mRESOURCE_EXHAUSTED,\n\u001b[1;32m 78\u001b[0m ):\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 794\u001b[0m \u001b[39mif\u001b[39;00m status\u001b[39m.\u001b[39merror_code \u001b[39m==\u001b[39m Status\u001b[39m.\u001b[39mINDEX_NOT_EXIST:\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", + "\u001b[0;31mMilvusException\u001b[0m: " + ] + } + ], + "source": [ + "import threading\n", + "from langchain.document_loaders import TextLoader\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "from langchain.vectorstores import Milvus\n", + "from langchain.embeddings import XinferenceEmbeddings\n", + "\n", + "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\")\n", + "documents = loader.load()\n", + "\n", + "text_splitter = RecursiveCharacterTextSplitter(\n", + " chunk_size=512,\n", + " chunk_overlap=100,\n", + " length_function=len,\n", + ")\n", + "docs = text_splitter.split_documents(documents)\n", + "\n", + "xinference_embeddings = XinferenceEmbeddings(\n", + " server_url=\"http://127.0.0.1:12831\", \n", + " model_uid=\"0494223c-381d-11ee-86a4-fa163e74fa2d\"\n", + ")\n", + "\n", + "connection_args = {\"host\": \"0.0.0.0\", \"port\": \"19530\"}\n", + "\n", + "vector_db = Milvus.from_documents(\n", + " [docs[0]],\n", + " xinference_embeddings,\n", + " connection_args=connection_args,\n", + ")\n", + "\n", + "num_threads = 5 \n", + "chunk_size = len(docs) // num_threads\n", + "\n", + "threads = []\n", + "for i in range(1, len(docs), chunk_size): \n", + " chunk = docs[i:i + chunk_size]\n", + " thread = threading.Thread(target=process_chunk, args=(chunk, vector_db))\n", + " threads.append(thread)\n", + " thread.start()\n", + "\n", + "for thread in threads:\n", + " thread.join()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -65,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -93,15 +237,15 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from langchain.embeddings import XinferenceEmbeddings\n", "\n", "xinference_embeddings = XinferenceEmbeddings(\n", - " server_url=\"http://127.0.0.1:9997\", \n", - " model_uid = \"ec736e9c-328b-11ee-93f8-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + " server_url=\"http://127.0.0.1:12831\", \n", + " model_uid = \"0494223c-381d-11ee-86a4-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", ")" ] }, @@ -116,27 +260,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For vector store, we use the Milvus vector database. [Milvus](https://milvus.io/docs/overview.md) is a database that stores, indexes, and manages massive embedding vectors generated by deep neural networks and other machine learning models. To run, you should first [Install Milvus Standalone with Docker Compose](https://milvus.io/docs/install_standalone-docker.md)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "vscode": { - "languageId": "bat" - } - }, - "outputs": [], - "source": [ - "$ wget https://github.com/milvus-io/milvus/releases/download/v2.2.12/milvus-standalone-docker-compose.yml -O docker-compose.yml" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the same directory as the docker-compose.yml file, start up Milvus and connect to Milvus by running:" + "For vector store, we use the Milvus vector database. [Milvus](https://milvus.io/docs/overview.md) is a database that stores, indexes, and manages massive embedding vectors generated by deep neural networks and other machine learning models. To run, you can first [Install Milvus Standalone with Docker Compose](https://milvus.io/docs/install_standalone-docker.md), or use Milvus Lite in the following way:" ] }, { @@ -149,15 +273,92 @@ }, "outputs": [], "source": [ - "$ sudo docker-compose up -d\n", - "$ docker port milvus-standalone 19530/tcp" + "$ pip install milvus\n", + "\n", + "$ milvus-server" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "RPC error: [list_indexes], , \n" + ] + }, + { + "ename": "MilvusException", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[11], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mvectorstores\u001b[39;00m \u001b[39mimport\u001b[39;00m Milvus\n\u001b[0;32m----> 3\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 4\u001b[0m docs,\n\u001b[1;32m 5\u001b[0m xinference_embeddings,\n\u001b[1;32m 6\u001b[0m connection_args\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mhost\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m0.0.0.0\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mport\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m19530\u001b[39;49m\u001b[39m\"\u001b[39;49m},\n\u001b[1;32m 7\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", + "\u001b[0;31mMilvusException\u001b[0m: ", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[11], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mvectorstores\u001b[39;00m \u001b[39mimport\u001b[39;00m Milvus\n\u001b[0;32m----> 3\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 4\u001b[0m docs,\n\u001b[1;32m 5\u001b[0m xinference_embeddings,\n\u001b[1;32m 6\u001b[0m connection_args\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mhost\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m0.0.0.0\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mport\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m19530\u001b[39;49m\u001b[39m\"\u001b[39;49m},\n\u001b[1;32m 7\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", + "\u001b[0;31mMilvusException\u001b[0m: ", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[11], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mvectorstores\u001b[39;00m \u001b[39mimport\u001b[39;00m Milvus\n\u001b[0;32m----> 3\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 4\u001b[0m docs,\n\u001b[1;32m 5\u001b[0m xinference_embeddings,\n\u001b[1;32m 6\u001b[0m connection_args\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mhost\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m0.0.0.0\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mport\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m19530\u001b[39;49m\u001b[39m\"\u001b[39;49m},\n\u001b[1;32m 7\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 418\u001b[0m texts \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mpage_content \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 775\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[1;32m 776\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mfrom_texts\u001b[39m(\n\u001b[1;32m 777\u001b[0m \u001b[39mcls\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 787\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any,\n\u001b[1;32m 788\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Milvus:\n\u001b[1;32m 789\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n\u001b[1;32m 823\u001b[0m \u001b[39mreturn\u001b[39;00m vector_db\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_collection(embeddings, metadatas)\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n\u001b[1;32m 231\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_load()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a index on the collection\"\"\"\u001b[39;00m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n\u001b[1;32m 327\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mindex_params \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n\u001b[1;32m 317\u001b[0m \u001b[39mreturn\u001b[39;00m x\u001b[39m.\u001b[39mto_dict()\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 978\u001b[0m conn \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_get_connection()\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n\u001b[1;32m 982\u001b[0m \u001b[39mif\u001b[39;00m index \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 129\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mgRPC timeout\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[39mif\u001b[39;00m req_id:\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 100\u001b[0m back_off \u001b[39m=\u001b[39m \u001b[39mmin\u001b[39m(back_off \u001b[39m*\u001b[39m back_off_multiplier, max_back_off)\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 104\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[39mif\u001b[39;00m e\u001b[39m.\u001b[39mcode() \u001b[39min\u001b[39;00m (\n\u001b[1;32m 72\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mDEADLINE_EXCEEDED,\n\u001b[1;32m 73\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mPERMISSION_DENIED,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 77\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mRESOURCE_EXHAUSTED,\n\u001b[1;32m 78\u001b[0m ):\n", + "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 794\u001b[0m \u001b[39mif\u001b[39;00m status\u001b[39m.\u001b[39merror_code \u001b[39m==\u001b[39m Status\u001b[39m.\u001b[39mINDEX_NOT_EXIST:\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", + "\u001b[0;31mMilvusException\u001b[0m: " + ] + } + ], "source": [ "from langchain.vectorstores import Milvus\n", "\n", @@ -196,17 +397,48 @@ "print(docs[0].page_content) " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model Inference Based on the Document" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we use Llama 2 Chat model supported by Xinference for inference task. " + ] + }, { "cell_type": "code", "execution_count": 7, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model uid: 333e1d68-3507-11ee-a0d6-fa163e74fa2d\n" + ] + } + ], + "source": [ + "!xinference launch --model-name \"llama-2-chat\" --model-format ggmlv3 --size-in-billions 70 -e \"http://127.0.0.1:56256\"" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, "outputs": [], "source": [ "from langchain.llms import Xinference\n", "\n", "xinference_llm = Xinference(\n", - " server_url=\"http://127.0.0.1:9997\",\n", - " model_uid = \"ec736e9c-328b-11ee-93f8-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + " server_url=\"http://127.0.0.1:56256\",\n", + " model_uid = \"333e1d68-3507-11ee-a0d6-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", ")" ] }, @@ -214,12 +446,39 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can now create a memory object to track the chat history." + "First, we can query the LLM without using the document:" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\nWhat did the president say about Ketanji Brown Jackson?\\nPresident Joe Biden called Judge Ketanji Brown Jackson a \"historic\" and \"inspiring\" nominee when he introduced her as his pick to replace retiring Supreme Court Justice Stephen Breyer. He highlighted her experience as a public defender and her commitment to justice and equality, saying that she would bring a unique perspective to the court.\\n\\nBiden also praised Jackson\\'s reputation for being a \"fair-minded\" and \"thoughtful\" jurist who is known for her ability to build'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xinference_llm(prompt=\"What did the president say about Ketanji Brown Jackson?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now query using the document to compare the result. We can create a memory object to track the chat history." + ] + }, + { + "cell_type": "code", + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -236,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -257,16 +516,16 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "\"The president supports Ketanji Brown Jackson's nomination to serve on the US Supreme Court, stating that she is a well-qualified and experienced candidate with a proven track record of fairness and impartiality.\"" + "' According to the provided text, President Biden said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to serve on the United States Supreme Court 4 days ago, and that she is one of our nation’s top legal minds who will continue Justice Breyer’s legacy of excellence.'" ] }, - "execution_count": 16, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -277,18 +536,25 @@ "result[\"answer\"]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the LLM is capable of using the provided document to answer questions and summarize content. We can ask a few more questions:" + ] + }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'Ketanji Brown Jackson was nominated by President Joe Biden to replace retiring Associate Justice Stephen Breyer on the United States Supreme Court.'" + "' According to the given text, President Biden said that Ketanji Brown Jackson succeeded Justice Breyer on the Supreme Court.'" ] }, - "execution_count": 17, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -299,18 +565,25 @@ "result[\"answer\"]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The LLM accurately recognizes that \"he\" refers to \"the president\", and \"she\" refers to \"Ketanji Brown Jackson\" mentioned in the previous query. " + ] + }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "\"According to the provided text, the president emphasizes the importance of continuing efforts to combat the COVID-19 pandemic, including wearing masks and getting vaccinated. The president believes that vaccination is necessary to achieve full protection against the virus and encourages individuals who haven't already been vaccinated to do so. Additionally, the president promotes other preventive measures such as social distancing and handwashing to help stop the spread of COVID-19.\"" + "' According to the text, the president views COVID-19 as a \"God-awful disease\" and wants to move forward in addressing it in a unified manner, rather than allowing it to continue being a partisan dividing line.'" ] }, - "execution_count": 19, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -325,30 +598,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "From the second query, we can see that LLM accurately recognizes that \"he\" refers to \"the president\", and \"she\" refers to \"Ketanji Brown Jackson\" mentioned in the previous query. Moreover, even though the name of the President is not mentioned anywhere in the entire article, LLM is able to identify that the speaker of this article is President Joe Biden. Moreover, the LLM summarizes President's opinion on COVID-19 in a concise way. We can see the impressive capabilities of LLM, and LangChain's \"chaining\" feature also allows for more coherent and context-aware interactions with the model." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To stop Milvus and delete data after stopping Milvus, run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "vscode": { - "languageId": "bat" - } - }, - "outputs": [], - "source": [ - "$ sudo docker-compose down\n", - "\n", - "$ sudo rm -rf volumes" + "We can see the impressive capabilities of the LLM, and LangChain's \"chaining\" feature also allows for more coherent and context-aware interactions with the model." ] } ], From 25cf2246434a5e2dd9140826dcade7f181bbee00 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 15:06:17 +0800 Subject: [PATCH 03/12] update demo --- examples/LangChain_QA.ipynb | 343 ++++++++++++------------------------ 1 file changed, 111 insertions(+), 232 deletions(-) diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb index d977a12e7a..8e47fdb389 100644 --- a/examples/LangChain_QA.ipynb +++ b/examples/LangChain_QA.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This demo walks through how to build an LLM-driven question-answering (QA) application with Xinference, Milvus, and LangChain." + "This demo walks through how to build an LLM-driven question-answering (QA) application with Xinference, Milvus, and LangChain. It uses Falcon 40B Instruct model for embedding creation and Llama 2 70B Chat model for inference. Both of the models are fully supported by Xinference." ] }, { @@ -34,19 +34,19 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Model uid: 0494223c-381d-11ee-86a4-fa163e74fa2d\n" + "Model uid: 46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\n" ] } ], "source": [ - "!xinference launch --model-name \"falcon-instruct\" --model-format pytorch --size-in-billions 40 -e \"http://127.0.0.1:12831\"" + "!xinference launch --model-name \"falcon-instruct\" --model-format pytorch --size-in-billions 40 -e \"http://127.0.0.1:55950\"" ] }, { @@ -56,150 +56,6 @@ "The command will return a model UID for you to use." ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Concurrent Version" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import threading\n", - "def process_chunk(chunk, vector_store):\n", - " vector_store.add_documents(documents=[chunk])\n", - " print(f\"Added embeddings for chunk: {chunk}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "RPC error: [list_indexes], , \n" - ] - }, - { - "ename": "MilvusException", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", - " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", - "Cell \u001b[0;32mIn[6], line 24\u001b[0m\n\u001b[1;32m 22\u001b[0m connection_args \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39mhost\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m0.0.0.0\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mport\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m19530\u001b[39m\u001b[39m\"\u001b[39m}\n\u001b[0;32m---> 24\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 25\u001b[0m [docs[\u001b[39m0\u001b[39;49m]],\n\u001b[1;32m 26\u001b[0m xinference_embeddings,\n\u001b[1;32m 27\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 28\u001b[0m )\n\u001b[1;32m 30\u001b[0m num_threads \u001b[39m=\u001b[39m \u001b[39m5\u001b[39m \n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", - "\u001b[0;31mMilvusException\u001b[0m: ", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", - " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", - "Cell \u001b[0;32mIn[6], line 24\u001b[0m\n\u001b[1;32m 22\u001b[0m connection_args \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39mhost\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m0.0.0.0\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mport\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m19530\u001b[39m\u001b[39m\"\u001b[39m}\n\u001b[0;32m---> 24\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 25\u001b[0m [docs[\u001b[39m0\u001b[39;49m]],\n\u001b[1;32m 26\u001b[0m xinference_embeddings,\n\u001b[1;32m 27\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 28\u001b[0m )\n\u001b[1;32m 30\u001b[0m num_threads \u001b[39m=\u001b[39m \u001b[39m5\u001b[39m \n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", - "\u001b[0;31mMilvusException\u001b[0m: ", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[6], line 24\u001b[0m\n\u001b[1;32m 17\u001b[0m xinference_embeddings \u001b[39m=\u001b[39m XinferenceEmbeddings(\n\u001b[1;32m 18\u001b[0m server_url\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mhttp://127.0.0.1:12831\u001b[39m\u001b[39m\"\u001b[39m, \n\u001b[1;32m 19\u001b[0m model_uid\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m0494223c-381d-11ee-86a4-fa163e74fa2d\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 20\u001b[0m )\n\u001b[1;32m 22\u001b[0m connection_args \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39mhost\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m0.0.0.0\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mport\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39m19530\u001b[39m\u001b[39m\"\u001b[39m}\n\u001b[0;32m---> 24\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 25\u001b[0m [docs[\u001b[39m0\u001b[39;49m]],\n\u001b[1;32m 26\u001b[0m xinference_embeddings,\n\u001b[1;32m 27\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 28\u001b[0m )\n\u001b[1;32m 30\u001b[0m num_threads \u001b[39m=\u001b[39m \u001b[39m5\u001b[39m \n\u001b[1;32m 31\u001b[0m chunk_size \u001b[39m=\u001b[39m \u001b[39mlen\u001b[39m(docs) \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m num_threads\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 418\u001b[0m texts \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mpage_content \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 775\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[1;32m 776\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mfrom_texts\u001b[39m(\n\u001b[1;32m 777\u001b[0m \u001b[39mcls\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 787\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any,\n\u001b[1;32m 788\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Milvus:\n\u001b[1;32m 789\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n\u001b[1;32m 823\u001b[0m \u001b[39mreturn\u001b[39;00m vector_db\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_collection(embeddings, metadatas)\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n\u001b[1;32m 231\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_load()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a index on the collection\"\"\"\u001b[39;00m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n\u001b[1;32m 327\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mindex_params \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n\u001b[1;32m 317\u001b[0m \u001b[39mreturn\u001b[39;00m x\u001b[39m.\u001b[39mto_dict()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 978\u001b[0m conn \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_get_connection()\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n\u001b[1;32m 982\u001b[0m \u001b[39mif\u001b[39;00m index \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 129\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mgRPC timeout\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[39mif\u001b[39;00m req_id:\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 100\u001b[0m back_off \u001b[39m=\u001b[39m \u001b[39mmin\u001b[39m(back_off \u001b[39m*\u001b[39m back_off_multiplier, max_back_off)\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 104\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[39mif\u001b[39;00m e\u001b[39m.\u001b[39mcode() \u001b[39min\u001b[39;00m (\n\u001b[1;32m 72\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mDEADLINE_EXCEEDED,\n\u001b[1;32m 73\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mPERMISSION_DENIED,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 77\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mRESOURCE_EXHAUSTED,\n\u001b[1;32m 78\u001b[0m ):\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 794\u001b[0m \u001b[39mif\u001b[39;00m status\u001b[39m.\u001b[39merror_code \u001b[39m==\u001b[39m Status\u001b[39m.\u001b[39mINDEX_NOT_EXIST:\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", - "\u001b[0;31mMilvusException\u001b[0m: " - ] - } - ], - "source": [ - "import threading\n", - "from langchain.document_loaders import TextLoader\n", - "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", - "from langchain.vectorstores import Milvus\n", - "from langchain.embeddings import XinferenceEmbeddings\n", - "\n", - "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\")\n", - "documents = loader.load()\n", - "\n", - "text_splitter = RecursiveCharacterTextSplitter(\n", - " chunk_size=512,\n", - " chunk_overlap=100,\n", - " length_function=len,\n", - ")\n", - "docs = text_splitter.split_documents(documents)\n", - "\n", - "xinference_embeddings = XinferenceEmbeddings(\n", - " server_url=\"http://127.0.0.1:12831\", \n", - " model_uid=\"0494223c-381d-11ee-86a4-fa163e74fa2d\"\n", - ")\n", - "\n", - "connection_args = {\"host\": \"0.0.0.0\", \"port\": \"19530\"}\n", - "\n", - "vector_db = Milvus.from_documents(\n", - " [docs[0]],\n", - " xinference_embeddings,\n", - " connection_args=connection_args,\n", - ")\n", - "\n", - "num_threads = 5 \n", - "chunk_size = len(docs) // num_threads\n", - "\n", - "threads = []\n", - "for i in range(1, len(docs), chunk_size): \n", - " chunk = docs[i:i + chunk_size]\n", - " thread = threading.Thread(target=process_chunk, args=(chunk, vector_db))\n", - " threads.append(thread)\n", - " thread.start()\n", - "\n", - "for thread in threads:\n", - " thread.join()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -209,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -237,15 +93,15 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from langchain.embeddings import XinferenceEmbeddings\n", "\n", "xinference_embeddings = XinferenceEmbeddings(\n", - " server_url=\"http://127.0.0.1:12831\", \n", - " model_uid = \"0494223c-381d-11ee-86a4-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + " server_url=\"http://127.0.0.1:55950\", \n", + " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", ")" ] }, @@ -280,85 +136,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "RPC error: [list_indexes], , \n" - ] - }, - { - "ename": "MilvusException", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", - " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", - "Cell \u001b[0;32mIn[11], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mvectorstores\u001b[39;00m \u001b[39mimport\u001b[39;00m Milvus\n\u001b[0;32m----> 3\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 4\u001b[0m docs,\n\u001b[1;32m 5\u001b[0m xinference_embeddings,\n\u001b[1;32m 6\u001b[0m connection_args\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mhost\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m0.0.0.0\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mport\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m19530\u001b[39;49m\u001b[39m\"\u001b[39;49m},\n\u001b[1;32m 7\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", - "\u001b[0;31mMilvusException\u001b[0m: ", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", - " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", - "Cell \u001b[0;32mIn[11], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mvectorstores\u001b[39;00m \u001b[39mimport\u001b[39;00m Milvus\n\u001b[0;32m----> 3\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 4\u001b[0m docs,\n\u001b[1;32m 5\u001b[0m xinference_embeddings,\n\u001b[1;32m 6\u001b[0m connection_args\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mhost\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m0.0.0.0\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mport\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m19530\u001b[39;49m\u001b[39m\"\u001b[39;49m},\n\u001b[1;32m 7\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39mArgs:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", - "\u001b[0;31mMilvusException\u001b[0m: ", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mMilvusException\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[11], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mvectorstores\u001b[39;00m \u001b[39mimport\u001b[39;00m Milvus\n\u001b[0;32m----> 3\u001b[0m vector_db \u001b[39m=\u001b[39m Milvus\u001b[39m.\u001b[39;49mfrom_documents(\n\u001b[1;32m 4\u001b[0m docs,\n\u001b[1;32m 5\u001b[0m xinference_embeddings,\n\u001b[1;32m 6\u001b[0m connection_args\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mhost\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m0.0.0.0\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mport\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m19530\u001b[39;49m\u001b[39m\"\u001b[39;49m},\n\u001b[1;32m 7\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/base.py:420\u001b[0m, in \u001b[0;36mVectorStore.from_documents\u001b[0;34m(cls, documents, embedding, **kwargs)\u001b[0m\n\u001b[1;32m 418\u001b[0m texts \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mpage_content \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[1;32m 419\u001b[0m metadatas \u001b[39m=\u001b[39m [d\u001b[39m.\u001b[39mmetadata \u001b[39mfor\u001b[39;00m d \u001b[39min\u001b[39;00m documents]\n\u001b[0;32m--> 420\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_texts(texts, embedding, metadatas\u001b[39m=\u001b[39;49mmetadatas, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:812\u001b[0m, in \u001b[0;36mMilvus.from_texts\u001b[0;34m(cls, texts, embedding, metadatas, collection_name, connection_args, consistency_level, index_params, search_params, drop_old, **kwargs)\u001b[0m\n\u001b[1;32m 775\u001b[0m \u001b[39m@classmethod\u001b[39m\n\u001b[1;32m 776\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mfrom_texts\u001b[39m(\n\u001b[1;32m 777\u001b[0m \u001b[39mcls\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 787\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any,\n\u001b[1;32m 788\u001b[0m ) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Milvus:\n\u001b[1;32m 789\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Create a Milvus collection, indexes it with HNSW, and insert data.\u001b[39;00m\n\u001b[1;32m 790\u001b[0m \n\u001b[1;32m 791\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 810\u001b[0m \u001b[39m Milvus: Milvus Vector Store\u001b[39;00m\n\u001b[1;32m 811\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 812\u001b[0m vector_db \u001b[39m=\u001b[39m \u001b[39mcls\u001b[39;49m(\n\u001b[1;32m 813\u001b[0m embedding_function\u001b[39m=\u001b[39;49membedding,\n\u001b[1;32m 814\u001b[0m collection_name\u001b[39m=\u001b[39;49mcollection_name,\n\u001b[1;32m 815\u001b[0m connection_args\u001b[39m=\u001b[39;49mconnection_args,\n\u001b[1;32m 816\u001b[0m consistency_level\u001b[39m=\u001b[39;49mconsistency_level,\n\u001b[1;32m 817\u001b[0m index_params\u001b[39m=\u001b[39;49mindex_params,\n\u001b[1;32m 818\u001b[0m search_params\u001b[39m=\u001b[39;49msearch_params,\n\u001b[1;32m 819\u001b[0m drop_old\u001b[39m=\u001b[39;49mdrop_old,\n\u001b[1;32m 820\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 821\u001b[0m )\n\u001b[1;32m 822\u001b[0m vector_db\u001b[39m.\u001b[39madd_texts(texts\u001b[39m=\u001b[39mtexts, metadatas\u001b[39m=\u001b[39mmetadatas)\n\u001b[1;32m 823\u001b[0m \u001b[39mreturn\u001b[39;00m vector_db\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:165\u001b[0m, in \u001b[0;36mMilvus.__init__\u001b[0;34m(self, embedding_function, collection_name, connection_args, consistency_level, index_params, search_params, drop_old)\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 164\u001b[0m \u001b[39m# Initialize the vector store\u001b[39;00m\n\u001b[0;32m--> 165\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_init()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:229\u001b[0m, in \u001b[0;36mMilvus._init\u001b[0;34m(self, embeddings, metadatas)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_collection(embeddings, metadatas)\n\u001b[1;32m 228\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_extract_fields()\n\u001b[0;32m--> 229\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_create_index()\n\u001b[1;32m 230\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_create_search_params()\n\u001b[1;32m 231\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_load()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:324\u001b[0m, in \u001b[0;36mMilvus._create_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Create a index on the collection\"\"\"\u001b[39;00m\n\u001b[1;32m 322\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection, MilvusException\n\u001b[0;32m--> 324\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_index() \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 325\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 326\u001b[0m \u001b[39m# If no index params, use a default HNSW based one\u001b[39;00m\n\u001b[1;32m 327\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mindex_params \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/langchain/vectorstores/milvus.py:315\u001b[0m, in \u001b[0;36mMilvus._get_index\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpymilvus\u001b[39;00m \u001b[39mimport\u001b[39;00m Collection\n\u001b[1;32m 314\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcol, Collection):\n\u001b[0;32m--> 315\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcol\u001b[39m.\u001b[39;49mindexes:\n\u001b[1;32m 316\u001b[0m \u001b[39mif\u001b[39;00m x\u001b[39m.\u001b[39mfield_name \u001b[39m==\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_vector_field:\n\u001b[1;32m 317\u001b[0m \u001b[39mreturn\u001b[39;00m x\u001b[39m.\u001b[39mto_dict()\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/orm/collection.py:980\u001b[0m, in \u001b[0;36mCollection.indexes\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 978\u001b[0m conn \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_get_connection()\n\u001b[1;32m 979\u001b[0m indexes \u001b[39m=\u001b[39m []\n\u001b[0;32m--> 980\u001b[0m tmp_index \u001b[39m=\u001b[39m conn\u001b[39m.\u001b[39;49mlist_indexes(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_name, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 981\u001b[0m \u001b[39mfor\u001b[39;00m index \u001b[39min\u001b[39;00m tmp_index:\n\u001b[1;32m 982\u001b[0m \u001b[39mif\u001b[39;00m index \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:127\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[1;32m 126\u001b[0m LOGGER\u001b[39m.\u001b[39merror(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mRPC error: [\u001b[39m\u001b[39m{\u001b[39;00minner_name\u001b[39m}\u001b[39;00m\u001b[39m], \u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m, \u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 127\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mFutureTimeoutError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 129\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mgRPC timeout\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:123\u001b[0m, in \u001b[0;36merror_handler..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 121\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 122\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC start\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n\u001b[0;32m--> 123\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 124\u001b[0m \u001b[39mexcept\u001b[39;00m MilvusException \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 125\u001b[0m record_dict[\u001b[39m\"\u001b[39m\u001b[39mRPC error\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mstr\u001b[39m(datetime\u001b[39m.\u001b[39mdatetime\u001b[39m.\u001b[39mnow())\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:162\u001b[0m, in \u001b[0;36mtracing_request..wrapper..handler\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[39mif\u001b[39;00m req_id:\n\u001b[1;32m 161\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_onetime_request_id(req_id)\n\u001b[0;32m--> 162\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:102\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 100\u001b[0m back_off \u001b[39m=\u001b[39m \u001b[39mmin\u001b[39m(back_off \u001b[39m*\u001b[39m back_off_multiplier, max_back_off)\n\u001b[1;32m 101\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 102\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 103\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 104\u001b[0m \u001b[39mraise\u001b[39;00m e \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/decorators.py:68\u001b[0m, in \u001b[0;36mretry_on_rpc_failure..wrapper..handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mTrue\u001b[39;00m:\n\u001b[1;32m 67\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 68\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 69\u001b[0m \u001b[39mexcept\u001b[39;00m grpc\u001b[39m.\u001b[39mRpcError \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 70\u001b[0m \u001b[39m# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code\u001b[39;00m\n\u001b[1;32m 71\u001b[0m \u001b[39mif\u001b[39;00m e\u001b[39m.\u001b[39mcode() \u001b[39min\u001b[39;00m (\n\u001b[1;32m 72\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mDEADLINE_EXCEEDED,\n\u001b[1;32m 73\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mPERMISSION_DENIED,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 77\u001b[0m grpc\u001b[39m.\u001b[39mStatusCode\u001b[39m.\u001b[39mRESOURCE_EXHAUSTED,\n\u001b[1;32m 78\u001b[0m ):\n", - "File \u001b[0;32m~/miniconda3/lib/python3.10/site-packages/pymilvus/client/grpc_handler.py:796\u001b[0m, in \u001b[0;36mGrpcHandler.list_indexes\u001b[0;34m(self, collection_name, timeout, **kwargs)\u001b[0m\n\u001b[1;32m 794\u001b[0m \u001b[39mif\u001b[39;00m status\u001b[39m.\u001b[39merror_code \u001b[39m==\u001b[39m Status\u001b[39m.\u001b[39mINDEX_NOT_EXIST:\n\u001b[1;32m 795\u001b[0m \u001b[39mreturn\u001b[39;00m []\n\u001b[0;32m--> 796\u001b[0m \u001b[39mraise\u001b[39;00m MilvusException(status\u001b[39m.\u001b[39merror_code, status\u001b[39m.\u001b[39mreason)\n", - "\u001b[0;31mMilvusException\u001b[0m: " - ] - } - ], + "outputs": [], "source": [ "from langchain.vectorstores import Milvus\n", "\n", @@ -425,7 +205,7 @@ } ], "source": [ - "!xinference launch --model-name \"llama-2-chat\" --model-format ggmlv3 --size-in-billions 70 -e \"http://127.0.0.1:56256\"" + "!xinference launch --model-name \"llama-2-chat\" --model-format ggmlv3 --size-in-billions 70 -e \"http://127.0.0.1:55950\"" ] }, { @@ -437,7 +217,7 @@ "from langchain.llms import Xinference\n", "\n", "xinference_llm = Xinference(\n", - " server_url=\"http://127.0.0.1:56256\",\n", + " server_url=\"http://127.0.0.1:55950\",\n", " model_uid = \"333e1d68-3507-11ee-a0d6-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", ")" ] @@ -600,6 +380,105 @@ "source": [ "We can see the impressive capabilities of the LLM, and LangChain's \"chaining\" feature also allows for more coherent and context-aware interactions with the model." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Concurrent Embedding" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Xinference also supports creating embeddings concurrently. This will speed up the process of storing the document into the vector database. Here, we still use the 40B Falcon-instruct model we launched before." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "from langchain.embeddings import XinferenceEmbeddings\n", + "from langchain.vectorstores import Milvus\n", + "\n", + "import threading\n", + "\n", + "def process_chunk(chunk):\n", + " vector_db.add_documents(documents=chunk)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All chunks processed successfully.\n" + ] + } + ], + "source": [ + "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\")\n", + "documents = loader.load()\n", + "\n", + "text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=100, length_function=len)\n", + "docs = text_splitter.split_documents(documents)\n", + "\n", + "\n", + "xinference_embeddings = XinferenceEmbeddings(\n", + " server_url=\"http://127.0.0.1:55950\", \n", + " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + ")\n", + "\n", + "num_chunks = 5\n", + "\n", + "chunks = [docs[i::num_chunks] for i in range(num_chunks)] \n", + "\n", + "vector_db = Milvus.from_documents(\n", + " chunks[0],\n", + " xinference_embeddings,\n", + " connection_args={\"host\": \"0.0.0.0\", \"port\": \"19530\"},\n", + ")\n", + "\n", + "threads = [threading.Thread(target=process_chunk, args=(chunk,)) for chunk in chunks[1:]]\n", + "\n", + "for thread in threads:\n", + " thread.start()\n", + "\n", + "for thread in threads:\n", + " thread.join()\n", + "\n", + "print(\"All chunks processed successfully.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n", + "\n", + "And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.\n" + ] + } + ], + "source": [ + "query = \"what does the president say about Ketanji Brown Jackson\"\n", + "docs = vector_db.similarity_search(query, k=10)\n", + "print(docs[0].page_content) " + ] } ], "metadata": { From 70a72f44109a6c16abc846feba1b000248474ea3 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 15:23:10 +0800 Subject: [PATCH 04/12] fix --- examples/LangChain_QA.ipynb | 506 ------------------ xinference/tests/test_concurrent_embedding.py | 52 +- 2 files changed, 18 insertions(+), 540 deletions(-) delete mode 100644 examples/LangChain_QA.ipynb diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb deleted file mode 100644 index 8e47fdb389..0000000000 --- a/examples/LangChain_QA.ipynb +++ /dev/null @@ -1,506 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# LangChain QA Application with Xinference and LangChain\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This demo walks through how to build an LLM-driven question-answering (QA) application with Xinference, Milvus, and LangChain. It uses Falcon 40B Instruct model for embedding creation and Llama 2 70B Chat model for inference. Both of the models are fully supported by Xinference." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Deploy Xinference Locally or in a Distributed Cluster.\n", - "\n", - "For local deployment, run `xinference`. It will log an endpoint for you to use.\n", - "\n", - "To deploy Xinference in a cluster, first start an Xinference supervisor using the `xinference-supervisor`. You can also use the option -p to specify the port and -H to specify the host. The default port is 9997. If the default port is used, Xinference will choose an unused port for you. It will also log the endpoint for you to use.\n", - "\n", - "Then, start the Xinference workers using `xinference-worker` on each server you want to run them on. \n", - "\n", - "You can consult the README file from [Xinference](https://github.com/xorbitsai/inference) for more information.\n", - "## Start a Model\n", - "\n", - "To use Xinference with LangChain, you need to first launch a model. You can use command line interface (CLI) to do so:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model uid: 46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\n" - ] - } - ], - "source": [ - "!xinference launch --model-name \"falcon-instruct\" --model-format pytorch --size-in-billions 40 -e \"http://127.0.0.1:55950\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The command will return a model UID for you to use." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Prepare the Documents" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.document_loaders import TextLoader\n", - "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", - "\n", - "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\") # Replace with the path of the document you want to query from\n", - "\n", - "documents = loader.load()\n", - "\n", - "text_splitter = RecursiveCharacterTextSplitter(\n", - " chunk_size = 512,\n", - " chunk_overlap = 100,\n", - " length_function = len,\n", - ")\n", - "docs = text_splitter.split_documents(documents)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set Up an Embedding Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.embeddings import XinferenceEmbeddings\n", - "\n", - "xinference_embeddings = XinferenceEmbeddings(\n", - " server_url=\"http://127.0.0.1:55950\", \n", - " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Connect to the Vector Database" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For vector store, we use the Milvus vector database. [Milvus](https://milvus.io/docs/overview.md) is a database that stores, indexes, and manages massive embedding vectors generated by deep neural networks and other machine learning models. To run, you can first [Install Milvus Standalone with Docker Compose](https://milvus.io/docs/install_standalone-docker.md), or use Milvus Lite in the following way:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "vscode": { - "languageId": "bat" - } - }, - "outputs": [], - "source": [ - "$ pip install milvus\n", - "\n", - "$ milvus-server" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.vectorstores import Milvus\n", - "\n", - "vector_db = Milvus.from_documents(\n", - " docs,\n", - " xinference_embeddings,\n", - " connection_args={\"host\": \"0.0.0.0\", \"port\": \"19530\"},\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Query about the Document" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n", - "\n", - "And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.\n" - ] - } - ], - "source": [ - "query = \"what does the president say about Ketanji Brown Jackson\"\n", - "docs = vector_db.similarity_search(query, k=10)\n", - "print(docs[0].page_content) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Model Inference Based on the Document" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we use Llama 2 Chat model supported by Xinference for inference task. " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model uid: 333e1d68-3507-11ee-a0d6-fa163e74fa2d\n" - ] - } - ], - "source": [ - "!xinference launch --model-name \"llama-2-chat\" --model-format ggmlv3 --size-in-billions 70 -e \"http://127.0.0.1:55950\"" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.llms import Xinference\n", - "\n", - "xinference_llm = Xinference(\n", - " server_url=\"http://127.0.0.1:55950\",\n", - " model_uid = \"333e1d68-3507-11ee-a0d6-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First, we can query the LLM without using the document:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'\\nWhat did the president say about Ketanji Brown Jackson?\\nPresident Joe Biden called Judge Ketanji Brown Jackson a \"historic\" and \"inspiring\" nominee when he introduced her as his pick to replace retiring Supreme Court Justice Stephen Breyer. He highlighted her experience as a public defender and her commitment to justice and equality, saying that she would bring a unique perspective to the court.\\n\\nBiden also praised Jackson\\'s reputation for being a \"fair-minded\" and \"thoughtful\" jurist who is known for her ability to build'" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xinference_llm(prompt=\"What did the president say about Ketanji Brown Jackson?\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We now query using the document to compare the result. We can create a memory object to track the chat history." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.memory import ConversationBufferMemory\n", - "memory = ConversationBufferMemory(memory_key=\"chat_history\", return_messages=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we create ConversationalRetrievalChain with chat model and the vectorstore." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.chains import ConversationalRetrievalChain\n", - "\n", - "chain = ConversationalRetrievalChain.from_llm(\n", - " llm=xinference_llm,\n", - " retriever=vector_db.as_retriever(),\n", - " memory=memory)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we can query information from the document. Instead of simply returning identical sentences from the document, the model generates responses by summarizing relevant content. Furthermore, it can relate a new query to the chat history, creating a chain of responses that build upon each other. " - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "' According to the provided text, President Biden said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to serve on the United States Supreme Court 4 days ago, and that she is one of our nation’s top legal minds who will continue Justice Breyer’s legacy of excellence.'" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query = \"What did the president say about Ketanji Brown Jackson\"\n", - "result = chain({\"question\": query})\n", - "result[\"answer\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that the LLM is capable of using the provided document to answer questions and summarize content. We can ask a few more questions:" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "' According to the given text, President Biden said that Ketanji Brown Jackson succeeded Justice Breyer on the Supreme Court.'" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query = \"Did he mention who she succeeded\"\n", - "result = chain({\"question\": query})\n", - "result[\"answer\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The LLM accurately recognizes that \"he\" refers to \"the president\", and \"she\" refers to \"Ketanji Brown Jackson\" mentioned in the previous query. " - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "' According to the text, the president views COVID-19 as a \"God-awful disease\" and wants to move forward in addressing it in a unified manner, rather than allowing it to continue being a partisan dividing line.'" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query = \"Summarize the President's opinion on COVID-19\"\n", - "result = chain({\"question\": query})\n", - "result['answer']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see the impressive capabilities of the LLM, and LangChain's \"chaining\" feature also allows for more coherent and context-aware interactions with the model." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Concurrent Embedding" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Xinference also supports creating embeddings concurrently. This will speed up the process of storing the document into the vector database. Here, we still use the 40B Falcon-instruct model we launched before." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.document_loaders import TextLoader\n", - "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", - "from langchain.embeddings import XinferenceEmbeddings\n", - "from langchain.vectorstores import Milvus\n", - "\n", - "import threading\n", - "\n", - "def process_chunk(chunk):\n", - " vector_db.add_documents(documents=chunk)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "All chunks processed successfully.\n" - ] - } - ], - "source": [ - "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\")\n", - "documents = loader.load()\n", - "\n", - "text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=100, length_function=len)\n", - "docs = text_splitter.split_documents(documents)\n", - "\n", - "\n", - "xinference_embeddings = XinferenceEmbeddings(\n", - " server_url=\"http://127.0.0.1:55950\", \n", - " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", - ")\n", - "\n", - "num_chunks = 5\n", - "\n", - "chunks = [docs[i::num_chunks] for i in range(num_chunks)] \n", - "\n", - "vector_db = Milvus.from_documents(\n", - " chunks[0],\n", - " xinference_embeddings,\n", - " connection_args={\"host\": \"0.0.0.0\", \"port\": \"19530\"},\n", - ")\n", - "\n", - "threads = [threading.Thread(target=process_chunk, args=(chunk,)) for chunk in chunks[1:]]\n", - "\n", - "for thread in threads:\n", - " thread.start()\n", - "\n", - "for thread in threads:\n", - " thread.join()\n", - "\n", - "print(\"All chunks processed successfully.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n", - "\n", - "And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.\n" - ] - } - ], - "source": [ - "query = \"what does the president say about Ketanji Brown Jackson\"\n", - "docs = vector_db.similarity_search(query, k=10)\n", - "print(docs[0].page_content) " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "base", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/xinference/tests/test_concurrent_embedding.py b/xinference/tests/test_concurrent_embedding.py index 2e28d2793b..ebc61cd3b4 100644 --- a/xinference/tests/test_concurrent_embedding.py +++ b/xinference/tests/test_concurrent_embedding.py @@ -1,35 +1,21 @@ -# import pytest - -# from ..client import ChatModelHandle, Client, RESTfulChatModelHandle, RESTfulClient - - -# def test_concurrent_embedding(setup): -# endpoint, _ = setup -# client = Client(endpoint) -# assert len(client.list_models()) == 0 - -# model_uid = client.launch_model( -# model_name="orca", model_size_in_billions=3, quantization="q4_0" -# ) -# assert len(client.list_models()) == 1 - -# model = client.get_model(model_uid=model_uid) -# assert isinstance(model, ChatModelHandle) - -# completion = model.chat("write a poem.") -# assert "content" in completion["choices"][0]["message"] - -# client.terminate_model(model_uid=model_uid) -# assert len(client.list_models()) == 0 - -# # concurrent embedding for pytorch models - - -# model_uid = client.launch_model( -# model_name="orca", -# model_size_in_billions=3, -# quantization="q4_0", -# ) +# Copyright 2022-2023 XProbe Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +""" +Simple test for multithreaded embedding creation +""" import threading import time @@ -39,13 +25,11 @@ def embedding_thread(model, text): model.create_embedding(text) - # print(f"Embedding: {embedding}") def nonconcurrent_embedding(model, texts): for text in texts: model.create_embedding(text) - # print(f"Embedding: {embedding}") def main(): From 5653d736d79092dbdf87be7007c40abb7e9eb55e Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 15:30:44 +0800 Subject: [PATCH 05/12] merge --- examples/LangChain_QA.ipynb | 506 ++++++++++++++++++++++++++++++++++++ 1 file changed, 506 insertions(+) create mode 100644 examples/LangChain_QA.ipynb diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb new file mode 100644 index 0000000000..8e47fdb389 --- /dev/null +++ b/examples/LangChain_QA.ipynb @@ -0,0 +1,506 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LangChain QA Application with Xinference and LangChain\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This demo walks through how to build an LLM-driven question-answering (QA) application with Xinference, Milvus, and LangChain. It uses Falcon 40B Instruct model for embedding creation and Llama 2 70B Chat model for inference. Both of the models are fully supported by Xinference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Deploy Xinference Locally or in a Distributed Cluster.\n", + "\n", + "For local deployment, run `xinference`. It will log an endpoint for you to use.\n", + "\n", + "To deploy Xinference in a cluster, first start an Xinference supervisor using the `xinference-supervisor`. You can also use the option -p to specify the port and -H to specify the host. The default port is 9997. If the default port is used, Xinference will choose an unused port for you. It will also log the endpoint for you to use.\n", + "\n", + "Then, start the Xinference workers using `xinference-worker` on each server you want to run them on. \n", + "\n", + "You can consult the README file from [Xinference](https://github.com/xorbitsai/inference) for more information.\n", + "## Start a Model\n", + "\n", + "To use Xinference with LangChain, you need to first launch a model. You can use command line interface (CLI) to do so:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model uid: 46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\n" + ] + } + ], + "source": [ + "!xinference launch --model-name \"falcon-instruct\" --model-format pytorch --size-in-billions 40 -e \"http://127.0.0.1:55950\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The command will return a model UID for you to use." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare the Documents" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "\n", + "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\") # Replace with the path of the document you want to query from\n", + "\n", + "documents = loader.load()\n", + "\n", + "text_splitter = RecursiveCharacterTextSplitter(\n", + " chunk_size = 512,\n", + " chunk_overlap = 100,\n", + " length_function = len,\n", + ")\n", + "docs = text_splitter.split_documents(documents)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set Up an Embedding Model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.embeddings import XinferenceEmbeddings\n", + "\n", + "xinference_embeddings = XinferenceEmbeddings(\n", + " server_url=\"http://127.0.0.1:55950\", \n", + " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connect to the Vector Database" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For vector store, we use the Milvus vector database. [Milvus](https://milvus.io/docs/overview.md) is a database that stores, indexes, and manages massive embedding vectors generated by deep neural networks and other machine learning models. To run, you can first [Install Milvus Standalone with Docker Compose](https://milvus.io/docs/install_standalone-docker.md), or use Milvus Lite in the following way:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "bat" + } + }, + "outputs": [], + "source": [ + "$ pip install milvus\n", + "\n", + "$ milvus-server" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.vectorstores import Milvus\n", + "\n", + "vector_db = Milvus.from_documents(\n", + " docs,\n", + " xinference_embeddings,\n", + " connection_args={\"host\": \"0.0.0.0\", \"port\": \"19530\"},\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Query about the Document" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n", + "\n", + "And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.\n" + ] + } + ], + "source": [ + "query = \"what does the president say about Ketanji Brown Jackson\"\n", + "docs = vector_db.similarity_search(query, k=10)\n", + "print(docs[0].page_content) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model Inference Based on the Document" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we use Llama 2 Chat model supported by Xinference for inference task. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model uid: 333e1d68-3507-11ee-a0d6-fa163e74fa2d\n" + ] + } + ], + "source": [ + "!xinference launch --model-name \"llama-2-chat\" --model-format ggmlv3 --size-in-billions 70 -e \"http://127.0.0.1:55950\"" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.llms import Xinference\n", + "\n", + "xinference_llm = Xinference(\n", + " server_url=\"http://127.0.0.1:55950\",\n", + " model_uid = \"333e1d68-3507-11ee-a0d6-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we can query the LLM without using the document:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\nWhat did the president say about Ketanji Brown Jackson?\\nPresident Joe Biden called Judge Ketanji Brown Jackson a \"historic\" and \"inspiring\" nominee when he introduced her as his pick to replace retiring Supreme Court Justice Stephen Breyer. He highlighted her experience as a public defender and her commitment to justice and equality, saying that she would bring a unique perspective to the court.\\n\\nBiden also praised Jackson\\'s reputation for being a \"fair-minded\" and \"thoughtful\" jurist who is known for her ability to build'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xinference_llm(prompt=\"What did the president say about Ketanji Brown Jackson?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now query using the document to compare the result. We can create a memory object to track the chat history." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.memory import ConversationBufferMemory\n", + "memory = ConversationBufferMemory(memory_key=\"chat_history\", return_messages=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we create ConversationalRetrievalChain with chat model and the vectorstore." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chains import ConversationalRetrievalChain\n", + "\n", + "chain = ConversationalRetrievalChain.from_llm(\n", + " llm=xinference_llm,\n", + " retriever=vector_db.as_retriever(),\n", + " memory=memory)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can query information from the document. Instead of simply returning identical sentences from the document, the model generates responses by summarizing relevant content. Furthermore, it can relate a new query to the chat history, creating a chain of responses that build upon each other. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' According to the provided text, President Biden said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to serve on the United States Supreme Court 4 days ago, and that she is one of our nation’s top legal minds who will continue Justice Breyer’s legacy of excellence.'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"What did the president say about Ketanji Brown Jackson\"\n", + "result = chain({\"question\": query})\n", + "result[\"answer\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the LLM is capable of using the provided document to answer questions and summarize content. We can ask a few more questions:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' According to the given text, President Biden said that Ketanji Brown Jackson succeeded Justice Breyer on the Supreme Court.'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"Did he mention who she succeeded\"\n", + "result = chain({\"question\": query})\n", + "result[\"answer\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The LLM accurately recognizes that \"he\" refers to \"the president\", and \"she\" refers to \"Ketanji Brown Jackson\" mentioned in the previous query. " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' According to the text, the president views COVID-19 as a \"God-awful disease\" and wants to move forward in addressing it in a unified manner, rather than allowing it to continue being a partisan dividing line.'" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"Summarize the President's opinion on COVID-19\"\n", + "result = chain({\"question\": query})\n", + "result['answer']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see the impressive capabilities of the LLM, and LangChain's \"chaining\" feature also allows for more coherent and context-aware interactions with the model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Concurrent Embedding" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Xinference also supports creating embeddings concurrently. This will speed up the process of storing the document into the vector database. Here, we still use the 40B Falcon-instruct model we launched before." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import TextLoader\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "from langchain.embeddings import XinferenceEmbeddings\n", + "from langchain.vectorstores import Milvus\n", + "\n", + "import threading\n", + "\n", + "def process_chunk(chunk):\n", + " vector_db.add_documents(documents=chunk)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All chunks processed successfully.\n" + ] + } + ], + "source": [ + "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\")\n", + "documents = loader.load()\n", + "\n", + "text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=100, length_function=len)\n", + "docs = text_splitter.split_documents(documents)\n", + "\n", + "\n", + "xinference_embeddings = XinferenceEmbeddings(\n", + " server_url=\"http://127.0.0.1:55950\", \n", + " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", + ")\n", + "\n", + "num_chunks = 5\n", + "\n", + "chunks = [docs[i::num_chunks] for i in range(num_chunks)] \n", + "\n", + "vector_db = Milvus.from_documents(\n", + " chunks[0],\n", + " xinference_embeddings,\n", + " connection_args={\"host\": \"0.0.0.0\", \"port\": \"19530\"},\n", + ")\n", + "\n", + "threads = [threading.Thread(target=process_chunk, args=(chunk,)) for chunk in chunks[1:]]\n", + "\n", + "for thread in threads:\n", + " thread.start()\n", + "\n", + "for thread in threads:\n", + " thread.join()\n", + "\n", + "print(\"All chunks processed successfully.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "One of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n", + "\n", + "And I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.\n" + ] + } + ], + "source": [ + "query = \"what does the president say about Ketanji Brown Jackson\"\n", + "docs = vector_db.similarity_search(query, k=10)\n", + "print(docs[0].page_content) " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 36e26d3edc5a1900801c41c2f9f0a8d4606867ca Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 15:51:30 +0800 Subject: [PATCH 06/12] update --- assets/langchainQA.png | Bin 0 -> 387359 bytes examples/LangChain_QA.ipynb | 18 +++++++++++++----- xinference/core/model.py | 10 ++-------- 3 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 assets/langchainQA.png diff --git a/assets/langchainQA.png b/assets/langchainQA.png new file mode 100644 index 0000000000000000000000000000000000000000..890e654989417dfd5a6e83856fda5933189a99d9 GIT binary patch literal 387359 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

+oR!j@C2;N<~`Cr)QNW7J(ef8f)o;^%S#hHV? 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Ν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 z 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 AX#fBK literal 0 HcmV?d00001 diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb index 8e47fdb389..0ea472a959 100644 --- a/examples/LangChain_QA.ipynb +++ b/examples/LangChain_QA.ipynb @@ -14,6 +14,13 @@ "This demo walks through how to build an LLM-driven question-answering (QA) application with Xinference, Milvus, and LangChain. It uses Falcon 40B Instruct model for embedding creation and Llama 2 70B Chat model for inference. Both of the models are fully supported by Xinference." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![LangChain QA Visualization by Dreamsome](../assets/langchainQA.png)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -397,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -414,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -426,6 +433,8 @@ } ], "source": [ + "num_chunks = 10 # replace this with the number of the threads you want to execute in parallel + 1\n", + "\n", "loader = TextLoader(\"/home/nijiayi/inference/examples/state_of_the_union.txt\")\n", "documents = loader.load()\n", "\n", @@ -438,8 +447,6 @@ " model_uid = \"46bf725e-3a5e-11ee-9dcd-fa163e74fa2d\" # model_uid is the uid returned from launching the model\n", ")\n", "\n", - "num_chunks = 5\n", - "\n", "chunks = [docs[i::num_chunks] for i in range(num_chunks)] \n", "\n", "vector_db = Milvus.from_documents(\n", @@ -448,6 +455,7 @@ " connection_args={\"host\": \"0.0.0.0\", \"port\": \"19530\"},\n", ")\n", "\n", + "# add chunks of document to the vector_db in parallel\n", "threads = [threading.Thread(target=process_chunk, args=(chunk,)) for chunk in chunks[1:]]\n", "\n", "for thread in threads:\n", @@ -461,7 +469,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 12, "metadata": {}, "outputs": [ { diff --git a/xinference/core/model.py b/xinference/core/model.py index a3048449ec..56524dec8e 100644 --- a/xinference/core/model.py +++ b/xinference/core/model.py @@ -97,8 +97,7 @@ async def _wrap_generator(self, ret: Any): return ret async def generate(self, prompt: str, *args, **kwargs): - await self._lock.acquire() - try: + async with self._lock: if not hasattr(self._model, "generate"): raise AttributeError( f"Model {self._model.model_spec} is not for generate." @@ -107,20 +106,15 @@ async def generate(self, prompt: str, *args, **kwargs): return self._wrap_generator( getattr(self._model, "generate")(prompt, *args, **kwargs) ) - finally: - self._lock.release() async def chat(self, prompt: str, *args, **kwargs): - await self._lock.acquire() - try: + async with self._lock: if not hasattr(self._model, "chat"): raise AttributeError(f"Model {self._model.model_spec} is not for chat.") return self._wrap_generator( getattr(self._model, "chat")(prompt, *args, **kwargs) ) - finally: - self._lock.release() async def create_embedding(self, input: Union[str, List[str]], *args, **kwargs): if not hasattr(self._model, "create_embedding"): From 3e20b25203ecf614b1e05e63204a8a0b4b3dac03 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 15:52:17 +0800 Subject: [PATCH 07/12] small fix --- examples/LangChain_QA.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb index 0ea472a959..8c81b4a9cf 100644 --- a/examples/LangChain_QA.ipynb +++ b/examples/LangChain_QA.ipynb @@ -392,7 +392,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Concurrent Embedding" + "## Concurrent Embedding Creation" ] }, { From e62594621cf00ffad37042ed48b838fdc46a0401 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 16:00:26 +0800 Subject: [PATCH 08/12] fix --- xinference/core/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xinference/core/model.py b/xinference/core/model.py index 56524dec8e..06297a378b 100644 --- a/xinference/core/model.py +++ b/xinference/core/model.py @@ -55,7 +55,7 @@ async def __anext__(self) -> T: raise -class ModelActor(xo.Actor): +class ModelActor(xo.StatelessActor): @classmethod def gen_uid(cls, model: "LLM"): return f"{model.__class__}-model-actor" From 56a1dddaf0a25f884107ee56223939a4ea8fb027 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Mon, 14 Aug 2023 16:07:57 +0800 Subject: [PATCH 09/12] small fix --- examples/LangChain_QA.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/LangChain_QA.ipynb b/examples/LangChain_QA.ipynb index 8c81b4a9cf..09978f9c1f 100644 --- a/examples/LangChain_QA.ipynb +++ b/examples/LangChain_QA.ipynb @@ -399,7 +399,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Xinference also supports creating embeddings concurrently. This will speed up the process of storing the document into the vector database. Here, we still use the 40B Falcon-instruct model we launched before." + "Xinference also supports creating embeddings concurrently. This will speed up the process of storing the document into the vector database. To run the following code, first restart the milvus server. Here, we still use the 40B Falcon-instruct model we launched before." ] }, { From 45a84e3fb9a263f4ddb87ff44a214d72a6c2b458 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Tue, 22 Aug 2023 15:12:38 +0800 Subject: [PATCH 10/12] update --- xinference/core/model.py | 8 +++-- xinference/tests/test_concurrent_embedding.py | 31 ++++++++++++++++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/xinference/core/model.py b/xinference/core/model.py index 06297a378b..0674959ee6 100644 --- a/xinference/core/model.py +++ b/xinference/core/model.py @@ -103,19 +103,23 @@ async def generate(self, prompt: str, *args, **kwargs): f"Model {self._model.model_spec} is not for generate." ) - return self._wrap_generator( + result = await self._wrap_generator( getattr(self._model, "generate")(prompt, *args, **kwargs) ) + return result + async def chat(self, prompt: str, *args, **kwargs): async with self._lock: if not hasattr(self._model, "chat"): raise AttributeError(f"Model {self._model.model_spec} is not for chat.") - return self._wrap_generator( + result = await self._wrap_generator( getattr(self._model, "chat")(prompt, *args, **kwargs) ) + return result + async def create_embedding(self, input: Union[str, List[str]], *args, **kwargs): if not hasattr(self._model, "create_embedding"): raise AttributeError( diff --git a/xinference/tests/test_concurrent_embedding.py b/xinference/tests/test_concurrent_embedding.py index ebc61cd3b4..1310a03332 100644 --- a/xinference/tests/test_concurrent_embedding.py +++ b/xinference/tests/test_concurrent_embedding.py @@ -16,25 +16,38 @@ """ Simple test for multithreaded embedding creation """ - import threading import time from xinference.client import RESTfulClient +lock = threading.Lock() +concurrent_results = {} +nonconcurrent_results = {} + def embedding_thread(model, text): - model.create_embedding(text) + global concurrent_results + embedding = model.create_embedding(text) + with lock: + concurrent_results[text] = embedding def nonconcurrent_embedding(model, texts): + global nonconcurrent_results for text in texts: - model.create_embedding(text) + embedding = model.create_embedding(text) + nonconcurrent_results[text] = embedding def main(): - client = RESTfulClient("http://127.0.0.1:35819") - model_uid = client.launch_model(model_name="orca", quantization="q4_0") + client = RESTfulClient("http://127.0.0.1:60282") + model_uid = client.launch_model( + model_name="opt", + model_size_in_billions=1, + model_format="pytorch", + quantization="8-bit", + ) model = client.get_model(model_uid) texts = ["Once upon a time", "Hello, world!", "Hi"] @@ -58,6 +71,14 @@ def main(): end_time = time.time() print(f"Nonconcurrent Time: {end_time - start_time:.4f} seconds") + print("Comparing embeddings...") + + for text in texts: + if concurrent_results[text] == nonconcurrent_results[text]: + print(f"Embedding for '{text}' matches.") + else: + print(f"Embedding for '{text}' does not match.") + if __name__ == "__main__": main() From 675244a0adafd7b332c5f611b009d55afb316dd9 Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Tue, 22 Aug 2023 15:18:14 +0800 Subject: [PATCH 11/12] update --- xinference/tests/test_concurrent_embedding.py | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/xinference/tests/test_concurrent_embedding.py b/xinference/tests/test_concurrent_embedding.py index 1310a03332..971b3f0cd6 100644 --- a/xinference/tests/test_concurrent_embedding.py +++ b/xinference/tests/test_concurrent_embedding.py @@ -17,7 +17,6 @@ Simple test for multithreaded embedding creation """ import threading -import time from xinference.client import RESTfulClient @@ -40,8 +39,9 @@ def nonconcurrent_embedding(model, texts): nonconcurrent_results[text] = embedding -def main(): - client = RESTfulClient("http://127.0.0.1:60282") +def test_embedding(setup): + endpoint, _ = setup + client = RESTfulClient(endpoint) model_uid = client.launch_model( model_name="opt", model_size_in_billions=1, @@ -52,8 +52,6 @@ def main(): texts = ["Once upon a time", "Hello, world!", "Hi"] - start_time = time.time() - threads = [] for text in texts: thread = threading.Thread(target=embedding_thread, args=(model, text)) @@ -63,22 +61,9 @@ def main(): for thread in threads: thread.join() - end_time = time.time() - print(f"Concurrent Time: {end_time - start_time:.4f} seconds") - - start_time = time.time() nonconcurrent_embedding(model, texts) - end_time = time.time() - print(f"Nonconcurrent Time: {end_time - start_time:.4f} seconds") - - print("Comparing embeddings...") for text in texts: - if concurrent_results[text] == nonconcurrent_results[text]: - print(f"Embedding for '{text}' matches.") - else: - print(f"Embedding for '{text}' does not match.") - - -if __name__ == "__main__": - main() + assert ( + concurrent_results[text] == nonconcurrent_results[text] + ), f"Embedding for '{text}' does not match." From 04d11514db9f2a2bfe2d0db14e1b63d5afcdbf8a Mon Sep 17 00:00:00 2001 From: Jiayi Ni Date: Tue, 22 Aug 2023 15:44:01 +0800 Subject: [PATCH 12/12] test_concurrent_embedding is not for pytest --- xinference/tests/test_concurrent_embedding.py | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/xinference/tests/test_concurrent_embedding.py b/xinference/tests/test_concurrent_embedding.py index 971b3f0cd6..b86663987b 100644 --- a/xinference/tests/test_concurrent_embedding.py +++ b/xinference/tests/test_concurrent_embedding.py @@ -17,6 +17,7 @@ Simple test for multithreaded embedding creation """ import threading +import time from xinference.client import RESTfulClient @@ -39,9 +40,8 @@ def nonconcurrent_embedding(model, texts): nonconcurrent_results[text] = embedding -def test_embedding(setup): - endpoint, _ = setup - client = RESTfulClient(endpoint) +def main(): + client = RESTfulClient("http://127.0.0.1:20881") model_uid = client.launch_model( model_name="opt", model_size_in_billions=1, @@ -52,6 +52,8 @@ def test_embedding(setup): texts = ["Once upon a time", "Hello, world!", "Hi"] + start_time = time.time() + threads = [] for text in texts: thread = threading.Thread(target=embedding_thread, args=(model, text)) @@ -61,9 +63,22 @@ def test_embedding(setup): for thread in threads: thread.join() + end_time = time.time() + print(f"Concurrent Time: {end_time - start_time:.4f} seconds") + + start_time = time.time() nonconcurrent_embedding(model, texts) + end_time = time.time() + print(f"Nonconcurrent Time: {end_time - start_time:.4f} seconds") + + print("Comparing embeddings...") for text in texts: - assert ( - concurrent_results[text] == nonconcurrent_results[text] - ), f"Embedding for '{text}' does not match." + if concurrent_results[text] == nonconcurrent_results[text]: + print(f"Embedding for '{text}' matches.") + else: + print(f"Embedding for '{text}' does not match.") + + +if __name__ == "__main__": + main()