Skip to content

Commit b662dd7

Browse files
authored
Feature/Add Text Key to Pinecone (#2681)
* add source tag to pinecone * update pinecone * add text key to pinecone * update pinecone version, and singleton
1 parent 1849637 commit b662dd7

File tree

3 files changed

+61
-47
lines changed

3 files changed

+61
-47
lines changed

packages/components/nodes/vectorstores/Pinecone/Pinecone.ts

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { flatten } from 'lodash'
2-
import { Pinecone } from '@pinecone-database/pinecone'
1+
import { flatten, isEqual } from 'lodash'
2+
import { Pinecone, PineconeConfiguration } from '@pinecone-database/pinecone'
33
import { PineconeStoreParams, PineconeStore } from '@langchain/pinecone'
44
import { Embeddings } from '@langchain/core/embeddings'
55
import { Document } from '@langchain/core/documents'
@@ -8,6 +8,23 @@ import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../
88
import { addMMRInputParams, resolveVectorStoreOrRetriever } from '../VectorStoreUtils'
99
import { index } from '../../../src/indexing'
1010

11+
let pineconeClientSingleton: Pinecone
12+
let pineconeClientOption: PineconeConfiguration
13+
14+
const getPineconeClient = (option: PineconeConfiguration) => {
15+
if (!pineconeClientSingleton) {
16+
// if client doesn't exists
17+
pineconeClientSingleton = new Pinecone(option)
18+
pineconeClientOption = option
19+
return pineconeClientSingleton
20+
} else if (pineconeClientSingleton && !isEqual(option, pineconeClientOption)) {
21+
// if client exists but option changed
22+
pineconeClientSingleton = new Pinecone(option)
23+
return pineconeClientSingleton
24+
}
25+
return pineconeClientSingleton
26+
}
27+
1128
class Pinecone_VectorStores implements INode {
1229
label: string
1330
name: string
@@ -25,7 +42,7 @@ class Pinecone_VectorStores implements INode {
2542
constructor() {
2643
this.label = 'Pinecone'
2744
this.name = 'pinecone'
28-
this.version = 3.0
45+
this.version = 4.0
2946
this.type = 'Pinecone'
3047
this.icon = 'pinecone.svg'
3148
this.category = 'Vector Stores'
@@ -71,6 +88,15 @@ class Pinecone_VectorStores implements INode {
7188
additionalParams: true,
7289
optional: true
7390
},
91+
{
92+
label: 'Pinecone Text Key',
93+
name: 'pineconeTextKey',
94+
description: 'The key in the metadata for storing text. Default to `text`',
95+
type: 'string',
96+
placeholder: 'text',
97+
additionalParams: true,
98+
optional: true
99+
},
74100
{
75101
label: 'Pinecone Metadata Filter',
76102
name: 'pineconeMetadataFilter',
@@ -111,13 +137,12 @@ class Pinecone_VectorStores implements INode {
111137
const docs = nodeData.inputs?.document as Document[]
112138
const embeddings = nodeData.inputs?.embeddings as Embeddings
113139
const recordManager = nodeData.inputs?.recordManager
140+
const pineconeTextKey = nodeData.inputs?.pineconeTextKey as string
114141

115142
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
116143
const pineconeApiKey = getCredentialParam('pineconeApiKey', credentialData, nodeData)
117144

118-
const client = new Pinecone({
119-
apiKey: pineconeApiKey
120-
})
145+
const client = getPineconeClient({ apiKey: pineconeApiKey })
121146

122147
const pineconeIndex = client.Index(_index)
123148

@@ -130,7 +155,8 @@ class Pinecone_VectorStores implements INode {
130155
}
131156

132157
const obj: PineconeStoreParams = {
133-
pineconeIndex
158+
pineconeIndex,
159+
textKey: pineconeTextKey ?? 'text'
134160
}
135161

136162
if (pineconeNamespace) obj.namespace = pineconeNamespace
@@ -166,20 +192,18 @@ class Pinecone_VectorStores implements INode {
166192
const pineconeNamespace = nodeData.inputs?.pineconeNamespace as string
167193
const pineconeMetadataFilter = nodeData.inputs?.pineconeMetadataFilter
168194
const embeddings = nodeData.inputs?.embeddings as Embeddings
195+
const pineconeTextKey = nodeData.inputs?.pineconeTextKey as string
169196

170197
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
171198
const pineconeApiKey = getCredentialParam('pineconeApiKey', credentialData, nodeData)
172199

173-
const client = new Pinecone({
174-
apiKey: pineconeApiKey
175-
})
176-
177-
await client.describeIndex(index)
200+
const client = getPineconeClient({ apiKey: pineconeApiKey })
178201

179202
const pineconeIndex = client.Index(index)
180203

181204
const obj: PineconeStoreParams = {
182-
pineconeIndex
205+
pineconeIndex,
206+
textKey: pineconeTextKey ?? 'text'
183207
}
184208

185209
if (pineconeNamespace) obj.namespace = pineconeNamespace

packages/components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"@mistralai/mistralai": "0.1.3",
5252
"@notionhq/client": "^2.2.8",
5353
"@opensearch-project/opensearch": "^1.2.0",
54-
"@pinecone-database/pinecone": "2.2.0",
54+
"@pinecone-database/pinecone": "2.2.2",
5555
"@qdrant/js-client-rest": "^1.2.2",
5656
"@supabase/supabase-js": "^2.29.0",
5757
"@types/js-yaml": "^4.0.5",

0 commit comments

Comments
 (0)