From f3bd81839766ca49f46ae5bb84d684398afc76ed Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 23 Oct 2023 11:10:45 +0100 Subject: [PATCH] add additional config --- .../Qdrant_Existing/Qdrant_Existing.ts | 46 +++++++++++++++++-- .../Qdrant_Upsert/Qdrant_Upsert.ts | 42 ++++++++++++++++- 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/packages/components/nodes/vectorstores/Qdrant_Existing/Qdrant_Existing.ts b/packages/components/nodes/vectorstores/Qdrant_Existing/Qdrant_Existing.ts index 58ef6df5..c16e8f54 100644 --- a/packages/components/nodes/vectorstores/Qdrant_Existing/Qdrant_Existing.ts +++ b/packages/components/nodes/vectorstores/Qdrant_Existing/Qdrant_Existing.ts @@ -23,7 +23,7 @@ class Qdrant_Existing_VectorStores implements INode { constructor() { this.label = 'Qdrant Load Existing Index' this.name = 'qdrantExistingIndex' - this.version = 1.0 + this.version = 2.0 this.type = 'Qdrant' this.icon = 'qdrant.png' this.category = 'Vector Stores' @@ -55,8 +55,39 @@ class Qdrant_Existing_VectorStores implements INode { type: 'string' }, { - label: 'Qdrant Collection Cofiguration', + label: 'Vector Dimension', + name: 'qdrantVectorDimension', + type: 'number', + default: 1536, + additionalParams: true + }, + { + label: 'Similarity', + name: 'qdrantSimilarity', + description: 'Similarity measure used in Qdrant.', + type: 'options', + default: 'Cosine', + options: [ + { + label: 'Cosine', + name: 'Cosine' + }, + { + label: 'Euclid', + name: 'Euclid' + }, + { + label: 'Dot', + name: 'Dot' + } + ], + additionalParams: true + }, + { + label: 'Additional Collection Cofiguration', name: 'qdrantCollectionConfiguration', + description: + 'Refer to collection docs for more reference', type: 'json', optional: true, additionalParams: true @@ -98,6 +129,8 @@ class Qdrant_Existing_VectorStores implements INode { const collectionName = nodeData.inputs?.qdrantCollection as string let qdrantCollectionConfiguration = nodeData.inputs?.qdrantCollectionConfiguration const embeddings = nodeData.inputs?.embeddings as Embeddings + const qdrantSimilarity = nodeData.inputs?.qdrantSimilarity + const qdrantVectorDimension = nodeData.inputs?.qdrantVectorDimension const output = nodeData.outputs?.output as string const topK = nodeData.inputs?.topK as string let queryFilter = nodeData.inputs?.queryFilter @@ -126,7 +159,14 @@ class Qdrant_Existing_VectorStores implements INode { typeof qdrantCollectionConfiguration === 'object' ? qdrantCollectionConfiguration : JSON.parse(qdrantCollectionConfiguration) - dbConfig.collectionConfig = qdrantCollectionConfiguration + dbConfig.collectionConfig = { + ...qdrantCollectionConfiguration, + vectors: { + ...qdrantCollectionConfiguration.vectors, + size: qdrantVectorDimension ? parseInt(qdrantVectorDimension, 10) : 1536, + distance: qdrantSimilarity ?? 'Cosine' + } + } } if (queryFilter) { diff --git a/packages/components/nodes/vectorstores/Qdrant_Upsert/Qdrant_Upsert.ts b/packages/components/nodes/vectorstores/Qdrant_Upsert/Qdrant_Upsert.ts index 6f3773ff..407a8d22 100644 --- a/packages/components/nodes/vectorstores/Qdrant_Upsert/Qdrant_Upsert.ts +++ b/packages/components/nodes/vectorstores/Qdrant_Upsert/Qdrant_Upsert.ts @@ -25,7 +25,7 @@ class QdrantUpsert_VectorStores implements INode { constructor() { this.label = 'Qdrant Upsert Document' this.name = 'qdrantUpsert' - this.version = 1.0 + this.version = 2.0 this.type = 'Qdrant' this.icon = 'qdrant.png' this.category = 'Vector Stores' @@ -62,6 +62,35 @@ class QdrantUpsert_VectorStores implements INode { name: 'qdrantCollection', type: 'string' }, + { + label: 'Vector Dimension', + name: 'qdrantVectorDimension', + type: 'number', + default: 1536, + additionalParams: true + }, + { + label: 'Similarity', + name: 'qdrantSimilarity', + description: 'Similarity measure used in Qdrant.', + type: 'options', + default: 'Cosine', + options: [ + { + label: 'Cosine', + name: 'Cosine' + }, + { + label: 'Euclid', + name: 'Euclid' + }, + { + label: 'Dot', + name: 'Dot' + } + ], + additionalParams: true + }, { label: 'Top K', name: 'topK', @@ -99,6 +128,9 @@ class QdrantUpsert_VectorStores implements INode { const collectionName = nodeData.inputs?.qdrantCollection as string const docs = nodeData.inputs?.document as Document[] const embeddings = nodeData.inputs?.embeddings as Embeddings + const qdrantSimilarity = nodeData.inputs?.qdrantSimilarity + const qdrantVectorDimension = nodeData.inputs?.qdrantVectorDimension + const output = nodeData.outputs?.output as string const topK = nodeData.inputs?.topK as string const k = topK ? parseFloat(topK) : 4 @@ -121,7 +153,13 @@ class QdrantUpsert_VectorStores implements INode { const dbConfig: QdrantLibArgs = { client, url: qdrantServerUrl, - collectionName + collectionName, + collectionConfig: { + vectors: { + size: qdrantVectorDimension ? parseInt(qdrantVectorDimension, 10) : 1536, + distance: qdrantSimilarity ?? 'Cosine' + } + } } const retrieverConfig: RetrieverConfig = {