Feature/Add content and metadata key for qdrant (#2997)

add content and metadata key for qdrant
This commit is contained in:
Henry Heng
2024-08-11 21:00:48 +01:00
committed by GitHub
parent d4b41689da
commit 68769f4bbc
@@ -32,7 +32,7 @@ class Qdrant_VectorStores implements INode {
constructor() { constructor() {
this.label = 'Qdrant' this.label = 'Qdrant'
this.name = 'qdrant' this.name = 'qdrant'
this.version = 3.0 this.version = 4.0
this.type = 'Qdrant' this.type = 'Qdrant'
this.icon = 'qdrant.png' this.icon = 'qdrant.png'
this.category = 'Vector Stores' this.category = 'Vector Stores'
@@ -85,6 +85,24 @@ class Qdrant_VectorStores implements INode {
default: 1536, default: 1536,
additionalParams: true additionalParams: true
}, },
{
label: 'Content Key',
name: 'contentPayloadKey',
description: 'The key for storing text. Default to `content`',
type: 'string',
default: 'content',
optional: true,
additionalParams: true
},
{
label: 'Metadata Key',
name: 'metadataPayloadKey',
description: 'The key for storing metadata. Default to `metadata`',
type: 'string',
default: 'metadata',
optional: true,
additionalParams: true
},
{ {
label: 'Upsert Batch Size', label: 'Upsert Batch Size',
name: 'batchSize', name: 'batchSize',
@@ -168,6 +186,8 @@ class Qdrant_VectorStores implements INode {
const qdrantVectorDimension = nodeData.inputs?.qdrantVectorDimension const qdrantVectorDimension = nodeData.inputs?.qdrantVectorDimension
const recordManager = nodeData.inputs?.recordManager const recordManager = nodeData.inputs?.recordManager
const _batchSize = nodeData.inputs?.batchSize const _batchSize = nodeData.inputs?.batchSize
const contentPayloadKey = nodeData.inputs?.contentPayloadKey || 'content'
const metadataPayloadKey = nodeData.inputs?.metadataPayloadKey || 'metadata'
const credentialData = await getCredentialData(nodeData.credential ?? '', options) const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const qdrantApiKey = getCredentialParam('qdrantApiKey', credentialData, nodeData) const qdrantApiKey = getCredentialParam('qdrantApiKey', credentialData, nodeData)
@@ -197,7 +217,9 @@ class Qdrant_VectorStores implements INode {
size: qdrantVectorDimension ? parseInt(qdrantVectorDimension, 10) : 1536, size: qdrantVectorDimension ? parseInt(qdrantVectorDimension, 10) : 1536,
distance: qdrantSimilarity ?? 'Cosine' distance: qdrantSimilarity ?? 'Cosine'
} }
} },
contentPayloadKey,
metadataPayloadKey
} }
try { try {
@@ -220,8 +242,8 @@ class Qdrant_VectorStores implements INode {
id: documentOptions?.ids?.length ? documentOptions?.ids[idx] : uuid(), id: documentOptions?.ids?.length ? documentOptions?.ids[idx] : uuid(),
vector: embedding, vector: embedding,
payload: { payload: {
content: documents[idx].pageContent, [contentPayloadKey]: documents[idx].pageContent,
metadata: documents[idx].metadata, [metadataPayloadKey]: documents[idx].metadata,
customPayload: documentOptions?.customPayload?.length ? documentOptions?.customPayload[idx] : undefined customPayload: documentOptions?.customPayload?.length ? documentOptions?.customPayload[idx] : undefined
} }
})) }))
@@ -367,6 +389,8 @@ class Qdrant_VectorStores implements INode {
const output = nodeData.outputs?.output as string const output = nodeData.outputs?.output as string
const topK = nodeData.inputs?.topK as string const topK = nodeData.inputs?.topK as string
let queryFilter = nodeData.inputs?.qdrantFilter let queryFilter = nodeData.inputs?.qdrantFilter
const contentPayloadKey = nodeData.inputs?.contentPayloadKey || 'content'
const metadataPayloadKey = nodeData.inputs?.metadataPayloadKey || 'metadata'
const k = topK ? parseFloat(topK) : 4 const k = topK ? parseFloat(topK) : 4
@@ -383,7 +407,9 @@ class Qdrant_VectorStores implements INode {
const dbConfig: QdrantLibArgs = { const dbConfig: QdrantLibArgs = {
client, client,
collectionName collectionName,
contentPayloadKey,
metadataPayloadKey
} }
const retrieverConfig: RetrieverConfig = { const retrieverConfig: RetrieverConfig = {