From 75360df34db612d82d66b81c7289887961ff28e7 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 24 May 2023 18:31:30 +0100 Subject: [PATCH] add milvus --- .../Milvus_Existing/Milvus_Existing.ts | 132 ++++++++++++++++ .../vectorstores/Milvus_Existing/milvus.jpg | Bin 0 -> 9320 bytes .../Milvus_Upsert/Milvus_Upsert.ts | 148 ++++++++++++++++++ .../vectorstores/Milvus_Upsert/milvus.jpg | Bin 0 -> 9320 bytes packages/components/package.json | 1 + 5 files changed, 281 insertions(+) create mode 100644 packages/components/nodes/vectorstores/Milvus_Existing/Milvus_Existing.ts create mode 100644 packages/components/nodes/vectorstores/Milvus_Existing/milvus.jpg create mode 100644 packages/components/nodes/vectorstores/Milvus_Upsert/Milvus_Upsert.ts create mode 100644 packages/components/nodes/vectorstores/Milvus_Upsert/milvus.jpg diff --git a/packages/components/nodes/vectorstores/Milvus_Existing/Milvus_Existing.ts b/packages/components/nodes/vectorstores/Milvus_Existing/Milvus_Existing.ts new file mode 100644 index 000000000..ebfd566c7 --- /dev/null +++ b/packages/components/nodes/vectorstores/Milvus_Existing/Milvus_Existing.ts @@ -0,0 +1,132 @@ +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' +import { Milvus, MilvusLibArgs } from 'langchain/vectorstores/milvus' +import { Embeddings } from 'langchain/embeddings/base' +import { getBaseClasses } from '../../../src/utils' + +class Milvus_Existing_VectorStores implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + outputs: INodeOutputsValue[] + + constructor() { + this.label = 'Milvus Load Existing Index' + this.name = 'milvusExistingIndex' + this.type = 'Milvus' + this.icon = 'milvus.jpg' + this.category = 'Vector Stores' + this.description = 'Load existing index from Milvus (i.e: Document has been upserted)' + this.baseClasses = [this.type, 'VectorStoreRetriever', 'BaseRetriever'] + this.inputs = [ + { + label: 'Embeddings', + name: 'embeddings', + type: 'Embeddings' + }, + { + label: 'Collection Name', + name: 'milvusCollectionName', + type: 'string', + placeholder: 'my-milvus-collection' + }, + { + label: 'Milvus URL', + name: 'milvusURL', + type: 'string', + placeholder: 'http://localhost:19530' + }, + { + label: 'Primary Field', + name: 'milvusPrimaryField', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'Vector Field', + name: 'milvusVectorField', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'Vector Text Field', + name: 'milvusTextField', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'SSL', + name: 'milvusSSL', + type: 'boolean', + optional: true, + additionalParams: true + }, + { + label: 'Username', + name: 'milvusUsername', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'Password', + name: 'milvusPassword', + type: 'password', + optional: true, + additionalParams: true + } + ] + this.outputs = [ + { + label: 'Milvus Retriever', + name: 'retriever', + baseClasses: this.baseClasses + }, + { + label: 'Milvus Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(Milvus)] + } + ] + } + + async init(nodeData: INodeData): Promise { + const collectionName = nodeData.inputs?.milvusCollectionName as string + const embeddings = nodeData.inputs?.embeddings as Embeddings + const milvusURL = nodeData.inputs?.milvusURL as string + const milvusPrimaryField = nodeData.inputs?.milvusPrimaryField as string + const milvusVectorField = nodeData.inputs?.milvusVectorField as string + const milvusTextField = nodeData.inputs?.milvusTextField as string + const milvusSSL = nodeData.inputs?.milvusSSL as boolean + const milvusUsername = nodeData.inputs?.milvusUsername as string + const milvusPassword = nodeData.inputs?.milvusPassword as string + const output = nodeData.outputs?.output as string + + const obj: MilvusLibArgs = { collectionName, url: milvusURL } + if (milvusPrimaryField) obj.primaryField = milvusPrimaryField + if (milvusVectorField) obj.vectorField = milvusVectorField + if (milvusTextField) obj.textField = milvusTextField + if (milvusSSL) obj.ssl = milvusSSL + if (milvusUsername) obj.username = milvusUsername + if (milvusPassword) obj.password = milvusPassword + + const vectorStore = await Milvus.fromExistingCollection(embeddings, obj) + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever() + return retriever + } else if (output === 'vectorStore') { + return vectorStore + } + return vectorStore + } +} + +module.exports = { nodeClass: Milvus_Existing_VectorStores } diff --git a/packages/components/nodes/vectorstores/Milvus_Existing/milvus.jpg b/packages/components/nodes/vectorstores/Milvus_Existing/milvus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20b6c3499cbcf1e451afa25cfc60887e38ab49a8 GIT binary patch literal 9320 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 MV<_L`Jz!`ChE9Cxxxqn>pp7! zzD3u&z~sL9x+2qs5{=I7n}m)W)c_3A0e8G5<%RHn!j|kIQCq>MB=0UI9!y{MxpC;Z z%2|wfu6g5#h+@Ega4nWd2B{J`@+X}Q@y`$q;2lQ;EKFWfM8hb1P=YROJ$-YETR4Np z;I>@Ru$0qopabsa!OvbSKcg=m(Ew9GOD+bd7oK*^932-BW4}5&#OnI>#j50r-cSce zH6%$oNSXk&&PE!OR(m)}j+8agz+wbKMFT`F6dfr>mLy~u@hqx_)_N=5Ia&p%@1XYb zCrBc*Ss!B)TYE$?%7>2m$YA2zio|WSg#!%pUSN0KA=e7k$Wy*Pe`Blaf}tK1KhsBg z7)Iane)*Kz(GG#B%p#pp@o0Q$Zd9qXN`S6w+v z9Ywzu=j_+1;9ue3_wxK#DhPgMy6aT1lN(tzx-YH$uS^j9%+V%>#>r1DBLZx+^3azK zEGLCJ95tT4<#(v3=vVB1-XV#o9H%?qQ6R2VRC-0+zLaF5s~;>f;iNd0b240@hP{7r z@I615ect^0No6AJ!%$6J+3m=gB4!n5yzDP0Q>BJ#u16z^1A6b zGSiN7=slkjos-x`RA&lb0d8Fh+5p{HO+WZ#HFRBOU*H#K6}1SzMDJX0{zjnB z7Zu@$Sj2$><@EwxTOoT|T@ecVMOBR1ql$2D9m{A8Ci@zzS~pTdv{)Mc@Odb~xGRlU z)S&1?&s?H2&)x`EAEC;>wRuPW()Nf71=1kKD_jwhVPa8S)T4*?T)+8wSmvHxcYzSi z6zLv%x9rV&1%?Qp*bB4?(H@GlEC=hv2C4OxZD4hZru&eM^;vn@%P&3Db0o-BWFhluE0_7qe z-16_aJY|Zs-NKf^B8E5q7)c+Q^9r8}YdJVr@Nsy22aaiiRnlr%#s)7Pso@VdKD=2) zT?f9Aqj5)#uz6>RrRRb|gt-hT)NX5`k(%2N&OaJn;v!(FcLVU>fj(4S5%8GIA8X`r zgp3RWT0MJj75;8{KD51Xo?F_!N=y%+V{oXfWW}?VGx?fo>@k%hGy9}p75BwTqK=M^ z3VMUmGh%rwZbYX}O(o(|gWNR6@Wh;_WP$@`gZx39q+n<;>`oLbV=DR8hzbhKtCWyA zWbB^BbZIx`e2Xq1uH2sQp}HopLB`1LOnJ)lqP|^ zB;^d{fsW5HHzmS0e^L#rWQ7=~j;~#~u(Ef)EOPRmNmR)|Mz-igyse$U>8BrC;D`h) zcEx$i%O8=}LOS12_pOX*6Obu!bqwJuAP%+3u8plAl8zIO544VZ>mg39H1dobYJqU* z$`y8Il7^ZLRP0R1-6*Tg9UiX>!p)UWucBHaOiTIh__lOp@pKtm8y&jjOPeSoEpJ8D zfX017QnG?H_awY&X5B}bVBsjjUuTaS3sd07IL#a zdBR2NCv8lC%1`)4*;oXth`Ur#d?hT@T`aagCx?MM#_X}VZ_g{OQtH>N@f_@}0v(@d z2VS$Ll&mGB{g`;i-6gjtEsbhNsm`WQfomzwrd1kNy50bI60e;+ynp$jGKZ&k?T>*N z3{UME(*@{rHHw6%c2`Zb3D|Ujbw%uicg8D68sPzXPsdH+$zdX*ZnjPrVl+U(#nBMH&7*si;Tuh}2+k@yOl7h{=2 zf$7xKn>TcWnN%~>7Es#Kyz&#GB6ecy=%h^u*Uph5A0maI;IAY$bRmyj+4WZYvhYU( z(t+s4ulL&c&)!_#7T6&Zc5XOKD2da6EtRENo1iGr@mCbjH#HT}N; Dh=sww literal 0 HcmV?d00001 diff --git a/packages/components/nodes/vectorstores/Milvus_Upsert/Milvus_Upsert.ts b/packages/components/nodes/vectorstores/Milvus_Upsert/Milvus_Upsert.ts new file mode 100644 index 000000000..373327b50 --- /dev/null +++ b/packages/components/nodes/vectorstores/Milvus_Upsert/Milvus_Upsert.ts @@ -0,0 +1,148 @@ +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' +import { Milvus, MilvusLibArgs } from 'langchain/vectorstores/milvus' +import { Embeddings } from 'langchain/embeddings/base' +import { getBaseClasses } from '../../../src/utils' +import { Document } from 'langchain/document' + +class Milvus_Upsert_VectorStores implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + outputs: INodeOutputsValue[] + + constructor() { + this.label = 'Milvus Upsert Document' + this.name = 'milvusUpsert' + this.type = 'Milvus' + this.icon = 'milvus.jpg' + this.category = 'Vector Stores' + this.description = 'Upsert documents to Milvus' + this.baseClasses = [this.type, 'VectorStoreRetriever', 'BaseRetriever'] + this.inputs = [ + { + label: 'Document', + name: 'document', + type: 'Document', + list: true + }, + { + label: 'Embeddings', + name: 'embeddings', + type: 'Embeddings' + }, + { + label: 'Collection Name', + name: 'milvusCollectionName', + type: 'string', + placeholder: 'my_milvus_collection' + }, + { + label: 'Milvus URL', + name: 'milvusURL', + type: 'string', + placeholder: 'http://localhost:19530' + }, + { + label: 'Primary Field', + name: 'milvusPrimaryField', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'Vector Field', + name: 'milvusVectorField', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'Vector Text Field', + name: 'milvusTextField', + type: 'string', + optional: true, + additionalParams: true + }, + { + label: 'SSL', + name: 'milvusSSL', + type: 'boolean', + optional: true, + additionalParams: true + }, + { + label: 'Username', + name: 'milvusUsername', + type: 'string', + placeholder: 'db_admin', + optional: true, + additionalParams: true + }, + { + label: 'Password', + name: 'milvusPassword', + type: 'password', + optional: true, + additionalParams: true + } + ] + this.outputs = [ + { + label: 'Milvus Retriever', + name: 'retriever', + baseClasses: this.baseClasses + }, + { + label: 'Milvus Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(Milvus)] + } + ] + } + + async init(nodeData: INodeData): Promise { + const collectionName = nodeData.inputs?.milvusCollectionName as string + const embeddings = nodeData.inputs?.embeddings as Embeddings + const milvusURL = nodeData.inputs?.milvusURL as string + const milvusPrimaryField = nodeData.inputs?.milvusPrimaryField as string + const milvusVectorField = nodeData.inputs?.milvusVectorField as string + const milvusTextField = nodeData.inputs?.milvusTextField as string + const milvusSSL = nodeData.inputs?.milvusSSL as boolean + const milvusUsername = nodeData.inputs?.milvusUsername as string + const milvusPassword = nodeData.inputs?.milvusPassword as string + const output = nodeData.outputs?.output as string + const docs = nodeData.inputs?.document as Document[] + + const flattenDocs = docs && docs.length ? docs.flat() : [] + const finalDocs = [] + for (let i = 0; i < flattenDocs.length; i += 1) { + finalDocs.push(new Document(flattenDocs[i])) + } + + const obj: MilvusLibArgs = { collectionName, url: milvusURL } + if (milvusPrimaryField) obj.primaryField = milvusPrimaryField + if (milvusVectorField) obj.vectorField = milvusVectorField + if (milvusTextField) obj.textField = milvusTextField + if (milvusSSL) obj.ssl = milvusSSL + if (milvusUsername) obj.username = milvusUsername + if (milvusPassword) obj.password = milvusPassword + + const vectorStore = await Milvus.fromDocuments(finalDocs, embeddings, obj) + console.log('vectorStore = ', vectorStore) + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever() + return retriever + } else if (output === 'vectorStore') { + return vectorStore + } + return vectorStore + } +} + +module.exports = { nodeClass: Milvus_Upsert_VectorStores } diff --git a/packages/components/nodes/vectorstores/Milvus_Upsert/milvus.jpg b/packages/components/nodes/vectorstores/Milvus_Upsert/milvus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20b6c3499cbcf1e451afa25cfc60887e38ab49a8 GIT binary patch literal 9320 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 MV<_L`Jz!`ChE9Cxxxqn>pp7! zzD3u&z~sL9x+2qs5{=I7n}m)W)c_3A0e8G5<%RHn!j|kIQCq>MB=0UI9!y{MxpC;Z z%2|wfu6g5#h+@Ega4nWd2B{J`@+X}Q@y`$q;2lQ;EKFWfM8hb1P=YROJ$-YETR4Np z;I>@Ru$0qopabsa!OvbSKcg=m(Ew9GOD+bd7oK*^932-BW4}5&#OnI>#j50r-cSce zH6%$oNSXk&&PE!OR(m)}j+8agz+wbKMFT`F6dfr>mLy~u@hqx_)_N=5Ia&p%@1XYb zCrBc*Ss!B)TYE$?%7>2m$YA2zio|WSg#!%pUSN0KA=e7k$Wy*Pe`Blaf}tK1KhsBg z7)Iane)*Kz(GG#B%p#pp@o0Q$Zd9qXN`S6w+v z9Ywzu=j_+1;9ue3_wxK#DhPgMy6aT1lN(tzx-YH$uS^j9%+V%>#>r1DBLZx+^3azK zEGLCJ95tT4<#(v3=vVB1-XV#o9H%?qQ6R2VRC-0+zLaF5s~;>f;iNd0b240@hP{7r z@I615ect^0No6AJ!%$6J+3m=gB4!n5yzDP0Q>BJ#u16z^1A6b zGSiN7=slkjos-x`RA&lb0d8Fh+5p{HO+WZ#HFRBOU*H#K6}1SzMDJX0{zjnB z7Zu@$Sj2$><@EwxTOoT|T@ecVMOBR1ql$2D9m{A8Ci@zzS~pTdv{)Mc@Odb~xGRlU z)S&1?&s?H2&)x`EAEC;>wRuPW()Nf71=1kKD_jwhVPa8S)T4*?T)+8wSmvHxcYzSi z6zLv%x9rV&1%?Qp*bB4?(H@GlEC=hv2C4OxZD4hZru&eM^;vn@%P&3Db0o-BWFhluE0_7qe z-16_aJY|Zs-NKf^B8E5q7)c+Q^9r8}YdJVr@Nsy22aaiiRnlr%#s)7Pso@VdKD=2) zT?f9Aqj5)#uz6>RrRRb|gt-hT)NX5`k(%2N&OaJn;v!(FcLVU>fj(4S5%8GIA8X`r zgp3RWT0MJj75;8{KD51Xo?F_!N=y%+V{oXfWW}?VGx?fo>@k%hGy9}p75BwTqK=M^ z3VMUmGh%rwZbYX}O(o(|gWNR6@Wh;_WP$@`gZx39q+n<;>`oLbV=DR8hzbhKtCWyA zWbB^BbZIx`e2Xq1uH2sQp}HopLB`1LOnJ)lqP|^ zB;^d{fsW5HHzmS0e^L#rWQ7=~j;~#~u(Ef)EOPRmNmR)|Mz-igyse$U>8BrC;D`h) zcEx$i%O8=}LOS12_pOX*6Obu!bqwJuAP%+3u8plAl8zIO544VZ>mg39H1dobYJqU* z$`y8Il7^ZLRP0R1-6*Tg9UiX>!p)UWucBHaOiTIh__lOp@pKtm8y&jjOPeSoEpJ8D zfX017QnG?H_awY&X5B}bVBsjjUuTaS3sd07IL#a zdBR2NCv8lC%1`)4*;oXth`Ur#d?hT@T`aagCx?MM#_X}VZ_g{OQtH>N@f_@}0v(@d z2VS$Ll&mGB{g`;i-6gjtEsbhNsm`WQfomzwrd1kNy50bI60e;+ynp$jGKZ&k?T>*N z3{UME(*@{rHHw6%c2`Zb3D|Ujbw%uicg8D68sPzXPsdH+$zdX*ZnjPrVl+U(#nBMH&7*si;Tuh}2+k@yOl7h{=2 zf$7xKn>TcWnN%~>7Es#Kyz&#GB6ecy=%h^u*Uph5A0maI;IAY$bRmyj+4WZYvhYU( z(t+s4ulL&c&)!_#7T6&Zc5XOKD2da6EtRENo1iGr@mCbjH#HT}N; Dh=sww literal 0 HcmV?d00001 diff --git a/packages/components/package.json b/packages/components/package.json index 9c77db8e3..bbce5cb94 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -20,6 +20,7 @@ "@huggingface/inference": "1", "@pinecone-database/pinecone": "^0.0.12", "@supabase/supabase-js": "^2.21.0", + "@zilliz/milvus2-sdk-node": "^2.2.10", "axios": "^0.27.2", "cheerio": "^1.0.0-rc.12", "chromadb": "^1.3.1",