Skip to content

Commit eebb393

Browse files
authored
Migrate Pinecone to class (#4726)
migrate pinecone to class
1 parent 7ee2146 commit eebb393

File tree

2 files changed

+48
-32
lines changed

2 files changed

+48
-32
lines changed

server/utils/helpers/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ function getVectorDbClass(getExactly = null) {
8787
switch (vectorSelection) {
8888
case "pinecone":
8989
const { Pinecone } = require("../vectorDbProviders/pinecone");
90-
return Pinecone;
90+
return new Pinecone();
9191
case "chroma":
9292
const { Chroma } = require("../vectorDbProviders/chroma");
9393
return Chroma;

server/utils/vectorDbProviders/pinecone/index.js

Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ const { v4: uuidv4 } = require("uuid");
66
const { toChunks, getEmbeddingEngineSelection } = require("../../helpers");
77
const { sourceIdentifier } = require("../../chats");
88

9-
const PineconeDB = {
10-
name: "Pinecone",
11-
connect: async function () {
9+
class PineconeDB {
10+
constructor() {
11+
this.name = "Pinecone";
12+
}
13+
14+
async connect() {
1215
if (process.env.VECTOR_DB !== "pinecone")
1316
throw new Error("Pinecone::Invalid ENV settings");
1417

@@ -21,22 +24,25 @@ const PineconeDB = {
2124

2225
if (!status.ready) throw new Error("Pinecone::Index not ready.");
2326
return { client, pineconeIndex, indexName: process.env.PINECONE_INDEX };
24-
},
25-
totalVectors: async function () {
27+
}
28+
29+
async totalVectors() {
2630
const { pineconeIndex } = await this.connect();
2731
const { namespaces } = await pineconeIndex.describeIndexStats();
2832

2933
return Object.values(namespaces).reduce(
3034
(a, b) => a + (b?.recordCount || 0),
3135
0
3236
);
33-
},
34-
namespaceCount: async function (_namespace = null) {
37+
}
38+
39+
async namespaceCount(_namespace = null) {
3540
const { pineconeIndex } = await this.connect();
3641
const namespace = await this.namespace(pineconeIndex, _namespace);
3742
return namespace?.recordCount || 0;
38-
},
39-
similarityResponse: async function ({
43+
}
44+
45+
async similarityResponse({
4046
client,
4147
namespace,
4248
queryVector,
@@ -75,28 +81,33 @@ const PineconeDB = {
7581
});
7682

7783
return result;
78-
},
79-
namespace: async function (index, namespace = null) {
84+
}
85+
86+
async namespace(index, namespace = null) {
8087
if (!namespace) throw new Error("No namespace value provided.");
8188
const { namespaces } = await index.describeIndexStats();
8289
return namespaces.hasOwnProperty(namespace) ? namespaces[namespace] : null;
83-
},
84-
hasNamespace: async function (namespace = null) {
90+
}
91+
92+
async hasNamespace(namespace = null) {
8593
if (!namespace) return false;
8694
const { pineconeIndex } = await this.connect();
8795
return await this.namespaceExists(pineconeIndex, namespace);
88-
},
89-
namespaceExists: async function (index, namespace = null) {
96+
}
97+
98+
async namespaceExists(index, namespace = null) {
9099
if (!namespace) throw new Error("No namespace value provided.");
91100
const { namespaces } = await index.describeIndexStats();
92101
return namespaces.hasOwnProperty(namespace);
93-
},
94-
deleteVectorsInNamespace: async function (index, namespace = null) {
102+
}
103+
104+
async deleteVectorsInNamespace(index, namespace = null) {
95105
const pineconeNamespace = index.namespace(namespace);
96106
await pineconeNamespace.deleteAll();
97107
return true;
98-
},
99-
addDocumentToNamespace: async function (
108+
}
109+
110+
async addDocumentToNamespace(
100111
namespace,
101112
documentData = {},
102113
fullFilePath = null,
@@ -197,8 +208,9 @@ const PineconeDB = {
197208
console.error("addDocumentToNamespace", e.message);
198209
return { vectorized: false, error: e.message };
199210
}
200-
},
201-
deleteDocumentFromNamespace: async function (namespace, docId) {
211+
}
212+
213+
async deleteDocumentFromNamespace(namespace, docId) {
202214
const { DocumentVectors } = require("../../../models/vectors");
203215
const { pineconeIndex } = await this.connect();
204216
if (!(await this.namespaceExists(pineconeIndex, namespace))) return;
@@ -216,8 +228,9 @@ const PineconeDB = {
216228
const indexes = knownDocuments.map((doc) => doc.id);
217229
await DocumentVectors.deleteIds(indexes);
218230
return true;
219-
},
220-
"namespace-stats": async function (reqBody = {}) {
231+
}
232+
233+
async "namespace-stats"(reqBody = {}) {
221234
const { namespace = null } = reqBody;
222235
if (!namespace) throw new Error("namespace required");
223236
const { pineconeIndex } = await this.connect();
@@ -227,8 +240,9 @@ const PineconeDB = {
227240
return stats
228241
? stats
229242
: { message: "No stats were able to be fetched from DB" };
230-
},
231-
"delete-namespace": async function (reqBody = {}) {
243+
}
244+
245+
async "delete-namespace"(reqBody = {}) {
232246
const { namespace = null } = reqBody;
233247
const { pineconeIndex } = await this.connect();
234248
if (!(await this.namespaceExists(pineconeIndex, namespace)))
@@ -239,8 +253,9 @@ const PineconeDB = {
239253
return {
240254
message: `Namespace ${namespace} was deleted along with ${details.vectorCount} vectors.`,
241255
};
242-
},
243-
performSimilaritySearch: async function ({
256+
}
257+
258+
async performSimilaritySearch({
244259
namespace = null,
245260
input = "",
246261
LLMConnector = null,
@@ -275,8 +290,9 @@ const PineconeDB = {
275290
sources: this.curateSources(sources),
276291
message: false,
277292
};
278-
},
279-
curateSources: function (sources = []) {
293+
}
294+
295+
curateSources(sources = []) {
280296
const documents = [];
281297
for (const source of sources) {
282298
const { metadata = {} } = source;
@@ -290,7 +306,7 @@ const PineconeDB = {
290306
}
291307
}
292308
return documents;
293-
},
294-
};
309+
}
310+
}
295311

296312
module.exports.Pinecone = PineconeDB;

0 commit comments

Comments
 (0)