From 572a6a435ede3d78ab0362173ce6245758443c23 Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Mon, 10 Apr 2023 21:23:36 +0100 Subject: [PATCH] Flter null values out of metadata for pinecone --- langchain/src/vectorstores/pinecone.ts | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/langchain/src/vectorstores/pinecone.ts b/langchain/src/vectorstores/pinecone.ts index f835d3cc1967..19382a676bd8 100644 --- a/langchain/src/vectorstores/pinecone.ts +++ b/langchain/src/vectorstores/pinecone.ts @@ -53,14 +53,26 @@ export class PineconeStore extends VectorStore { ids?: string[] ): Promise { const documentIds = ids == null ? documents.map(() => uuidv4()) : ids; - const pineconeVectors = vectors.map((values, idx) => ({ - id: documentIds[idx], - metadata: flatten({ + const pineconeVectors = vectors.map((values, idx) => { + // Pinecone doesn't support nested objects, so we flatten them + const metadata: { + [key: string]: string | number | boolean | null; + } = flatten({ ...documents[idx].metadata, [this.textKey]: documents[idx].pageContent, - }) as object, - values, - })); + }); + // Pinecone doesn't support null values, so we remove them + for (const key of Object.keys(metadata)) { + if (metadata[key] == null) { + delete metadata[key]; + } + } + return { + id: documentIds[idx], + metadata, + values, + }; + }); // Pinecone recommends a limit of 100 vectors per upsert request const chunkSize = 50;