From 01036336d8b161909b815f038ed56ad4d546acc5 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Fri, 27 Oct 2023 16:02:04 -0700 Subject: [PATCH 1/6] include score value in similarityResponse for weaviate --- server/utils/vectorDbProviders/weaviate/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/utils/vectorDbProviders/weaviate/index.js b/server/utils/vectorDbProviders/weaviate/index.js index cdc40acd7a6..8543db7d764 100644 --- a/server/utils/vectorDbProviders/weaviate/index.js +++ b/server/utils/vectorDbProviders/weaviate/index.js @@ -77,6 +77,7 @@ const Weaviate = { const result = { contextTexts: [], sourceDocuments: [], + scores: [], }; const weaviateClass = await this.namespace(client, namespace); @@ -84,7 +85,7 @@ const Weaviate = { const queryResponse = await client.graphql .get() .withClassName(camelCase(namespace)) - .withFields(`${fields} _additional { id }`) + .withFields(`${fields} _additional { id certainty }`) .withNearVector({ vector: queryVector }) .withLimit(4) .do(); @@ -94,11 +95,12 @@ const Weaviate = { // In Weaviate we have to pluck id from _additional and spread it into the rest // of the properties. const { - _additional: { id }, + _additional: { id, certainty }, ...rest } = response; result.contextTexts.push(rest.text); result.sourceDocuments.push({ ...rest, id }); + result.scores.push(certainty); }); return result; From 4b2743005403913394888204ba857972de90c022 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Fri, 27 Oct 2023 16:05:09 -0700 Subject: [PATCH 2/6] include score value in si milarityResponse for qdrant --- server/utils/vectorDbProviders/qdrant/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/utils/vectorDbProviders/qdrant/index.js b/server/utils/vectorDbProviders/qdrant/index.js index 376c7d8bc64..2ee8e6ed1bd 100644 --- a/server/utils/vectorDbProviders/qdrant/index.js +++ b/server/utils/vectorDbProviders/qdrant/index.js @@ -51,11 +51,13 @@ const QDrant = { const result = { contextTexts: [], sourceDocuments: [], + scores: [], }; const responses = await client.search(namespace, { vector: queryVector, limit: 4, + with_payload: true, }); responses.forEach((response) => { @@ -64,6 +66,7 @@ const QDrant = { ...(response?.payload || {}), id: response.id, }); + result.scores.push(response.score); }); return result; From fdafc70a130e26edf4fc0e762a2a9d05051040d1 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Fri, 27 Oct 2023 16:06:25 -0700 Subject: [PATCH 3/6] include score value in si milarityResponse for pinecone --- server/utils/vectorDbProviders/pinecone/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/utils/vectorDbProviders/pinecone/index.js b/server/utils/vectorDbProviders/pinecone/index.js index bcdf07b5f7c..79b0d40b078 100644 --- a/server/utils/vectorDbProviders/pinecone/index.js +++ b/server/utils/vectorDbProviders/pinecone/index.js @@ -41,6 +41,7 @@ const Pinecone = { const result = { contextTexts: [], sourceDocuments: [], + scores: [], }; const response = await index.query({ queryRequest: { @@ -54,6 +55,7 @@ const Pinecone = { response.matches.forEach((match) => { result.contextTexts.push(match.metadata.text); result.sourceDocuments.push(match); + result.scores.push(match.score); }); return result; From 29dc228d727a08d10fbb5c72a6890c9ba7b5f6ef Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Fri, 27 Oct 2023 16:12:29 -0700 Subject: [PATCH 4/6] include score value in similarityResponse for chroma --- server/utils/vectorDbProviders/chroma/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/utils/vectorDbProviders/chroma/index.js b/server/utils/vectorDbProviders/chroma/index.js index aeaab47ae2b..d802231f6ac 100644 --- a/server/utils/vectorDbProviders/chroma/index.js +++ b/server/utils/vectorDbProviders/chroma/index.js @@ -49,6 +49,12 @@ const Chroma = { } return totalVectors; }, + distanceToScore: function (distance = null) { + if (distance === null || typeof distance !== "number") return 0.0; + if (distance >= 1.0) return 1; + if (distance <= 0) return 0; + return 1 - distance; + }, namespaceCount: async function (_namespace = null) { const { client } = await this.connect(); const namespace = await this.namespace(client, _namespace); @@ -59,6 +65,7 @@ const Chroma = { const result = { contextTexts: [], sourceDocuments: [], + scores: [], }; const response = await collection.query({ @@ -68,6 +75,7 @@ const Chroma = { response.ids[0].forEach((_, i) => { result.contextTexts.push(response.documents[0][i]); result.sourceDocuments.push(response.metadatas[0][i]); + result.scores.push(this.distanceToScore(response.distances[0][i])); }); return result; From 744ba669d09f2c6629e84ff3630d82ac00bf5050 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Fri, 27 Oct 2023 16:58:02 -0700 Subject: [PATCH 5/6] include score value in similarityResponse for lancedb --- server/utils/vectorDbProviders/lance/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/utils/vectorDbProviders/lance/index.js b/server/utils/vectorDbProviders/lance/index.js index 22d5730d04c..a42c1c694e3 100644 --- a/server/utils/vectorDbProviders/lance/index.js +++ b/server/utils/vectorDbProviders/lance/index.js @@ -54,6 +54,7 @@ const LanceDb = { const result = { contextTexts: [], sourceDocuments: [], + scores: [], }; const response = await collection @@ -66,6 +67,7 @@ const LanceDb = { const { vector: _, ...rest } = item; result.contextTexts.push(rest.text); result.sourceDocuments.push(rest); + result.scores.push(item.score); }); return result; From fc65248db2076d43b9bc8af98553f361f81c46ec Mon Sep 17 00:00:00 2001 From: timothycarambat Date: Mon, 30 Oct 2023 12:45:32 -0700 Subject: [PATCH 6/6] distance to similarity --- server/utils/vectorDbProviders/chroma/index.js | 4 ++-- server/utils/vectorDbProviders/lance/index.js | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/server/utils/vectorDbProviders/chroma/index.js b/server/utils/vectorDbProviders/chroma/index.js index d802231f6ac..8e33b35e42d 100644 --- a/server/utils/vectorDbProviders/chroma/index.js +++ b/server/utils/vectorDbProviders/chroma/index.js @@ -49,7 +49,7 @@ const Chroma = { } return totalVectors; }, - distanceToScore: function (distance = null) { + distanceToSimilarity: function (distance = null) { if (distance === null || typeof distance !== "number") return 0.0; if (distance >= 1.0) return 1; if (distance <= 0) return 0; @@ -75,7 +75,7 @@ const Chroma = { response.ids[0].forEach((_, i) => { result.contextTexts.push(response.documents[0][i]); result.sourceDocuments.push(response.metadatas[0][i]); - result.scores.push(this.distanceToScore(response.distances[0][i])); + result.scores.push(this.distanceToSimilarity(response.distances[0][i])); }); return result; diff --git a/server/utils/vectorDbProviders/lance/index.js b/server/utils/vectorDbProviders/lance/index.js index a42c1c694e3..9d4460586c3 100644 --- a/server/utils/vectorDbProviders/lance/index.js +++ b/server/utils/vectorDbProviders/lance/index.js @@ -18,6 +18,12 @@ const LanceDb = { const client = await lancedb.connect(this.uri); return { client }; }, + distanceToSimilarity: function (distance = null) { + if (distance === null || typeof distance !== "number") return 0.0; + if (distance >= 1.0) return 1; + if (distance <= 0) return 0; + return 1 - distance; + }, heartbeat: async function () { await this.connect(); return { heartbeat: Number(new Date()) }; @@ -67,7 +73,7 @@ const LanceDb = { const { vector: _, ...rest } = item; result.contextTexts.push(rest.text); result.sourceDocuments.push(rest); - result.scores.push(item.score); + result.scores.push(this.distanceToSimilarity(item.score)); }); return result;