From deaa7f50f84be6aa6cacbc8893978cb707376ed8 Mon Sep 17 00:00:00 2001 From: Deven Patel Date: Fri, 10 Nov 2023 16:04:25 -0800 Subject: [PATCH] [Bug Fix] fix chromadb where clause for query and delete (#937) Co-authored-by: Deven Patel --- embedchain/apps/app.py | 3 ++- embedchain/bots/base.py | 5 +++-- embedchain/embedchain.py | 10 +++++----- embedchain/vectordb/chroma.py | 8 ++++---- pyproject.toml | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/embedchain/apps/app.py b/embedchain/apps/app.py index 63a44f37..38cfdd86 100644 --- a/embedchain/apps/app.py +++ b/embedchain/apps/app.py @@ -3,7 +3,8 @@ from typing import Optional import yaml from embedchain.client import Client -from embedchain.config import AppConfig, BaseEmbedderConfig, BaseLlmConfig, ChunkerConfig +from embedchain.config import (AppConfig, BaseEmbedderConfig, BaseLlmConfig, + ChunkerConfig) from embedchain.config.vectordb.base import BaseVectorDbConfig from embedchain.embedchain import EmbedChain from embedchain.embedder.base import BaseEmbedder diff --git a/embedchain/bots/base.py b/embedchain/bots/base.py index db3bd433..a804b71b 100644 --- a/embedchain/bots/base.py +++ b/embedchain/bots/base.py @@ -1,9 +1,10 @@ from typing import Any from embedchain import Pipeline as App -from embedchain.config import AddConfig, PipelineConfig, BaseLlmConfig +from embedchain.config import AddConfig, BaseLlmConfig, PipelineConfig from embedchain.embedder.openai import OpenAIEmbedder -from embedchain.helper.json_serializable import JSONSerializable, register_deserializable +from embedchain.helper.json_serializable import (JSONSerializable, + register_deserializable) from embedchain.llm.openai import OpenAILlm from embedchain.vectordb.chroma import ChromaDB diff --git a/embedchain/embedchain.py b/embedchain/embedchain.py index 84ac5ff7..a764d13f 100644 --- a/embedchain/embedchain.py +++ b/embedchain/embedchain.py @@ -478,13 +478,13 @@ class EmbedChain(JSONSerializable): query_config = config or self.llm.config if where is not None: where = where - elif query_config is not None and query_config.where is not None: - where = query_config.where else: where = {} - - if self.config.id is not None: - where.update({"app_id": self.config.id}) + if query_config is not None and query_config.where is not None: + where = query_config.where + + if self.config.id is not None: + where.update({"app_id": self.config.id}) # We cannot query the database with the input query in case of an image search. This is because we need # to bring down both the image and text to the same dimension to be able to compare them. diff --git a/embedchain/vectordb/chroma.py b/embedchain/vectordb/chroma.py index e86651f3..120b7170 100644 --- a/embedchain/vectordb/chroma.py +++ b/embedchain/vectordb/chroma.py @@ -77,7 +77,7 @@ class ChromaDB(BaseVectorDB): def _generate_where_clause(self, where: Dict[str, any]) -> str: # If only one filter is supplied, return it as is # (no need to wrap in $and based on chroma docs) - if len(where.keys()) == 1: + if len(where.keys()) <= 1: return where where_filters = [] for k, v in where.items(): @@ -224,7 +224,7 @@ class ChromaDB(BaseVectorDB): input_query, ], n_results=n_results, - where=where, + where=self._generate_where_clause(where), ) else: result = self.collection.query( @@ -232,7 +232,7 @@ class ChromaDB(BaseVectorDB): input_query, ], n_results=n_results, - where=where, + where=self._generate_where_clause(where), ) except InvalidDimensionException as e: raise InvalidDimensionException( @@ -275,7 +275,7 @@ class ChromaDB(BaseVectorDB): return self.collection.count() def delete(self, where): - return self.collection.delete(where=where) + return self.collection.delete(where=self._generate_where_clause(where)) def reset(self): """ diff --git a/pyproject.toml b/pyproject.toml index d876fc84..6b6b391f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "embedchain" -version = "0.1.5" +version = "0.1.6" description = "Data platform for LLMs - Load, index, retrieve and sync any unstructured data" authors = [ "Taranjeet Singh ",